
Venom - Ein Multi-Hop-Proxy für Penetrationstester
Venom ist ein in Go entwickeltes Multi-Level-Proxy-Tool, das für Penetrationstester konzipiert ist.
Venom kann mehrere Knoten verbinden und diese Knoten als Sprungbrett nutzen, um eine mehrstufige Proxy-Kette aufzubauen.
Penetrationstester können Venom verwenden, um Netzwerkverkehr einfach in mehrere interne Netzwerke zu leiten und die Proxy-Knoten bequem zu verwalten.
Dieses Tool ist ausschließlich für Sicherheitsforschung und Schulungszwecke bestimmt. Der Benutzer trägt die alleinige Verantwortung für alle rechtlichen und damit verbundenen Konsequenzen, die sich aus der Nutzung dieses Tools ergeben! Der Autor übernimmt keine rechtliche oder damit verbundene Haftung!
Da IoT-Geräte (arm/mips/...) normalerweise über begrenzte Ressourcen verfügen, unterstützen die für IoT-Umgebungen kompilierten Binärdateien dieses Projekts keine Port-Nutzung und SSH-Tunnel, um die Größe der Binärdatei zu reduzieren. Außerdem wurden die Netzwerk-Parallelität und die Puffergröße begrenzt, um den Speicherverbrauch zu minimieren.
Sie können die vorkompilierten ausführbaren Dateien direkt von der Release-Seite herunterladen.
Wenn Sie das Projekt aus dem Quellcode kompilieren möchten, müssen Sie go >= 1.11 installieren und dann die folgenden Befehle ausführen:
go get -u github.com/Dliv3/Venom/...
# $GOPATH ist die bei der Installation von Go konfigurierte Umgebungsvariable, die mit dem Befehl go env angezeigt werden kann
cd $GOPATH/src/github.com/Dliv3/Venom
# Die kompilierten Binärdateien werden im Release-Ordner im aktuellen Verzeichnis gespeichert
./build.sh
YouTube-Demo-Video: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
Admin- und Agent-Knoten können Verbindungen sowohl abhören als auch initiieren
Admin lauscht auf einem Port, Agent stellt Verbindung her:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
Agent lauscht auf einem Port, Admin stellt Verbindung her:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
Agent-Knoten unterstützen Port-Nutzung
Der Agent bietet zwei Methoden zur Port-Nutzung:
Mit der Port-Nutzung von Venom können unter Windows Ports von Diensten wie Apache, MySQL usw. genutzt werden (jedoch vorübergehend nicht RDP, IIS usw.). Unter Linux können die meisten Dienst-Ports genutzt werden. Der genutzte Port kann weiterhin normal seinen ursprünglichen Dienst bereitstellen.
Erste Methode zur Port-Nutzung
# Beispiel unter Windows mit Apache
# Nutzung des Apache-Ports 80, ohne den normalen HTTP-Dienst von Apache zu beeinträchtigen
# -lhost muss die IP des lokalen Hosts sein, nicht 0.0.0.0, sonst funktioniert die Port-Nutzung nicht
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
Zweite Methode zur Port-Nutzung
# Beispiel unter Linux mit Apache
# Root-Rechte erforderlich
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
Diese Methode erstellt iptables-Regeln, die den Datenverkehr von reuse-port an lport weiterleiten, von wo aus der Agent ihn verteilt.
Beachten Sie: Wenn das Programm über sigterm oder sigint (kill oder Strg-C) beendet wird, kann es die iptables-Regeln automatisch bereinigen. Wenn der Agent mit kill -9 beendet wird, ist dies nicht möglich, da das Programm das sigkill-Signal nicht verarbeiten kann. In diesem Fall müssen die iptables-Regeln manuell bereinigt werden.
Um zu vermeiden, dass die iptables-Regeln nicht automatisch bereinigt werden, wurde die zweite Methode basierend auf iptables -m recent implementiert, die die Weiterleitungsregeln über spezielle TCP-Pakete steuert.
Diese Implementierung bezieht sich auf https://threathunter.org/topic/594545184ea5b2f5516e2033
# Starten des Agents mit iptables-Regeln auf dem Linux-Host
# Wenn sich rhost im internen Netzwerk befindet, kann ein SOCKS5-Proxy für den Skriptverkehr verwendet werden (siehe unten)
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# Verbindung zum Agent-Knoten herstellen
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# Zum Deaktivieren der Weiterleitungsregeln
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
Verschlüsselte Kommunikation zwischen Knoten
Venom bietet eine verschlüsselte Kommunikation zwischen Knoten. Der Benutzer kann mit der Option -passwd ein Passwort angeben, das zur Generierung des AES-Verschlüsselungsschlüssels verwendet wird.
# Passwort mit -passwd setzen: dlive@dubhe
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# Agent mit demselben Passwort verbinden
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
help Hilfe anzeigen
(admin node) >>> help
help Hilfeinformationen.
exit Beenden.
show Netzwerktopologie anzeigen.
getdes Beschreibung des Zielknotens anzeigen.
setdes [info] Beschreibung zum Zielknoten hinzufügen.
goto [id] ID als Zielknoten auswählen.
listen [lport] Auf einem Port auf dem Zielknoten lauschen.
connect [rhost] [rport] Über den Zielknoten mit einem neuen Knoten verbinden.
sshconnect [user@ip:port] [dport] Über einen SSH-Tunnel mit einem neuen Knoten verbinden.
shell Interaktive Shell auf dem Zielknoten starten.
upload [local_file] [remote_file] Dateien auf den Zielknoten hochladen.
download [remote_file] [local_file] Dateien vom Zielknoten herunterladen.
socks [lport] SOCKS5-Server starten.
lforward [lhost] [sport] [dport] Lokalen Port zu einem entfernten Port weiterleiten.
rforward [rhost] [sport] [dport] Entfernten Port zu einem lokalen Port weiterleiten.
show Netzwerktopologie anzeigen
A steht für den Admin-Knoten, Zahlen für Agent-Knoten
Das folgende Topologie-Diagramm zeigt, dass der Admin-Knoten mit Knoten 1 verbunden ist, Knoten 1 mit den Knoten 2 und 4, und Knoten 2 mit Knoten 3.
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
Hinweis: Um einen neu hinzugefügten Knoten zu verwalten, muss zuerst der Befehl show auf dem Admin-Knoten ausgeführt werden, um die Netzwerktopologie und die Knotennummern zu synchronisieren.
goto Einen Knoten ansteuern
(admin node) >>> goto 1
(node 1) >>>
Nachdem Sie zu einem Knoten gewechselt sind, können Sie die folgenden Befehle verwenden.
getdes/setdes Beschreibung eines Knotens abrufen/festlegen