Einleitung
In diesem Lab lernen Sie den Umgang mit sqlmap, einem leistungsstarken Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert. Insbesondere konzentrieren Sie sich auf eine wichtige Optimierungstechnik: die gezielte Ansprache eines spezifischen Backend-Datenbankmanagementsystems (DBMS).
Standardmäßig testet sqlmap eine Vielzahl von Datenbanksystemen, was zeitaufwendig sein kann. Durch die Angabe des Ziel-DBMS (wie MySQL, PostgreSQL oder MSSQL) können Sie den Scanprozess erheblich beschleunigen, die Anzahl der an den Server gesendeten Anfragen reduzieren und Ihre Tests effizienter gestalten.
Wir haben für Sie eine anfällige Webanwendung vorkonfiguriert, auf der Sie üben können. Die Ziel-URL für dieses Lab ist: http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#
Legen wir los!
Identifizieren des wahrscheinlichen Backend-DBMS (z. B. MySQL, PostgreSQL)
In diesem Schritt führen Sie einen grundlegenden sqlmap-Scan durch, damit es das Backend-Datenbanksystem automatisch identifiziert. Dies ist ein üblicher erster Schritt bei einem Penetrationstest. Die hier gesammelten Informationen helfen uns, unseren Angriff in den nachfolgenden Schritten zu optimieren.
Wir verwenden das Flag --batch, damit sqlmap mit seinen Standardantworten auf alle Fragen ausgeführt wird, wodurch der Scan nicht-interaktiv wird. Wir müssen auch einen Session-Cookie angeben, um auf die anfällige Seite zuzugreifen. Für dieses Lab ist der Cookie security=low; PHPSESSID=labex.
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --batch
sqlmap beginnt mit seinem Testprozess. Achten Sie genau auf die Ausgabe. Nach einer Reihe von Tests gibt sqlmap Informationen über das Betriebssystem des Webservers, die Webserver-Technologie und vor allem das Backend-DBMS aus.
Sie sollten eine Ausgabe sehen, die der folgenden ähnelt (einige Details können variieren):
[INFO] das Back-End-DBMS ist MySQL
Betriebssystem des Webservers: Linux Ubuntu
Webanwendungstechnologie: PHP 8.1.2, Apache 2.4.52
Back-End-DBMS: MySQL >= 5.0
Wie Sie sehen können, hat sqlmap die Backend-Datenbank als MySQL identifiziert. Dies sind die entscheidenden Informationen, die wir als Nächstes verwenden werden.
Verwenden des --dbms-Flags zur Angabe des Zielsystems
In diesem Schritt lernen wir das --dbms-Flag kennen, das der Kern dieses Labs ist. Da wir im vorherigen Schritt wissen, dass das Ziel MySQL verwendet, muss sqlmap keine Zeit mit Tests für andere Datenbanksysteme wie PostgreSQL, Oracle oder Microsoft SQL Server verschwenden.
Das --dbms-Flag ermöglicht es Ihnen, sqlmap genau mitzuteilen, für welches Datenbanksystem es testen soll. Dies macht das Tool wesentlich effizienter.
Die Syntax ist einfach:
--dbms=DBMS_NAME
Sie ersetzen DBMS_NAME durch den Namen der Zieldatenbank. Hier sind einige gängige Werte:
MySQLPostgreSQLMSSQL(Microsoft SQL Server)OracleSQLiteAccess
Durch die Angabe dieser Informationen weisen Sie sqlmap an, nur Payloads und Techniken zu verwenden, die für das angegebene DBMS spezifisch sind. Dies ist eine grundlegende Fähigkeit, um sqlmap in realen Szenarien effektiv einzusetzen. Im nächsten Schritt wenden Sie dieses Flag auf einen neuen Scan an.
Ausführen eines Scans mit --dbms=MySQL
In diesem Schritt führen Sie den sqlmap-Scan erneut aus, diesmal jedoch mit dem Flag --dbms=MySQL. Dies weist sqlmap an, seine Bemühungen ausschließlich auf MySQL-spezifische Tests zu konzentrieren, basierend auf den Informationen, die wir in Schritt 1 gesammelt haben.
Führen Sie den folgenden Befehl in Ihrem Terminal aus. Es ist derselbe Befehl wie zuvor, nur mit dem neuen Flag.
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --dbms=MySQL --batch
Der Scan startet sofort. Sie werden feststellen, dass die anfängliche Ausgabe von sqlmap bestätigt, dass das Backend-DBMS auf MySQL erzwungen wird.
[INFO] Erzwingen des Back-End-DBMS auf 'MySQL'
Lassen Sie den Scan bis zum Abschluss laufen. Im nächsten Schritt analysieren wir die Ergebnisse und vergleichen sie mit unserem ersten Scan.
Beobachten der reduzierten Anzahl von Payloads und der schnelleren Identifizierung
In diesem Schritt werden Sie die direkten Vorteile der Verwendung des --dbms-Flags beobachten. Die Hauptvorteile sind eine deutliche Reduzierung der durchgeführten Tests und eine viel schnellere Abschlusszeit.
Wenn Sie die Ausgabe des Scans aus Schritt 3 mit dem ersten Scan aus Schritt 1 vergleichen, werden Sie einen wesentlichen Unterschied feststellen. Der erste Scan hat Zeit damit verbracht, die Datenbank zu identifizieren, generische Tests durchzuführen und diese dann einzugrenzen. Der zweite Scan hat jedoch all dies übersprungen.
Die Ausgabe des gezielten Scans zeigt, dass sqlmap nur Tests ausführt, die für MySQL relevant sind. Sie werden nicht sehen, dass es auf andere Systeme wie PostgreSQL oder Oracle testet.
Ein generischer Scan könnte beispielsweise Hunderte von Payloads für verschiedene Arten von SQL-Injection für mehrere Datenbanken testen. Der gezielte Scan führt jedoch nur die Payloads aus, von denen bekannt ist, dass sie gegen MySQL funktionieren. Dies führt zu:
- Weniger HTTP-Anfragen: Das Tool sendet deutlich weniger Anfragen an den Zielserver.
- Schnellere Ausführung: Die gesamte Scanzeit wird drastisch reduziert.
Diese Effizienz ist bei Penetrationstests von entscheidender Bedeutung, bei denen Zeit oft eine Einschränkung darstellt und die Minimierung des Netzwerkverkehrs dazu beitragen kann, eine Erkennung durch Firewalls oder Intrusion Detection Systeme (IDS) zu vermeiden.
Verstehen, wie dies den Angriff durch Reduzierung von Testfällen optimiert
In diesem letzten Schritt festigen wir unser Verständnis dafür, warum die gezielte Ansprache des DBMS eine Best Practice zur Optimierung darstellt.
sqlmap ist als umfassendes Werkzeug konzipiert. Ohne jegliche Anleitung ist sein Standardverhalten, anzunehmen, dass es nichts über das Ziel weiß. Daher führt es eine große Anzahl von Tests durch, um viele Möglichkeiten abzudecken:
- Fingerprinting: Es versucht zunächst, den DBMS-Typ zu bestimmen, indem es verschiedene Abfragen sendet und die Antworten analysiert. Jede Datenbank verfügt über eindeutige Funktionen, Fehlermeldungen und Verhaltensweisen, die ihre Identität preisgeben können.
- Breite Tests: Anschließend testet es verschiedene SQL-Injection-Techniken (boolean-based blind, time-based blind, error-based, UNION query usw.).
- DBMS-spezifische Payloads: Für jede Technik versucht es Payloads, die auf verschiedenen Datenbanksystemen funktionieren.
Dieser "Brute-Force"-Ansatz ist gründlich, aber ineffizient, wenn Sie das Backend bereits kennen oder schnell erraten können.
Durch die Verwendung von --dbms=MySQL weisen Sie sqlmap an, Schritt 1 vollständig zu überspringen und nur Payloads aus Schritt 3 zu verwenden, die für MySQL relevant sind. Dies beschneidet eine riesige Anzahl von Testfällen aus seinem Workflow.
Diese Optimierung bietet drei Hauptvorteile:
- Geschwindigkeit: Der Scan wird viel schneller abgeschlossen, da keine unnötigen Tests durchgeführt werden.
- Tarnung: Weniger Anfragen bedeuten weniger "Rauschen" in den Protokollen des Webservers, wodurch die Aktivität weniger wahrscheinlich Alarme auslöst.
- Effizienz: Es konzentriert die Leistung des Werkzeugs auf die wahrscheinlichsten Angriffsvektoren und erhöht die Chancen auf eine erfolgreiche und schnelle Entdeckung.
Die Beherrschung von Flags wie --dbms verwandelt sqlmap von einem einfachen automatisierten Scanner in ein präzises und chirurgisches Testwerkzeug.
Zusammenfassung
In diesem Lab haben Sie eine entscheidende Technik zur Optimierung von sqlmap-Scans gelernt. Sie haben aus erster Hand erfahren, wie die Identifizierung des Backend-Datenbankverwaltungssystems (DBMS) und die anschließende Verwendung des --dbms-Flags die Effizienz Ihrer SQL-Injection-Tests dramatisch verbessern können.
Sie haben mit einem generischen Scan begonnen, um das Backend als MySQL zu identifizieren. Anschließend haben Sie das --dbms-Flag kennengelernt und es verwendet, um einen gezielten Scan durchzuführen. Durch den Vergleich der beiden Ansätze haben Sie beobachtet, dass der gezielte Scan deutlich schneller war, da eine große Anzahl irrelevanter Testfälle eliminiert wurde.
Dieses Prinzip der Fokussierung Ihrer Werkzeuge ist ein grundlegendes Konzept im effektiven Penetrationstesting. Herzlichen Glückwunsch zum Abschluss dieses Labs und dazu, dass Sie eine wichtige sqlmap-Fähigkeit zu Ihrem Werkzeugkasten hinzugefügt haben!


