Einleitung
Bei Penetrationstests und der Analyse von Webanwendungen werden häufig Tools wie Burp Suite Intruder verwendet, um eine große Anzahl von Anfragen an ein Ziel zu senden. Eine Schlüsselfunktion in diesem Prozess ist "Grep - Match", mit dem Sie Antworten, die bestimmte Schlüsselwörter enthalten (z. B. "Welcome", "Login successful", "admin_access_granted"), automatisch kennzeichnen können. Dies hilft Ihnen, schnell Tausende von Antworten zu durchsuchen, um interessante zu finden.
In diesem Lab lernen Sie, wie Sie diese leistungsstarke "Grep - Match"-Funktionalität mit Standard-Linux-Befehlszeilentools nachbilden können. Sie verwenden curl, um HTTP-Anfragen zu stellen, eine Shell-Schleife, um den Prozess für eine Liste von Payloads zu automatisieren, und grep, um in den Antworten nach einem Erfolgsschlüsselwort zu suchen. Dies ist eine grundlegende Fähigkeit für alle, die sich für Sicherheitsautomatisierung und Skripterstellung interessieren.
In Intruder > Optionen, zum Abschnitt 'Grep - Match' scrollen
In einem GUI-Tool wie Burp Suite ist dies der Schritt, bei dem Sie zum Optionsfenster navigieren, um Ihre Abgleichregeln zu konfigurieren. In unserer Befehlszeilenumgebung besteht die entsprechende Aktion darin, unsere notwendigen Komponenten vorzubereiten: die Liste der Payloads und die Ziel-URL.
Der Einrichtungsprozess hat bereits eine Datei namens payloads.txt in Ihrem Verzeichnis ~/project erstellt. Diese Datei enthält eine Liste potenzieller Werte, die wir gegen die Webanwendung testen möchten und dient demselben Zweck wie eine Intruder-Payload-Liste.
Lassen Sie uns den Inhalt dieser Datei anzeigen.
cat ~/project/payloads.txt
Sie sollten die folgende Ausgabe sehen:
orange
banana
apple
grape
mango
Unsere Zielanwendung ist ein einfacher Webserver, der unter http://localhost:8000 läuft. Wir werden jeden Payload gegen dieses Ziel testen.
Standardregeln löschen
In Burp Suite würden Sie normalerweise alle vorhandenen oder Standardregeln löschen, um sicherzustellen, dass Sie nur das abgleichen, was Sie explizit definieren. Für unsere Simulation bedeutet dies, eine Basislinie zu erstellen, indem wir eine einzelne Anfrage mit einem bekannten "fehlgeschlagenen" Payload durchführen. Dies hilft uns zu verstehen, wie eine normale, erfolglose Antwort aussieht.
Lassen Sie uns curl verwenden, um eine Anfrage an den Server mit dem Payload orange zu stellen, von dem wir wissen, dass er nicht der richtige ist.
curl "http://localhost:8000/?item=orange"
Der Befehl ruft die Webseite ab und gibt ihren HTML-Quellcode im Terminal aus. Die Ausgabe sollte wie folgt aussehen:
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<script>
const params = new URLSearchParams(window.location.search);
if (params.get("item") === "apple") {
document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
} else {
document.body.innerHTML = "<h1>Item not found.</h1>";
}
</script>
</body>
</html>
Beachten Sie die JavaScript-Logik und den resultierenden Text "Item not found". Dies ist unsere Basis-"Fehler"-Antwort.
Eine neue Regel hinzufügen, um ein Erfolgsschlüsselwort abzugleichen (z. B. 'Welcome', 'Logged in')
Dies ist der Kern der "Grep - Match"-Technik. Wir müssen eine eindeutige Zeichenkette oder ein Muster definieren, das nur in einer "erfolgreichen" Antwort erscheint. Wenn wir uns den HTML-Code aus dem vorherigen Schritt ansehen, können wir erkennen, dass eine erfolgreiche Anfrage (bei der item=apple) den Text "Welcome to the secret page!" ergibt. Das Schlüsselwort "Welcome" ist ein perfekter Kandidat für unsere Regel.
Wir können den Befehl grep verwenden, um die Ausgabe von curl zu filtern und das Vorhandensein unseres Schlüsselworts zu überprüfen. Das Flag -s für curl wird verwendet, um es im stillen Modus auszuführen, wodurch die Fortschrittsanzeige ausgeblendet wird.
Zuerst testen wir diese Regel gegen einen fehlgeschlagenen Payload. Dieser Befehl sollte keine Ausgabe erzeugen, da das Wort "Welcome" nicht in der Antwort enthalten ist.
curl -s "http://localhost:8000/?item=orange" | grep "Welcome"
Nun testen wir ihn gegen den bekannten erfolgreichen Payload, apple.
curl -s "http://localhost:8000/?item=apple" | grep "Welcome"
Dieses Mal findet grep eine Übereinstimmung und gibt die Zeile aus, die das Schlüsselwort enthält:
document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';
Die Pipe (|) und der Befehl grep "Welcome" bilden zusammen unsere "Grep - Match"-Regel. Wir haben erfolgreich eine Möglichkeit geschaffen, eine erfolgreiche Antwort von einer fehlgeschlagenen zu unterscheiden.
Einen Intruder-Angriff ausführen
Ein "Intruder-Angriff" ist einfach der Prozess der Automatisierung unserer Anfrage für jeden Payload in unserer Liste. Dies können wir mit einer einfachen Shell-Schleife erreichen. Die Schleife liest jede Zeile aus payloads.txt, führt unseren curl | grep-Befehl dafür aus und zeigt uns die Ergebnisse an.
Um die Ausgabe sauberer und mehr wie eine Ergebnistabelle zu gestalten, erstellen wir ein kleines Shell-Skript. Verwenden Sie den nano-Editor, um eine neue Datei namens attack.sh zu erstellen.
nano attack.sh
Kopieren Sie nun das folgende Skript und fügen Sie es in den nano-Editor ein:
#!/bin/bash
echo "Payload,Found"
for payload in $(cat ~/project/payloads.txt); do
response=$(curl -s "http://localhost:8000/?item=$payload")
if echo "$response" | grep -q "Welcome"; then
echo "$payload,True"
else
echo "$payload,False"
fi
done
Dieses Skript gibt zuerst eine Kopfzeile (Payload,Found) aus. Dann durchläuft es jeden Payload. Innerhalb der Schleife verwendet es grep -q (quiet mode), um nach dem Schlüsselwort "Welcome" zu suchen. Wenn es gefunden wird, gibt es den Payload gefolgt von True aus; andernfalls gibt es False aus.
Drücken Sie Ctrl+X, dann Y und Enter, um die Datei zu speichern und nano zu beenden.
Machen Sie das Skript anschließend ausführbar:
chmod +x attack.sh
Führen Sie schließlich den Angriff aus:
./attack.sh
Beobachten Sie die neue Spalte in der Ergebnistabelle für Ihren Treffer
Nachdem Sie das Skript im vorherigen Schritt ausgeführt haben, sehen Sie eine saubere, tabellenähnliche Ausgabe in Ihrem Terminal.
Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False
Diese Ausgabe ist das Kommandozeilen-Äquivalent der Ergebnistabelle in Burp Suite Intruder. Die erste Spalte listet den getesteten Payload auf, und die zweite Spalte, die wir "Found" genannt haben, fungiert als unser "Grep - Match"-Indikator.
Indem Sie einfach diese zweite Spalte nach dem Wert True durchsuchen, können Sie den erfolgreichen Payload sofort identifizieren. Wie Sie sehen können, sticht die Zeile apple,True deutlich hervor und teilt uns mit, dass der Payload apple zu einer Antwort geführt hat, die unser Zielschlüsselwort enthielt. Dies zeigt, wie effektiv die Technik ist, um Nadeln im Heuhaufen von HTTP-Antworten zu finden.
Zusammenfassung
In diesem Labor haben Sie erfolgreich die "Grep - Match"-Funktion simuliert, einen Eckpfeiler vieler automatisierter Web-Sicherheitswerkzeuge. Sie haben gelernt, wie Sie mehrere grundlegende Linux-Kommandozeilenwerkzeuge kombinieren, um ein leistungsstarkes Ergebnis zu erzielen.
Sie haben geübt:
- Die Verwendung von
curl, um Webanfragen vom Terminal aus zu stellen. - Die Verwendung von
grep, um nach spezifischen Schlüsselwörtern in den Antwortdaten zu suchen. - Das Schreiben einer Shell-
for-Schleife, um eine Aufgabe für eine Liste von Eingaben zu automatisieren. - Die Kombination dieser Werkzeuge zu einem einzigen Skript, um Payloads systematisch zu testen und erfolgreiche Versuche zu identifizieren.
Dieser Kommandozeilenansatz ist nicht nur eine großartige Möglichkeit, zu verstehen, wie hochentwickelte Werkzeuge im Hintergrund funktionieren, sondern auch eine äußerst flexible und leistungsstarke Fähigkeit für Ihre eigenen benutzerdefinierten Automatisierungs- und Sicherheitsskripting-Aufgaben.
