Shells y TTY: tener una terminal en condiciones
Antes de escalar privilegios necesito una shell estable. Una reverse shell recogida con nc -lvnp 4444 es frágil: no tiene autocompletado ni historial, Ctrl+C la mata, sudo y su se quejan de que no hay TTY y los editores como vim no funcionan. Por eso recomiendo no usar netcat a pelo y recibir la shell con un shell handler que la sanea sola.
Penelope (la que uso)
Penelope es un shell handler pensado para sustituir a netcat cuando explotas un RCE. Al recibir la conexión sube la shell a PTY automáticamente, así que desde el primer segundo tengo una terminal completa.
# Instalar (cualquiera de las dos)
sudo apt install penelope
pipx install penelope-shell-handler
# Escuchar
penelope # 0.0.0.0:4444
penelope -p 5555 # otro puerto
penelope -a # además muestra payloads de reverse shell listos para copiarLo que me aporta frente a netcat:
| Función | Para qué me sirve |
|---|---|
| PTY automática | Autocompletado, historial, Ctrl+C sin perder la shell, sudo/su/vim funcionan |
| Varias sesiones | Recibo varias shells y cambio entre ellas desde un menú (F12 vuelve al menú) |
| Subir y bajar archivos | upload / download sin montar un servidor aparte |
| Módulos | Por ejemplo, subir scripts de enumeración como linpeas con un comando |
| Logs | Guarda todo lo que hago en cada sesión, útil para el informe |
| Compartir archivos | penelope -s <carpeta> sirve una carpeta por HTTP |
Flujo típico
penelope -aen mi máquina.- Lanzo en la víctima uno de los payloads que me muestra (bash, python, php…).
- Llega la sesión ya con PTY: directamente
sudo -l, linpeas, etc.
pwncat-cs (alternativa)
pwncat-cs hace algo parecido: recibe la shell, la estabiliza y añade módulos de post-explotación para Linux. El repositorio está archivado (ya no se actualiza), así que hoy prefiero Penelope.
pipx install pwncat-cs
pwncat-cs -lp 4444Si solo tengo netcat: sanear la TTY a mano
Es bueno saber hacerlo por si no puedo usar otra herramienta.
# 1. En la shell recibida: crear una PTY
python3 -c 'import pty; pty.spawn("/bin/bash")' # o: script /dev/null -c bash
# 2. Ctrl+Z para dejarla en segundo plano y, en MI terminal:
stty raw -echo; fg
# 3. De vuelta en la shell: tipo de terminal y tamaño
reset xterm
export TERM=xterm SHELL=bash
stty rows 40 columns 160 # los valores de 'stty size' en mi terminalCon rlwrap nc -lvnp 4444 se consigue al menos historial y flechas, útil en Windows donde el truco de la PTY no aplica.
Windows
En Windows la shell de netcat tampoco es interactiva. Penelope también acepta shells de Windows y, si tengo credenciales y WinRM (puerto 5985) abierto, evil-winrm da directamente una PowerShell cómoda.
