
Webanwendung mit Schwachstellen, die in realen Fällen gefunden wurden, sowohl bei Pentests als auch bei Bug-Bounty-Programmen.
Web Hacking Playground ist eine kontrollierte Web-Hacking-Umgebung. Sie besteht aus Schwachstellen, die in realen Fällen gefunden wurden, sowohl bei Pentests als auch bei Bug-Bounty-Programmen. Ziel ist es, dass Benutzer damit üben und lernen, sie zu erkennen und auszunutzen.
Es werden auch andere interessante Themen behandelt, wie: Umgehung von Filtern durch Erstellung eigener Payloads, Durchführung von verketteten Angriffen unter Ausnutzung verschiedener Schwachstellen, Entwicklung von Proof-of-Concept-Skripten und mehr.
Der Quellcode der Anwendung ist sichtbar. Der Ansatz des Labs ist jedoch ein Black-Box-Ansatz. Daher sollte der Code nicht eingesehen werden, um die Herausforderungen zu lösen.
Zusätzlich ist zu beachten, dass Fuzzing (sowohl von Parametern als auch von Verzeichnissen) und Brute-Force-Angriffe in diesem Labor keinen Vorteil bringen.
Es wird empfohlen, Kali Linux für dieses Labor zu verwenden. Falls eine virtuelle Maschine verwendet wird, ist der Hypervisor VMware Workstation Player empfehlenswert.
Die Umgebung basiert auf Docker und Docker Compose, daher müssen beide installiert sein.
Um Docker auf Kali Linux zu installieren, führen Sie die folgenden Befehle aus:
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker --now
Um Docker auf anderen Debian-basierten Distributionen zu installieren, führen Sie die folgenden Befehle aus:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable docker --now
Um Docker Compose zu installieren, führen Sie den folgenden Befehl aus:
sudo apt install -y docker-compose
Hinweis: Falls Sie ein M1-System verwenden, wird empfohlen, vor dem Erstellen der Images den folgenden Befehl auszuführen:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Der nächste Schritt ist das Klonen des Repositorys und das Erstellen der Docker-Images:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose build
Außerdem wird empfohlen, die Browser-Erweiterung Foxy Proxy zu installieren, mit der Sie die Proxy-Einstellungen einfach ändern können, sowie Burp Suite, die wir zum Abfangen von HTTP-Anfragen verwenden.
Wir erstellen ein neues Profil in Foxy Proxy, um Burp Suite als Proxy zu verwenden. Dazu gehen wir zu den Foxy-Proxy-Optionen und fügen einen Proxy mit der folgenden Konfiguration hinzu:
Sobald alles Notwendige installiert ist, können Sie die Umgebung mit dem folgenden Befehl bereitstellen:
git clone https://github.com/takito1812/web-hacking-playground.git
cd web-hacking-playground
sudo docker-compose up -d
Dadurch werden zwei Container von Flask-Anwendungen auf Port 80 erstellt:
Es ist notwendig, die IP der Container zur Datei /etc/hosts hinzuzufügen, damit sie über Namen erreichbar sind und der Exploit-Server mit der verwundbaren Webanwendung kommunizieren kann. Führen Sie dazu die folgenden Befehle aus:
sudo sed -i '/whp-/d' /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-socially) whp-socially" | sudo tee -a /etc/hosts
echo "$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' whp-exploitserver) whp-exploitserver" | sudo tee -a /etc/hosts
Sobald dies erledigt ist, kann die verwundbare Anwendung unter http://whp-socially und der Exploit-Server unter http://whp-exploitserver erreicht werden.
Bei der Verwendung des Exploit-Servers müssen die oben genannten URLs verwendet werden, also der Domain-Name und nicht die IPs. Dadurch wird eine korrekte Kommunikation zwischen den Containern sichergestellt.
Beim Hacken muss zur Darstellung des Angreifer-Servers die lokale Docker-IP verwendet werden, da das Labor nicht dafür ausgelegt ist, Anfragen an externe Server wie Burp Collaborator, Interactsh usw. zu stellen. Ein Python http.server kann verwendet werden, um einen Webserver zu simulieren und HTTP-Interaktionen zu empfangen. Führen Sie dazu den folgenden Befehl aus:
sudo python3 -m http.server 80
Die Umgebung ist in drei Stufen unterteilt, jede mit unterschiedlichen Schwachstellen. Es ist wichtig, sie der Reihe nach zu bearbeiten, da die Schwachstellen der folgenden Stufen auf denen der vorherigen aufbauen. Die Stufen sind:
Im Folgenden finden Sie Spoiler zu den Schwachstellen jeder Stufe. Wenn Sie keine Hilfe benötigen, können Sie diesen Abschnitt überspringen. Wenn Sie hingegen nicht wissen, wo Sie anfangen sollen, oder überprüfen möchten, ob Sie auf dem richtigen Weg sind, können Sie den für Sie interessanten Abschnitt aufklappen.
In dieser Stufe kann die Sitzung eines bestimmten Benutzers durch Cross-Site-Scripting (XSS) gestohlen werden, was die Ausführung von JavaScript-Code ermöglicht. Dazu muss das Opfer in der Lage sein, eine URL im Kontext des Benutzers aufzurufen. Dieses Verhalten kann mit dem Exploit-Server simuliert werden.
Die Hinweise zur Lösung dieser Stufe sind:
In dieser Stufe kann ein Token generiert werden, das den Zugriff als Admin ermöglicht. Es handelt sich um einen typischen JSON-Web-Token (JWT)-Angriff, bei dem die Token-Payload geändert werden kann, um Berechtigungen zu eskalieren.
Der Hinweis zur Lösung dieser Stufe ist, dass es einen Endpunkt gibt, der bei einem JWT ein gültiges Sitzungs-Cookie zurückgibt.
In dieser Stufe kann die Datei /flag durch eine Server-Side-Template-Injection (SSTI)-Schwachstelle gelesen werden. Dazu müssen Sie die Anwendung dazu bringen, Python-Code auf dem Server auszuführen. Es ist möglich, Systembefehle auf dem Server auszuführen.
Die Hinweise zur Lösung dieser Stufe sind:
Die verwundbare Funktionalität ist durch eine Zwei-Faktor-Authentifizierung geschützt. Daher muss vor der Ausnutzung der SSTI ein Weg gefunden werden, die OTP-Code-Anfrage zu umgehen. Es gibt Fälle, in denen die Anwendung Anfragen vertraut, die vom selben Server kommen, und HTTP-Header spielen in dieser Situation eine wichtige Rolle.
Die SSTI ist blind, das bedeutet, dass die Ausgabe des auf dem Server ausgeführten Codes nicht direkt erhalten wird. Das Python-Modul smtpd ermöglicht es, einen SMTP-Server zu erstellen, der empfangene Nachrichten auf der Standardausgabe ausgibt:
sudo python3 -m smtpd -n -c DebuggingServer 0.0.0.0:25
Die Anwendung verwendet Flask, daher kann abgeleitet werden, dass die Template-Engine Jinja2 ist, da sie von der offiziellen Flask-Dokumentation empfohlen wird und weit verbreitet ist. Sie müssen eine Jinja2-kompatible Payload erhalten, um die endgültige Flagge zu bekommen.
Die E-Mail-Nachricht hat eine Zeichenbeschränkung. Informationen zur Umgehung dieser Beschränkung finden Sie im Internet.
Detaillierte Lösungen für jede Stufe finden Sie im Ordner Solutions.
Die folgenden Ressourcen können bei der Lösung der Stufen hilfreich sein:
Pull-Requests sind willkommen. Wenn Sie Fehler finden, eröffnen Sie bitte ein Issue.