Usando socat para redirección de puertos TCP

Usando socat para redirección de puertos TCP

En el mundo de la administración de sistemas y la ciberseguridad, conocer herramientas flexibles y potentes es clave. Una de esas herramientas es socat, una utilidad de red que puede parecer sencilla, pero que es extremadamente poderosa tanto para tareas legítimas como para pruebas de penetración. En este artículo, exploraremos cómo usar socat para redirección de puertos HTTP y también cómo puede ser utilizada en movimientos laterales dentro de una red.

¿Qué es socat?

socat (SOcket CAT) es una herramienta de línea de comandos que permite establecer conexiones bidireccionales entre dos flujos de datos. Estos flujos pueden ser sockets TCP, UDP, archivos, terminales, dispositivos serie, y más. Piensa en socat como el «netcat con esteroides».

Redirección de puertos HTTP con socat

Un caso de uso muy común es redirigir tráfico HTTP desde un puerto a otro. Por ejemplo, si tienes un servidor web corriendo en el puerto 8080 y quieres exponerlo en el puerto 80 sin cambiar la configuración del servicio, puedes hacer lo siguiente:

sudo socat TCP-LISTEN:80,fork TCP:127.0.0.1:8080

¿Qué hace este comando?

TCP-LISTEN:80 escucha en el puerto 80.

fork permite manejar múltiples conexiones simultáneamente.

TCP:127.0.0.1:8080 redirige todo el tráfico al puerto 8080 de localhost.

Con esto, cualquier petición a tu servidor en el puerto 80 será reenviada automáticamente al 8080. Es muy útil en entornos donde se quiere evitar modificar la configuración de un servicio que ya está corriendo.

Socat y los movimientos laterales en red

Además de ser útil para redirección de puertos a nivel local, socat también es ampliamente utilizado en movimientos laterales dentro de una red interna comprometida. Esta técnica es habitual en escenarios de post-explotación, cuando un atacante ya ha ganado acceso a una máquina intermedia en la red.

Escenario típico

Imagina que un atacante tiene acceso a una máquina que sí está expuesta a Internet (IP pública), y desde esa máquina puede acceder internamente a otra máquina que no tiene exposición directa externa, pero sí está conectada a la misma red interna.

Esta segunda máquina, por ejemplo, podría tener corriendo un servicio (como SSH, RDP, MySQL, etc.) en un puerto que solo es accesible desde la red interna.

El atacante, desde la máquina comprometida expuesta a Internet, puede usar socat para exponer ese puerto interno al exterior y acceder al servicio como si estuviera en su propia red.

Comando socat para exponer el puerto:

socat TCP-LISTEN:puerto_externo,bind=0.0.0.0,fork,reuseaddr TCP:ip_interna:puerto_interno

Ejemplo práctico:

Supón que la IP interna del segundo equipo es 192.168.1.20 y tiene SSH en el puerto 22. La máquina intermedia (la comprometida) tiene una IP pública, y quieres acceder a ese SSH desde tu equipo remoto a través de esa IP pública.

Ejecuta en la máquina intermedia:

socat TCP-LISTEN:2222,bind=0.0.0.0,fork,reuseaddr TCP:192.168.1.20:22

Con esto:

  • El puerto 2222 queda expuesto públicamente.

  • Todo lo que llegue a puerto 2222 en la máquina intermedia se redirige al puerto 22 de la IP interna 192.168.1.20.

Desde fuera, el atacante solo necesita hacer:

ssh usuario@ip_publica -p 2222

Y estará accediendo a la máquina que antes solo era accesible desde la red interna.

¿Por qué esto es útil (o peligroso)?

  • Permite al atacante pivotar entre máquinas.

  • Expone servicios que normalmente estarían aislados de Internet.

  • Es una técnica difícil de detectar si no se monitoriza adecuadamente el tráfico saliente/entrante.

Deja una respuesta