> For the complete documentation index, see [llms.txt](https://novahacking.gitbook.io/anonymous17/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novahacking.gitbook.io/anonymous17/articulos/tratamiento-para-la-tty.md).

# Tratamiento para la TTY

TAG -> Artículos

En este artículo comparto pequeños trucos y comandos que utilizo para mejorar mi experiencia con la terminal, especialmente cuando trabajo con una **reverse shell** durante un laboratorio CTF. Veremos cómo obtener una **PTY (pseudoterminal)**, mejorar la interacción con la shell, configurar los colores y ajustar el tamaño de la terminal. Es importante distinguir entre la **terminal local** (nuestro equipo) y la **shell remota** (la máquina objetivo), porque no todos los pasos se realizan en el mismo lado.

## <mark style="color:green;">Recuperar una terminal interactiva</mark>

En algunos casos, al explotar una máquina o trabajar en un entorno limitado, recibimos una **shell básica** que no maneja correctamente las teclas especiales, las señales o programas interactivos como `nano`. Para mejorarla podemos iniciar una **PTY**, aunque esto no garantiza por sí solo una terminal completamente funcional. Aquí muestro los dos métodos que suelo utilizar:

### <mark style="color:purple;">Manual</mark>

Este es el procedimiento manual que suelo seguir. Primero ejecuto `script /dev/null -c bash` **en la shell remota** para crear una PTY asociada a Bash; `/dev/null` hace que se descarte la transcripción de `script`, no que se cree un entorno «limpio». Después, desde **mi terminal local**, utilizo `Ctrl + Z` para suspender la conexión y ejecuto `stty raw -echo; fg` para ajustar el modo de la terminal local y devolver la sesión al primer plano. Ya de vuelta en la máquina objetivo, utilizo `reset xterm` y `export TERM=xterm`, y compruebo la interacción con `nano`. El tamaño real de mi terminal lo consulto **localmente** con `stty size`, preferiblemente antes de cambiar a modo raw, y lo reproduzco en la PTY remota con `stty rows 46 cols 168`. Los valores **46** y **168** son los de mi ejemplo y deben adaptarse a cada terminal. Si la terminal local queda sin eco después de una interrupción, puedo restaurarla desde mi equipo con `stty sane`. La siguiente secuencia reúne los comandos utilizados en el procedimiento:

```bash
script /dev/null -c bash      # Crea un entorno limpio de bash en la reverse shell
ctrl + z                      # Suspende la sesión actual 
stty raw -echo; fg            # Restaura la terminal en modo crudo
reset xterm                   # Resetea y habilita el entorno xterm
echo $TERM                    # Verifica el tipo de terminal actual
export TERM=xterm             # Establece xterm como tipo de terminal
nano                          # Comprueba si el tamaño de terminal es correcto

# Ajustar tamaño de la terminal
stty size                     # Verifica las filas y columnas actuales en tu terminal
stty rows 46 cols 168         # Ajusta manualmente el tamaño de la terminal víctima
```

### <mark style="color:purple;">Usando Python</mark>

Si tengo **Python 3** disponible en la máquina remota, puedo utilizar su módulo `pty` para iniciar una shell de Bash asociada a una **pseudoterminal** mediante `pty.spawn()`. Es una alternativa al método con `script`, pero **por sí sola no configura la terminal local en modo raw**: según el tipo de conexión, todavía podría ser necesario recuperar la sesión con `Ctrl + Z`, `stty raw -echo; fg` y configurar `TERM` para interactuar correctamente.

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

***

### <mark style="color:purple;">Tener la terminal con colores</mark>

Un entorno con colores y dimensiones correctas facilita el trabajo con comandos y editores. En este ejemplo reúno en una sola línea el ajuste del tamaño de la **PTY remota**, la variable `TERM`, la variable `SHELL` y la carga de un archivo `.bashrc`. Conviene recordar que **declarar compatibilidad con colores no garantiza que el prompt o las aplicaciones los muestren**: también influye la configuración de la shell y del sistema.

```bash
stty rows 46 cols 168 && export TERM=xterm-256color SHELL=bash && source /etc/skel/.bashrc
```

### <mark style="color:purple;">**¿Qué hace este comando?**</mark>

1. Ajusta las dimensiones de la **PTY remota** a **46 filas y 168 columnas**, que son las medidas de mi terminal en este ejemplo. Debemos sustituirlas por las dimensiones reales de nuestra terminal local.
2. Establece `xterm-256color` en la variable **`TERM`** para indicar que las aplicaciones pueden utilizar las capacidades de ese tipo de terminal, incluidas las de **256 colores**, siempre que el entorno las admita.
3. Asigna `bash` a la variable de entorno **`SHELL`**. Es importante aclarar que esto **no inicia Bash ni cambia la shell que ya se está ejecutando**: únicamente modifica el valor de esa variable.
4. Ejecuta el archivo **`/etc/skel/.bashrc`**, que suele ser una plantilla de configuración para nuevos usuarios. Puede aplicar alias, ajustes del prompt o colores, pero **no es necesariamente el `.bashrc` personal del usuario ni garantiza que existan esas configuraciones**. Conviene revisar su contenido antes de cargarlo.

Estos procedimientos forman parte de mi día a día cuando trabajo con **shells remotas en Linux**. Su resultado puede variar según el sistema, la shell, la herramienta utilizada para recibir la conexión y las capacidades de la PTY. Espero que te sean útiles para comprender **qué hace cada ajuste y cuándo conviene aplicarlo**. Si conoces otros trucos o mejoras, siempre estoy abierto a seguir aprendiendo.
