Einleitung
In der Sicherheit von Webanwendungen ist die Entdeckung versteckter oder undokumentierter GET-Parameter entscheidend für die Identifizierung potenzieller Schwachstellen. Diese Parameter können manchmal zu Informationslecks, SQL-Injection oder anderen Sicherheitslücken führen, wenn sie von der Anwendung nicht ordnungsgemäß behandelt werden. Gobuster, ein beliebtes Tool zum Brute-Forcing von Verzeichnissen und Dateien, bietet auch einen "fuzz"-Modus, der zur Entdeckung von GET-Parametern genutzt werden kann.
Dieses Lab führt Sie durch den Prozess der Verwendung des Gobuster-Fuzz-Modus zur Identifizierung von GET-Parametern. Sie lernen, wie Sie eine URL mit dem Schlüsselwort FUZZ erstellen, eine Wortliste mit gängigen Parameternamen verwenden, den Scan ausführen und die Ergebnisse analysieren, um interessante Parameter zu finden. Am Ende dieses Labs werden Sie ein praktisches Verständnis dafür haben, wie Sie GET-Parameter-Fuzzing mit Gobuster durchführen können, eine wertvolle Fähigkeit für jeden Cybersicherheits-Enthusiasten oder Profi.
Identifizieren eines zu testenden URL-Endpunkts
In diesem Schritt identifizieren Sie einen Ziel-URL-Endpunkt, den Sie auf versteckte GET-Parameter testen möchten. Für dieses Lab verwenden wir einen einfachen Webserver, der eine anfällige Anwendung simuliert. Wir starten einen Python HTTP-Server, um eine einfache HTML-Datei bereitzustellen.
Navigieren Sie zuerst zu Ihrem Projektverzeichnis:
cd ~/project
Erstellen Sie als Nächstes eine einfache HTML-Datei namens index.html, die wir als unser Ziel verwenden werden. Diese Datei simuliert eine Webseite, die möglicherweise GET-Parameter akzeptiert.
nano index.html
Fügen Sie den folgenden Inhalt zu index.html hinzu:
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Welcome to the Test Page!</h1>
<p>This page is for testing GET parameters.</p>
</body>
</html>
Speichern Sie die Datei, indem Sie Strg+X, dann Y und Enter drücken.
Starten Sie nun einen einfachen Python HTTP-Server, um diese Datei bereitzustellen. Dieser Server läuft auf Port 8000.
python3 -m http.server 8000 &
Das & am Ende führt den Server im Hintergrund aus, sodass Sie das Terminal weiter verwenden können. Sie sollten eine Ausgabe ähnlich dieser sehen:
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Der Ziel-URL-Endpunkt für unser Fuzzing ist http://127.0.0.1:8000/index.html.
Erstellen einer URL mit einem FUZZ-Schlüsselwort als Parameternamen
In diesem Schritt lernen Sie, wie Sie die URL erstellen, die Gobuster zum Fuzzing verwendet. Der Fuzz-Modus von Gobuster erfordert ein FUZZ-Schlüsselwort in der URL, um anzuzeigen, wo die Einträge aus der Wortliste eingefügt werden sollen. Beim Fuzzing von GET-Parametern ersetzt das FUZZ-Schlüsselwort den Parameternamen.
Das Grundformat für eine GET-Anfrage mit einem Parameter lautet http://example.com/path?parameter=value. Um den Parameternamen zu fuzzern, ersetzen wir parameter durch FUZZ. Der Wert kann beliebig sein, da wir nur daran interessiert sind, den Parameternamen selbst zu entdecken. Eine gängige Praxis ist die Verwendung eines einfachen Wertes wie 1 oder test.
Für unser Lab ist die Ziel-URL http://127.0.0.1:8000/index.html. Um GET-Parameternamen zu fuzzern, wird die URL wie folgt konstruiert:
http://127.0.0.1:8000/index.html?FUZZ=test
Hierbei gilt:
http://127.0.0.1:8000/index.htmlist unsere Basis-URL.?kennzeichnet den Beginn der Query-String.FUZZist der Platzhalter, an dem Gobuster Wörter aus unserer Wortliste einfügt.=testist ein statischer Wert für den Parameter. Der spezifische Wert spielt für die Entdeckung des Parameternamens keine Rolle, ist aber für ein gültiges Parameterformat erforderlich.
In diesem Schritt müssen Sie keinen Befehl ausführen, aber das Verständnis dieser URL-Konstruktion ist für die nächsten Schritte entscheidend.
Verwenden einer Wortliste mit gängigen Parameternamen
In diesem Schritt bereiten Sie eine Wortliste mit gängigen GET-Parameternamen vor. Gobuster wird diese Wortliste durchlaufen und das FUZZ-Schlüsselwort in der URL durch jedes Wort aus der Liste ersetzen.
Obwohl Gobuster oft mit Standard-Wortlisten geliefert wird, ist es eine gute Praxis zu wissen, wie man eigene erstellt oder angibt. Für dieses Lab erstellen wir eine kleine benutzerdefinierte Wortliste mit einigen gängigen Parameternamen.
Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden:
cd ~/project
Erstellen Sie nun eine neue Datei namens params.txt, die als unsere Wortliste dient:
nano params.txt
Fügen Sie die folgenden gängigen Parameternamen zu params.txt hinzu, jeweils in einer neuen Zeile:
id
name
user
page
search
query
file
data
token
Speichern Sie die Datei, indem Sie Strg+X, dann Y und Enter drücken.
Diese Datei params.txt wird von Gobuster im nächsten Schritt zum Fuzzing der GET-Parameter verwendet.
Ausführen des gobuster fuzz Scans
In diesem Schritt führen Sie den Gobuster Fuzz-Scan mit der erstellten URL und der Wortliste aus.
Der Befehl für den Fuzz-Modus von Gobuster lautet gobuster fuzz. Wir müssen die URL mit dem FUZZ-Schlüsselwort mit dem Flag -u und die Wortliste mit dem Flag -w angeben.
Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:
gobuster fuzz -u http://127.0.0.1:8000/index.html?FUZZ=test -w ~/project/params.txt
Lassen Sie uns den Befehl aufschlüsseln:
gobuster fuzz: Ruft Gobuster im Fuzzing-Modus auf.-u http://127.0.0.1:8000/index.html?FUZZ=test: Gibt die Ziel-URL mit demFUZZ-Platzhalter an.-w ~/project/params.txt: Gibt den Pfad zu unserer Wortliste mit Parameternamen an.
Gobuster sendet nun Anfragen an den Webserver und ersetzt FUZZ durch jedes Wort aus params.txt. Da unser index.html diese Parameter nicht tatsächlich verarbeitet, wird Gobuster wahrscheinlich für alle Anfragen denselben Statuscode und dieselbe Inhaltslänge melden. In einem realen Szenario würde eine Änderung des Statuscodes oder der Inhaltslänge jedoch darauf hinweisen, dass ein Parameter erkannt werden könnte.
Die Ausgabe zeigt jeden Versuch und den entsprechenden Statuscode sowie die Inhaltslänge. Sie wird in etwa so aussehen:
===============================================================
Gobuster vX.X.X
===============================================================
[+] Url: http://127.0.0.1:8000/index.html?FUZZ=test
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/params.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
200 (290) - http://127.0.0.1:8000/index.html?id=test
200 (290) - http://127.0.0.1:8000/index.html?name=test
200 (290) - http://127.0.0.1:8000/index.html?user=test
200 (290) - http://127.0.0.1:8000/index.html?page=test
200 (290) - http://127.0.0.1:8000/index.html?search=test
200 (290) - http://127.0.0.1:8000/index.html?query=test
200 (290) - http://127.0.0.1:8000/index.html?file=test
200 (290) - http://127.0.0.1:8000/index.html?data=test
200 (290) - http://127.0.0.1:8000/index.html?token=test
===============================================================
Analyse der Ergebnisse auf Änderungen der Antwortlänge oder des Status
In diesem Schritt lernen Sie, wie Sie die Ausgabe des Gobuster Fuzz-Scans interpretieren. Der Schlüssel zur Identifizierung potenziell gültiger oder interessanter GET-Parameter liegt in der Beobachtung von Änderungen in der HTTP-Antwort.
Wenn Gobuster ausgeführt wird, zeigt es den HTTP-Statuscode und die Inhaltslänge (in Bytes) für jede von ihm gesendete Anfrage an.
Beispielsweise zeigte die Ausgabe des vorherigen Schritts:
200 (290) - http://127.0.0.1:8000/index.html?id=test
200 (290) - http://127.0.0.1:8000/index.html?name=test
...
Hier ist 200 der HTTP-Statuscode (OK) und 290 ist die Inhaltslänge der Antwort.
Worauf Sie achten sollten:
- Unterschiedliche Statuscodes: Wenn eine Anfrage mit einem bestimmten Parameternamen einen anderen HTTP-Statuscode zurückgibt (z. B.
200für gültig,404für nicht gefunden,500für Serverfehler,302für Weiterleitung), kann dies darauf hindeuten, dass die Anwendung diesen Parameter verarbeitet oder darauf reagiert hat. Beispielsweise könnte ein200 OKfür einen Parameter, der normalerweise404 Not Foundzurückgibt, bedeutsam sein. - Unterschiedliche Inhaltslängen: Selbst wenn der Statuscode
200 OKbleibt, kann eine Änderung der Inhaltslänge ein starker Indikator sein. Dies bedeutet oft, dass sich der Antwortkörper der Anwendung geändert hat, möglicherweise durch Einbeziehung spezifischer Daten im Zusammenhang mit dem Parameter, einer Fehlermeldung oder einem anderen Seitenlayout. - Fehlermeldungen: Manchmal kann ein Parameter eine Fehlermeldung auslösen (z. B. SQL-Fehler, Anwendungsfehler), die sich im Antwortkörper widerspiegelt und zu einer anderen Inhaltslänge oder sogar einem Statuscode
500führt. Dies ist ein starkes Zeichen für eine potenzielle Schwachstelle.
In unserem aktuellen Lab-Setup, da index.html eine statische Datei ist und der Python-Server keine GET-Parameter verarbeitet, werden Sie feststellen, dass alle Anfragen einen Statuscode 200 und dieselbe Inhaltslänge (290 Bytes) zurückgeben. Dies ist das erwartete Verhalten für unseren einfachen Testfall.
In einem realen Szenario, wenn Sie eine Live-Webanwendung fuzzing würden und einen Eintrag wie diesen sehen:
200 (512) - http://example.com/search?query=test
während andere Parameter 200 (290) zurückgeben, wäre der Parameter query aufgrund der unterschiedlichen Inhaltslänge weiter zu untersuchen.
Dieser Schritt schließt das Lab ab. Sie haben erfolgreich gelernt, wie Sie Gobuster zum Fuzzing von GET-Parametern verwenden und wie Sie die Ergebnisse analysieren.
Um den Python HTTP-Server zu stoppen, können Sie seine Prozess-ID (PID) ermitteln und ihn beenden. Listen Sie zuerst laufende Python-Prozesse auf:
ps aux | grep "python3 -m http.server 8000"
Sie sehen eine Ausgabe ähnlich dieser:
labex 1234 0.0 0.0 12345 6789 ? S HH:MM 0:00 python3 -m http.server 8000
Notieren Sie sich die PID (z. B. 1234 in diesem Beispiel) und beenden Sie dann den Prozess:
kill 1234
Ersetzen Sie 1234 durch die tatsächliche PID, die Sie gefunden haben.
Zusammenfassung
In diesem Lab haben Sie erfolgreich gelernt, wie Sie GET-Parameter-Fuzzing mit Gobuster durchführen. Sie haben mit der Einrichtung eines lokalen Webservers und der Erstellung einer Ziel-HTML-Datei begonnen. Anschließend haben Sie eine URL mit dem Schlüsselwort FUZZ konstruiert, eine benutzerdefinierte Wortliste mit gängigen Parameternamen vorbereitet und den Gobuster Fuzz-Scan ausgeführt. Schließlich haben Sie gelernt, wie Sie die Scan-Ergebnisse analysieren, wobei Sie sich auf Änderungen der HTTP-Statuscodes und Inhaltslängen konzentriert haben, die wichtige Indikatoren für erkannte Parameter sind.
Diese Technik ist ein grundlegender Bestandteil der Webanwendungs-Aufklärung und kann helfen, verborgene Funktionalitäten oder potenzielle Schwachstellen aufzudecken. Durch die Beherrschung dieser Fähigkeit sind Sie besser gerüstet, um Angriffsflächen von Webanwendungen zu identifizieren und zu untersuchen.



