Taller de pivoting: Netcat y Socat

No podía faltar entre estas entradas de pivoting una dedicada a Netcat, la navaja suiza de TCP/IP, y su homólogo "con esteroides" Socat.

Netcat

Empecemos con Netcat que, aunque puede hacer muchas cosas, tiene como objetivo y función principales:

- Crear un socket inicial para establecer una conexión desde el servidor al cliente.
- Una vez conectado, generar automáticamente un segundo socket para transmitir archivos desde el servidor al cliente y viceversa (realmente esa es la parte sexy)

Y volvemos al escenario típico de pivoting, en el que el atacante compromete un equipo que tiene acceso a través del firewall a otro servidor que también queremos atacar:

En la máquina del atacante configuraremos un relay listener-to-listener usando el siguiente comando:




# ncat -lv --broker -m2 10000
Ncat: Version 6.01 ( http://nmap.org/ncat )
Ncat: Listening on :::10000
Ncat: Listening on 0.0.0.0:10000

En este momento, tendremos levantado el puerto 10000 en nuestra máquina. Luego, en el servidor comprometido ejecutaremos el siguiente comando:

$ ncat -v 192.168.2.42 10000 -c "ncat -v 192.168.33.15 20000"
Ncat: Version 5.51 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.2.42:10000.
Ncat: Version 5.51 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.33.15:20000.

Ojo porque esa comando es para la versión netcat-traditional. En Ubuntu y en muchas distros de Linux encontraremos por defecto la versión netcat-openbsd. Si queremos la tradicional tendremos que instalarla específicamente y seleccionarla con update-alternatives:

sudo apt-get install netcat-traditional
sudo update-alternatives --config nc

O si deseas utilizar la versión openbsd también podrás hacer la redirección por medio de una tubería fifo:

mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe

Una alternativa que funciona en bash en OS X es usar una tubería o pipe bidireccional. Puede funcionar en otros sistemas Unix:

nc 127.0.0.1 8000 <&1 | nc -l 8001 >&0

Después podremos ejecutar en la máquina del atacante:

# ./exploit.py 127.0.0.1 10000
[+] sending payload of length 1479


Socat

Ahora continuaremos con Socat, una utilidad similar a Netcat que funciona a través de una serie de protocolos y de archivos, tuberías, dispositivos (terminales o módems, etc.), conectores (Unix, IP4, IP6 - raw, UDP, TCP), un cliente para SOCKS4 , proxy CONNECT o SSL, etc. Proporciona forking, logging y dumping, diferentes modos de comunicación entre procesos y muchas más opciones.

Empezaremos haciendo un simple túnel para el reenvío de un puerto:

socat TCP4-LISTEN:10000,reuseaddr,fork TCP4:192.168.33.15:20000

La opción reuseaddr permite que otros sockets se vinculen a una dirección incluso si socat ya la usa (por ejemplo, el puerto local). Con la opción fork después de establecer una conexión, lleva su canal a un proceso secundario y mantiene el proceso principal intentando producir más conexiones, ya sea escuchando o conectando en un loop.

Luego si tenemos un proxy delante podemos "indicar" a socat que lo utilice, incluso con las crendenciales correspondientes si ya las tenemos:

socat TCP4-LISTEN:10000,reuseaddr,fork  PROXY:servidor_proxy:192.168.33.15:20000, proxyport=3128, proxyauth=user:pass

Con el siguiente comando configuraremos un sencillo reenviador de puertos TCP. Con TCP4-LISTEN escuchamos en el puerto local "www" hasta que llegue una conexión y se acepte.
 
socat -d -d -lmlocal2 TCP4-LISTEN:5666,bind=192.168.2.42,su=nobody,fork,reuseaddr TCP4:192.168.33.15:5432

Como veis, el servicio que se ejecuta en 192.168.2.42:5432 es reenviado a 192.168.33.15:5666. Los parámetros -d -d imprimen mensajes calificados como fatal, error, warning y notice y con -lmlocal2 socat loggea a stderr.

Finalmente, usaremos dos instancias de socat para generar dispositivos TUN en diferentes hosts y conectar ambos lados como si fuera una sencilla VPN.

TUN Server
socat -d -d TCP-LISTEN:11443,reuseaddr TUN:192.168.255.1/24,up

Después de iniciar este comando, socat esperará una conexión y luego creará un pseudo-dispositivo de red TUN con la dirección 192.168.255.1; el número de bit especifica la máscara de la red que se pretende conectar en esta interfaz.

TUN Client
socat TCP: 192.168.33.15:11443 TUN: 192.168.255.2/24, up

Con este último comando se establece una conexión con el servidor y se crea el dispositivo TUN en el cliente.

2 comentarios :

  1. Me encanta socat, me parece potentísimo, pero explotarlo como es debido tampoco me parece cosa fácil.
    Cada vez que veo que lo usan en algún walkthrough aprendo algún truquito nuevo.

    ResponderEliminar
  2. A mí también, y me pasa lo mismo, la de cosas que se pueden hacer con Socat ;)

    ResponderEliminar