
Ein kompakter Leitfaden für Netzwerk-Pivoting bei Penetrationstests / CTF-Challenges.
Verwende keine ICMP-Echoanfragen (Ping), um SOCKS-Proxys zu testen.
SOCKS ist ein Internetprotokoll, das Netzwerkpakete zwischen einem Client und einem Server über einen Proxy-Server austauscht. In der Praxis leitet ein SOCKS-Server TCP-Verbindungen an eine beliebige IP-Adresse weiter und bietet eine Möglichkeit, UDP-Pakete weiterzuleiten.
Du solltest es mit einem TCP-basierten Protokoll testen (z. B. versuchen, per SSH eine Verbindung herzustellen oder eine HTTP-GET-Anfrage an einen Host durch den Pivot-Tunnel zu senden).
NMAP muss mit TCP-Connect-Scan (-sT) und ohne Ping (-Pn) verwendet werden
Dies gilt auch für Versions- (-sV) und Skript-Scans (-sC). Sie sollten in Kombination mit -sT und -Pn verwendet werden.
Beispiele:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains nmap -sT -Pn -sV -sC -p 21,80,443,445 x.x.x.x
Tipp: Du kannst naabu auf den Zielrechner hochladen und wie ein Boss scannen.
Verwendung von Skripten und Binärdateien mit proxychains
Ein Tipp für die Verwendung von proxychains ist, sicherzustellen, dass du bei einem interpretierten Programm (wie einem Python-Skript) das Python-Binary explizit vor dem Skript referenzierst, selbst wenn das Skript mit einem Shebang beginnt, z. B.:
proxychains4 [-q -f proxychains.conf] python python_script.py
Ohne diesen expliziten Verweis auf den Skript-Interpreter kann es vorkommen, dass der vom Skript erzeugte Datenverkehr nicht wie beabsichtigt durch den Proxy geleitet wird und die Netzwerkverbindung fehlschlägt. Tipp-Quelle
Entkommentiere die Zeile „quite mode" in /etc/proxychains.conf, um stdout zu vermeiden, das manchmal frustrierend sein kann.
Dies ist nur ein Vorschlag.
Ermöglicht es dir, einen Socket auf dem lokalen Rechner (SSH-Client) zu erstellen, der als SOCKS-Proxy-Server fungiert. Wenn ein Client sich mit diesem Port verbindet, wird die Verbindung an den entfernten Rechner (SSH-Server) weitergeleitet, der sie dann an einen dynamischen Port auf dem Zielrechner weiterleitet.
So richtest du es ein:
Bearbeite /etc/proxychains.conf und nimm Folgendes vor:
Richte das SSH-Dynamische Port-Forwarding ein:
ssh -D 127.0.0.1:9050 user@victim-IP
Anwendungsbeispiele:
Wobei x.x.x.x die IP-Adresse eines Hosts im getunnelten Netzwerk ist:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains smbmap -H x.x.x.x
proxychains ssh [email protected]
Um Firefox durch den Tunnel zu verwenden:
proxychains firefox
Wenn du suchst, wie du eine Reverse Shell durch einen Pivot-Tunnel bekommst, ist das hier das Richtige. Es ermöglicht dir, einen Port auf dem entfernten (Opfer-)Rechner an einen Port auf dem lokalen (Angreifer-)Rechner weiterzuleiten.
So richtest du es ein:
Verbinde dich per SSH mit dem Zielrechner.
Bearbeite /etc/ssh/sshd_config und nimm Folgendes vor:
*Das ist sehr wichtig und viele Anleitungen im Internet erwähnen es nicht. Wenn du das nicht tust, kannst du den Tunnel nur auf 127.0.0.1 statt 0.0.0.0 einrichten, was dazu führt, dass kein Datenverkehr weitergeleitet wird, wenn er von einem anderen Host als localhost stammt.
sudo service ssh restartRichte das SSH-Remote-Port-Forwarding ein:
Im Wesentlichen ist der Befehl nach der oben beschriebenen Einrichtung so einfach:
ssh -R 2222:*:2222 user@victim-IP
Um zu testen, ob es funktioniert, könntest du Folgendes tun:
Richte einen Listener (z. B. Netcat) auf deinem Angreifer-Rechner ein (auf dem Port, den du für das Remote-Forwarding konfiguriert hast, in diesem Beispiel 2222) und sende eine Anfrage vom Zielrechner an sich selbst (localhost). In diesem Beispiel wäre das nc 127.0.0.1 2222. Wenn dein Angreifer-Rechner die Verbindung empfängt, bedeutet das: a) Es funktioniert und b) jede Verbindung von Pivot-Hosts zur Ziel-IP:2222 wird an den Angreifer-Rechner weitergeleitet.
Du kannst mehrere Ports wie folgt setzen:
ssh -R 2222:*:2222 -R 3333:*:3333 user@victim-IP
Achtung: Anfragen von fremden Hosts (Pivot-Netzwerk) müssen an die Ziel-IP gerichtet sein, um zurück an den Angreifer-Rechner weitergeleitet zu werden.
*Du kannst Remote-Port-Forwarding auch umsetzen, indem du per SSH vom Zielrechner aus eine Verbindung zum Angreifer-Rechner herstellst.
Lokales Port-Forwarding ermöglicht es dir, einen Port auf dem lokalen (Angreifer-)Rechner an einen Port auf dem entfernten (Ziel-)Rechner weiterzuleiten. Besonders nützlich, um lokale Ports auf dem Zielrechner zu scannen.
Verwendung:
ssh user@victim-IP -L 8888:127.0.0.1:8086
Du kannst jetzt z. B. nmap verwenden, um Port 8086 auf dem Zielrechner so zu scannen:
nmap -Pn -n -p8888 -sV 127.0.0.1
Ein Beispiel, wie doppeltes Pivoting mit SSH-Dynamischem Port-Forwarding und Proxychains umgesetzt wird.
Konzept:
Angenommen, wir haben die folgenden 4 Rechner.
| IP | Rolle |
|---|---|
| 10.10.10.10 | Angreifer |
| 10.10.10.11 | Jumphost1 |
| 172.16.1.12 | Jumphost2 |
| 172.16.2.13 | Jumphost3 |
Der Angreifer kann Jumphost1 erreichen.
Jumphost1 kann Jumphost2 erreichen.
Jumphost2 kann Jumphost3 erreichen.
...
socks4 127.0.0.1 9050
socks4 127.0.0.1 9999
ssh -D 127.0.0.1:9999 user@Jumphost2
Du solltest jetzt in der Lage sein, Jumphost3 zu erreichen.
sshuttle ermöglicht es dir, per SSH eine VPN-Verbindung von deinem Rechner zu einem beliebigen Remote-Server herzustellen, sofern dieser Server Python 2.3 oder höher besitzt. Damit es funktioniert, benötigst du Root-Zugriff auf dem lokalen Rechner, auf dem Server reicht jedoch ein normales Konto. Es ist möglich, sshuttle mehrfach gleichzeitig auf einem einzelnen Client-Rechner auszuführen, wobei jedes Mal eine Verbindung zu einem anderen Server hergestellt wird, sodass du gleichzeitig in mehreren VPNs sein kannst. Siehe das sshuttle-GitHub-Repository.
Verwendung:
Angenommen, wir wollen in 172.16.2.0/16 pivoten:
sshuttle -vvr root@victim 172.16.2.0/16