
Absichtlich verwundbare Client-Server-Anwendung zum Erlernen von Penetrationstests von Nicht-HTTP-Thick-Clients. Enthält Herausforderungen für SQL Injection, RCE, XML-Angriffe, Buffer Over-read und Zugriffskontroll-Schwachstellen.
Die verwundbare Client-Server-Anwendung (VuCSA) wurde entwickelt, um zu lernen/zu präsentieren, wie Penetrationstests von Nicht-HTTP-Client-Server-Anwendungen durchgeführt werden. Sie ist in Java (mit JavaFX-GUI) geschrieben.
Derzeit enthält die verwundbare Anwendung die folgenden Herausforderungen:
Wenn du wissen möchtest, wie diese Herausforderungen gelöst werden, schau dir die PETEP-Website an, die beschreibt, wie das Open-Source-Tool PETEP genutzt wird, um sie auszunutzen.
Tipp 1: Bevor du mit dem Hacken beginnst, vergiss nicht, die untenstehende Datenstruktur der Nachrichten zu überprüfen. Wenn du den Netzwerkverkehr modifizierst, musst du wahrscheinlich die Struktur berücksichtigen, insbesondere die Payload-Längenbytes.
Tipp 2: Die meisten Herausforderungen können durch Modifikation des Netzwerkverkehrs ausgenutzt werden. Daher wird empfohlen, einen TCP-Proxy oder Prozess-Hooks für die Tests zu verwenden.
Tipp 3: Einige Herausforderungen haben Eingabevalidierungen und Einschränkungen, was bei Thick Clients üblich ist, aber das bedeutet nicht, dass der Server die gleiche Validierung verwendet.
Bei dieser Herausforderung ist es dein Ziel, den Netzwerkverkehr zwischen Client und Server so zu manipulieren, dass ein Pufferüberlesen auftritt.
Die Befehlsausführung-Herausforderung stellt eine sehr einfache Schwachstelle zur Befehlsausführung dar. Das Ziel ist es, einen bösartigen Befehl auf dem Server auszuführen.
Die SQL-Injection-Herausforderung enthält eine Sucheingabe, die anfällig für SQL-Injection ist, aber wie du schnell merken wirst, erlaubt die Eingabe nicht die Eingabe der benötigten Zeichen.
Die Enumeration-Herausforderung basiert auf einem simulierten Anmeldeformular, das nicht vor Enumeration geschützt ist. Wirst du in der Lage sein, alle 5 Benutzer zu finden und ihre Passwörter zu erraten?
Bei dieser Herausforderung findest du mehrere XML-Schwachstellen:
Die Herausforderung zur horizontalen Zugriffskontrolle stellt einen Dokumentenleser dar, der es dem Benutzer ermöglicht, eigene Dokumente zu sehen und deren Inhalt zu lesen. Das Ziel ist es, 5 Dokumente anderer Benutzer zu finden.
Die Herausforderung zur vertikalen Zugriffskontrolle basiert auf einem simulierten Benutzerpanel, das grundlegende Benutzerinformationen anzeigt. Das Ziel ist es, eine versteckte Admin-Funktionalität zu finden und zu prüfen, ob es möglich ist, diese als Gastbenutzer zu verwenden.
Die RCE-Deserialisierung-Schwachstelle verwendet Java-Deserialisierung/Serialisierung zur Übertragung von Daten über das Netzwerk. Die Anwendung enthält zwei Pfade, die du nutzen kannst, um eine Remote-Code-Ausführung durch die verwundbare Java-Deserialisierung zu erreichen.
Du kannst beide Pfade finden, indem du die JAR-Datei des Servers untersuchst oder in den Quellcode schaust.
Das Ziel ist es, Exploits für beide Pfade zu erstellen und einen bösartigen Befehl auf dem Server auszuführen.
Tipp: Du kannst das Server-JAR als Bibliothek verwenden, um die Exploit-Erstellung zu erleichtern.
Du benötigst Java 11 oder eine neuere Version, um VuCSA auszuführen.
Hinweis: Für Mac mit ARM64-Architektur (M1, M2-Chips) verwende die spezielle Build für Java 17.
Um den verwundbaren Server und Client auszuführen, kannst du eine der Releases auf GitHub verwenden
oder gradle assemble ausführen, das Distributionspakete (sowohl für Windows als auch Unix) erstellt.
Diese Pakete enthalten sh/bat-Skripte, die den Server und Client mit der JVM ausführen:
# Linux / Mac
chmod +x client.sh server.sh
./client.sh
./server.sh
# Windows
client.bat
server.bat
Hinweis: Diese Ausführungsskripte enthalten nützliche Variablen, einschließlich des Pfads zur Java-Ausführungsdatei. Möglicherweise musst du ihn ändern, wenn er nicht im PATH ist oder du mehrere Java-Versionen verwendest.
Die Serverkonfiguration wird automatisch erstellt, falls sie nicht existiert,
und danach aus server.json im selben Verzeichnis geladen, in dem der Server läuft:
{
"network": {
"serverHost": "0.0.0.0",
"serverPort": 8765
}
}
Die Clientkonfiguration kann in der laufenden Anwendung angegeben werden.
Das Projekt ist in drei Module unterteilt:
Nachrichten, die zwischen Server und Client übertragen werden, haben das folgende einfache Format:
[type][target][length][payload]
32b 32b 32b ???
Diese vier Teile haben die folgende Bedeutung:
Um benutzerdefinierte Nutzlasten zu senden, musst du möglicherweise die Nutzlastlänge aktualisieren. Andernfalls funktioniert es nicht richtig. Im Tutorial wird ein automatisches Skript entwickelt, um die Nutzlastlängenbytes automatisch zu korrigieren.
Die verwundbare Client-Server-Anwendung (VuCSA) enthält mehrere Schwachstellen, die auf verschiedene Weise ausgenutzt werden können. Der offizielle Leitfaden zur Ausnutzung dieser Schwachstellen verwendet den Open-Source-Penetration-Testing-Proxy (siehe PETEP-Methodik).
In der PETEP-Methodik wird der gesamte Prozess der Ausnutzung der Herausforderungen erläutert, einschließlich nützlicher Payloads.