Einleitung
In diesem Lab werden Sie erkunden, wie Sie die leistungsstarken Tamper-Skripte von sqlmap verwenden, um gängige Webanwendungsfilter zu umgehen. Viele Webanwendungen implementieren grundlegende Eingabevalidierungen und Filter, um SQL-Injection-Angriffe zu verhindern. Diese Filter können gängige SQL-Schlüsselwörter, Leerzeichen oder andere Zeichen blockieren. Die Tamper-Skripte von sqlmap können die SQL-Injection-Payloads automatisch modifizieren, um diese Filter zu umgehen und Ihre Angriffe effektiver zu gestalten. Sie lernen, Szenarien zu identifizieren, in denen eine Umgehung erforderlich ist, verfügbare Tamper-Skripte aufzulisten, ein bestimmtes Skript anzuwenden und dessen Auswirkungen auf die generierten Payloads zu beobachten.
Szenario für die Notwendigkeit der Umgehung identifizieren
In diesem Schritt werden Sie verstehen, warum Tamper-Skripte notwendig sind. Webanwendungen verwenden oft grundlegende Filter, um gängige SQL-Injection-Muster zu verhindern. Beispielsweise kann ein Filter Leerzeichen blockieren oder sie durch andere Zeichen ersetzen, oder er kann Schlüsselwörter wie UNION oder SELECT blockieren. Wenn die Standard-Payloads von sqlmap blockiert werden, müssen Sie diese modifizieren, um diese Filter zu umgehen.
Betrachten Sie ein hypothetisches Szenario, in dem eine Webanwendung Leerzeichen in Benutzereingaben filtert. Wenn sqlmap versucht, eine Payload wie ' OR 1=1-- zu injizieren, könnte der Filter sie in 'OR1=1-- umwandeln, wodurch die Payload unwirksam wird. Tamper-Skripte helfen sqlmap, alternative Payloads zu generieren, die solche Einschränkungen umgehen können.
Um einen grundlegenden sqlmap-Scan ohne Umgehungstechniken zu simulieren, verwenden wir eine Dummy-URL. Dies wird uns später helfen, die generierten Payloads mit und ohne Tamper-Skripte zu vergleichen.
Führen Sie den folgenden sqlmap-Befehl aus, um einen grundlegenden Scan gegen ein Dummy-Ziel zu starten. Beachten Sie, dass dieses Ziel nicht tatsächlich anfällig ist, aber es ermöglicht uns, das Verhalten und die generierten Payloads von sqlmap zu beobachten.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --output-dir=/tmp/sqlmap_output_no_tamper
Dieser Befehl versucht, einen grundlegenden SQL-Injection-Scan durchzuführen. Die Option --dump wird zum Auslesen von Daten verwendet, --batch läuft im nicht-interaktiven Modus, --forms prüft Formulare, --level 1 --risk 1 legen das Erkennungslevel und das Risiko fest, --parse-errors analysiert Fehlermeldungen, --technique=U gibt UNION-Query-SQL-Injection an, --eta zeigt die geschätzte Ankunftszeit an und --output-dir gibt das Ausgabeverzeichnis an.
Beobachten Sie die Ausgabe. Obwohl dieser spezifische Befehl möglicherweise keine Schwachstellen auf der angegebenen URL findet (da es sich um eine allgemeine Testseite handelt und nicht speziell für den Zweck dieses Labs konfiguriert ist), besteht das Ziel darin, den anfänglichen Versuch von sqlmap zu sehen und zu verstehen, dass diese Versuche manchmal durch Filter blockiert werden könnten.
Verfügbare Tamper-Skripte mit --list-tampers auflisten
In diesem Schritt lernen Sie, wie Sie alle verfügbaren Tamper-Skripte in sqlmap auflisten. sqlmap wird mit einer Vielzahl von Tamper-Skripten geliefert, die jeweils darauf ausgelegt sind, spezifische Filtertypen oder WAFs (Web Application Firewalls) zu umgehen. Die Kenntnis der verfügbaren Skripte ist entscheidend für die Auswahl des richtigen für Ihre Umgehungsanforderungen.
Um alle verfügbaren Tamper-Skripte aufzulisten, verwenden Sie die Option --list-tampers mit sqlmap.
sqlmap --list-tampers
Dieser Befehl gibt eine Liste aller .py-Dateien aus, die sich im tamper-Verzeichnis von sqlmap befinden. Jede Datei repräsentiert ein anderes Tamper-Skript. Sie sehen beispielsweise Skripte wie space2comment.py, unionalltostring.py, apostrophemask.py usw. Jedes Skript hat einen bestimmten Zweck, z. B. das Ersetzen von Leerzeichen durch Kommentare, das Konvertieren von UNION ALL in String-Verkettung oder das Maskieren von Apostrophen.
Überprüfen Sie die Liste und versuchen Sie, den Zweck einiger Skripte anhand ihrer Namen zu verstehen. space2comment.py beispielsweise ist dafür konzipiert, Leerzeichen durch SQL-Kommentare zu ersetzen, was Filter umgehen kann, die Leerzeichen blockieren.
Ein Tamper-Skript mit --tamper=space2comment auswählen und anwenden
In diesem Schritt wählen Sie ein bestimmtes Tamper-Skript aus und wenden es auf Ihren sqlmap-Scan an. Für dieses Lab verwenden wir das space2comment-Tamper-Skript. Dieses Skript ersetzt Leerzeichen in der SQL-Injection-Payload durch /**/ (Mehrzeilenkommentar)-Sequenzen. Diese Technik ist wirksam gegen Filter, die Leerzeichen blockieren oder entfernen, aber SQL-Kommentare zulassen.
Um ein Tamper-Skript anzuwenden, verwenden Sie die Option --tamper, gefolgt vom Namen des Skripts (ohne die .py-Erweiterung).
Führen Sie den folgenden sqlmap-Befehl aus, diesmal einschließlich des space2comment-Tamper-Skripts:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper
Beachten Sie die Hinzufügung von --tamper=space2comment. Dies weist sqlmap an, alle generierten Payloads vor dem Senden an das Ziel durch dieses spezifische Tamper-Skript zu verarbeiten.
Obwohl die Ausgabe dem vorherigen Schritt ähneln mag, modifiziert sqlmap intern seine Payloads. Im nächsten Schritt werden wir den Unterschied in den generierten Payloads untersuchen.
Scan mit dem ausgewählten Tamper-Skript ausführen
In diesem Schritt haben Sie im vorherigen Schritt bereits den sqlmap-Befehl mit dem space2comment-Tamper-Skript ausgeführt. Der Zweck dieses Schritts ist es, die Ausführung zu festigen und sich auf den Payload-Vergleich vorzubereiten.
Der von Ihnen ausgeführte Befehl lautete:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper
Dieser Befehl weist sqlmap an, einen Scan durchzuführen, wobei diesmal seine Payloads mithilfe des space2comment-Tamper-Skripts modifiziert werden. Beispielsweise könnte ein Payload wie UNION SELECT in UNION/**/SELECT umgewandelt werden. Diese subtile Änderung kann oft einfache Mechanismen zur Leerzeichenfilterung umgehen.
Die Option --output-dir=/tmp/sqlmap_output_with_tamper stellt sicher, dass die Ausgabe von sqlmap, einschließlich aller generierten Payloads oder Protokolle, in einem separaten Verzeichnis gespeichert wird. Dies wird im nächsten Schritt für den Vergleich der Payloads nützlich sein.
Lassen Sie den sqlmap-Scan abschließen. Selbst wenn keine Schwachstelle auf dem Dummy-Ziel gefunden wird, ist entscheidend, dass sqlmap versucht hat, manipulierte Payloads zu verwenden.
Payloads mit und ohne Tamper-Skript vergleichen
In diesem letzten Schritt vergleichen Sie die von sqlmap generierten Payloads mit und ohne das space2comment-Tamper-Skript. Dieser Vergleich wird visuell zeigen, wie Tamper-Skripte die Injection-Payloads modifizieren, um Filter zu umgehen.
sqlmap protokolliert seine Aktivitäten, einschließlich der gesendeten Payloads, im Ausgabeverzeichnis. Wir haben für die Scans in Schritt 1 und Schritt 3 unterschiedliche Ausgabeverzeichnisse angegeben.
Versuchen wir zunächst, einige Protokolldateien zu finden, die die Payloads enthalten könnten. sqlmap speichert HTTP-Anfragen typischerweise in Dateien innerhalb seines Ausgabeverzeichnisses.
Navigieren Sie zu den Ausgabeverzeichnissen und suchen Sie nach Anforderungsprotokollen. Die genauen Dateinamen können variieren, aber sie befinden sich normalerweise unter log/ oder direkt im Verzeichnis des Ziels.
Versuchen wir, eine gängige Protokolldatei zu finden, die die Anfragen enthält. sqlmap erstellt oft eine session.log-Datei oder ähnliche Dateien.
Verwenden Sie grep, um nach gängigen SQL-Schlüsselwörtern in den Protokolldateien beider Durchläufe zu suchen.
Vergleichen Sie die Payloads, indem Sie nach Unterschieden in der Handhabung von Leerzeichen suchen.
echo "--- Payloads without tamper script ---"
grep -r "UNION" /tmp/sqlmap_output_no_tamper/ | head -n 5
echo ""
echo "--- Payloads with tamper script ---"
grep -r "UNION" /tmp/sqlmap_output_with_tamper/ | head -n 5
Sie sollten feststellen, dass in der Ausgabe "Payloads with tamper script" Leerzeichen in SQL-Schlüsselwörtern (wie UNION SELECT) durch /**/-Kommentare ersetzt werden, während in der Ausgabe "Payloads without tamper script" normale Leerzeichen verwendet werden. Dies veranschaulicht deutlich die Wirkung des space2comment-Tamper-Skripts.
Dieser Vergleich unterstreicht die Wirksamkeit von Tamper-Skripten bei der Modifizierung von Payloads zur Umgehung grundlegender Filtermechanismen und macht sqlmap zu einem vielseitigeren Werkzeug für Penetrationstests.
Zusammenfassung
In diesem Lab haben Sie erfolgreich gelernt, wie Sie die Tamper-Skripte von sqlmap verwenden, um grundlegende Filter von Webanwendungen zu umgehen. Sie haben damit begonnen, die Notwendigkeit von Umgehungstechniken bei der Konfrontation mit Eingabefiltern zu verstehen. Anschließend haben Sie erkundet, wie Sie die verfügbaren Tamper-Skripte mit --list-tampers auflisten und das space2comment-Skript für eine praktische Demonstration ausgewählt. Schließlich haben Sie sqlmap mit und ohne das Tamper-Skript ausgeführt und die generierten Payloads verglichen, wobei Sie deutlich beobachtet haben, wie das space2comment-Skript Leerzeichen in /**/-Kommentare umgewandelt hat. Diese praktische Erfahrung hat Sie mit einer grundlegenden Fähigkeit ausgestattet, Ihre SQL-Injection-Testfähigkeiten zu verbessern, indem Sie gängige Filtermechanismen umgehen.


