Demostración en vídeo de este post
Socat es una herramienta muy potente que se encuentra disponible tanto en sistemas Windows como Linux. A diferencia de otras herramientas como Netcat, cuenta con muchas opciones que permiten gestionar las conexiones y, por supuesto, crear túneles y redirectores para llevar a cabo movimientos laterales.
En este post, explicaré algunos comandos útiles que te ayudarán a dominar esta herramienta y hacer un buen uso de ella.
Para empezar, es conveniente conocer algunas de las instrucciones más comunes en Socat, lo que te permitirá entender cómo funciona la herramienta.
Su sintaxis es simple, es necesario indicar dos posiciones, las cuales representan el origen y el destino, dicho de otro modo, el cliente y el servidor.
Partiendo de esta base, se pueden hacer muchas cosas, ya que la herramienta cuenta con un conjunto muy potente de opciones. Vamos a explorar a continuación, algunos comandos básicos.
El siguiente comando recibe texto en el flujo de entrada estándar y, a continuación, envía dicho texto al destino indicado.
Hay algunas opciones que se pueden establecer tanto en el origen como en el destino. Por ejemplo, se puede indicar un tiempo de timeout y el número de bytes que se deben leer y enviar al destino.
Socat permite abrir un puerto en la máquina local para que, todo el tráfico entrante en dicho puerto, sea enrutado a un destino distinto. Esto, como te imaginarás, permite crear túneles y facilita los movimientos laterales en la etapa de post-explotación. Con socat, esto se puede hacer con el siguiente comando
En el ejemplo anterior, se abre el puerto 4444 en la máquina local y, a continuación, todos los paquetes que reciba socat por dicho puerto serán enrutados al destino indicado con la opción «TCP4».
Con la opción «TCP4-Listen» es posible abrir un puerto, pero además, también se pueden indicar algunas restricciones para limitar las conexiones entrantes. Por ejemplo, se puede indicar la dirección IP o interfaz de red en la que se levantará el puerto, el usuario con el que proceso se ejecutará y si se debe hacer o no «fork» en el servidor.
En el ejemplo anterior, se abre el puerto 3000 y el proceso se ejecuta con los permisos del usuario «adastra». Además, se realiza un fork tras cada conexión, por lo que el servidor seguirá aceptando conexiones por parte de otros clientes. Finalmente, las conexiones entrantes simplemente se enrutan a «google.com».
Con Netcat es muy común utilizar la conexión TCP para ejecutar comandos en una «bind» o «reverse» shell. En Socat esto también es posible, para ello se debe usar la opción EXEC tal como se enseña en el siguiente ejemplo
El cliente simplemente establece una conexión y, cuando Socat la recibe, ejecuta el comando «/bin/bash». A partir de este punto, todas las instrucciones que envíe el cliente son interpretadas por bash y la salida se enseña en la terminal del cliente.
En este primer artículo has visto el uso básico de Socat, pero ofrece muchas más opciones interesantes que explicaré en el siguiente. Concretamente, verás cómo utilizar un proxy para tus conexiones, cifrar los datos del canal de comunicación con OpenSSL o crear una pequeña VPN. Son cosas que explicaré en la siguiente parte de esta serie.
Un saludo y Happy Hack!
Adastra.