Einleitung
In diesem Lab lernen Sie, wie Sie sqlmap zur Enumeration von Datenbanken auf einem Zielserver verwenden. Die Datenbankenumerierung ist ein entscheidender Schritt im Penetration-Testing-Prozess, der es Ihnen ermöglicht, die Namen von Datenbanken auf einem Server zu entdecken, der anfällig für SQL-Injection sein könnte. sqlmap automatisiert diesen Prozess und macht ihn effizient und unkompliziert. Wir beginnen damit, eine erfolgreiche Injektion aus einem früheren Scan (simuliert) sicherzustellen, verwenden dann das Flag --dbs, um alle Datenbanken aufzulisten, führen den Befehl aus, interpretieren die Ergebnisse und unterscheiden schließlich zwischen System- und Benutzerdatenbanken.
Bestätigung einer erfolgreichen Injektion aus einem vorherigen Scan
In diesem Schritt simulieren wir die Bestätigung einer erfolgreichen SQL-Injection aus einem vorherigen Scan. Bevor wir Datenbanken enumerieren, ist es unerlässlich sicherzustellen, dass die Ziel-URL tatsächlich anfällig für SQL-Injection ist und dass sqlmap diese erfolgreich ausnutzen kann. Für die Zwecke dieses Labs gehen wir davon aus, dass ein vorheriger Scan eine anfällige URL identifiziert hat. Wir verwenden eine Platzhalter-URL, um die Befehlsstruktur von sqlmap zu demonstrieren.
Öffnen Sie Ihr Terminal im Verzeichnis ~/project.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --banner
Dieser Befehl verwendet sqlmap, um eine Verbindung zur angegebenen URL herzustellen und versucht, das Datenbank-Banner abzurufen. Ein erfolgreicher Abruf des Banners zeigt eine erfolgreiche Injektion an.
Beispielausgabe:
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-1#stable
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] do you want to enable full support for HTTP(S) proxy? [y/N] N
[!] do you want to resume the previous session? [Y/n/q] n
... (gekürzte Ausgabe) ...
web server operating system: Linux Debian
web application technology: Apache 2.2.14, PHP 5.3.2
back-end DBMS: MySQL >= 5.0.12
banner: '5.1.73-0ubuntu0.10.04.1'
Die Zeile banner in der Ausgabe bestätigt, dass sqlmap erfolgreich mit der Datenbank interagieren und deren Versionsinformationen abrufen konnte, was auf eine erfolgreiche Injektion hindeutet.
Verwendung des --dbs-Flags zum Auflisten aller Datenbanken
In diesem Schritt lernen wir das --dbs-Flag in sqlmap kennen, das speziell zur Enumeration und Auflistung aller verfügbaren Datenbanken auf dem Zielserver verwendet wird. Dieses Flag ist unerlässlich, um die Namen von Datenbanken zu entdecken, die sensible Informationen enthalten könnten.
Das --dbs-Flag weist sqlmap an, eine Datenbankenumerierung durchzuführen. Wenn sqlmap erfolgreich eine SQL-Injection-Schwachstelle ausnutzt, kann es anschließend den Datenbankserver nach einer Liste aller gehosteten Datenbanken abfragen.
Die Befehlsstruktur wird der des vorherigen Schritts ähneln, jedoch mit der Ergänzung von --dbs:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
Dieser Befehl weist sqlmap an, alle Datenbanken zu identifizieren und aufzulisten, die über die SQL-Injection-Schwachstelle an der angegebenen URL zugänglich sind.
Ausführen des Befehls zur Datenbankenumerierung
In diesem Schritt führen wir den sqlmap-Befehl mit dem --dbs-Flag aus, um die Datenbanken zu enumerieren. Dies ist die Kernaktion dieses Labs.
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
sqlmap wird nun seine Tests durchführen und, falls erfolgreich, eine Liste von Datenbanknamen ausgeben. Dieser Prozess kann einige Zeit in Anspruch nehmen, da sqlmap verschiedene Injektionstechniken anwendet.
Beispielausgabe:
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-1#stable
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] do you want to enable full support for HTTP(S) proxy? [y/N] N
[!] do you want to resume the previous session? [Y/n/q] n
... (gekürzte Ausgabe) ...
available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart
Die Ausgabe zeigt den Fortschritt von sqlmap und schließlich eine Liste von "verfügbaren Datenbanken" ("available databases"). In diesem Beispiel werden information_schema, mysql, performance_schema und acuart aufgelistet.
Interpretation der Liste zurückgegebener Datenbanknamen
In diesem Schritt interpretieren wir die von sqlmap zurückgegebene Liste von Datenbanknamen. Das Verständnis, was diese Namen bedeuten, ist entscheidend für weitere Schritte im Penetration Testing.
Aus der Ausgabe des vorherigen Schritts haben Sie möglicherweise eine Liste wie diese gesehen:
available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart
Jeder [*]-Eintrag repräsentiert eine auf dem Zielserver gefundene Datenbank.
information_schema: Dies ist eine Standarddatenbank in MySQL (und anderen SQL-Datenbanken), die Zugriff auf Datenbankmetadaten bietet. Sie enthält Informationen über alle anderen Datenbanken, Tabellen, Spalten und Zugriffsrechte. Es handelt sich um eine Systemdatenbank.mysql: Dies ist eine weitere Standard-Systemdatenbank in MySQL, die Informationen speichert, die für den Betrieb des MySQL-Servers erforderlich sind. Sie enthält Benutzerkonten, Berechtigungen und andere Serverkonfigurationsdaten.performance_schema: Dies ist eine Systemdatenbank in MySQL, die zur Überwachung der Ausführung des MySQL-Servers auf niedriger Ebene verwendet wird. Sie liefert Einblicke in die Serverleistung.acuart: Dieser Datenbankname ist wahrscheinlich eine benutzerdefinierte Datenbank, die spezifisch für die auf dem Server laufende Webanwendung ist. Dies ist oft die Datenbank, die die Daten der Anwendung enthält, wie z. B. Benutzeranmeldeinformationen, Produktinformationen oder andere sensible Geschäftsdaten.
Die Identifizierung benutzerdefinierter Datenbanken wie acuart ist oft das Hauptziel, da diese eher wertvolle Informationen für einen Angreifer enthalten.
Unterscheidung zwischen System- und Benutzerdatenbanken
In diesem letzten Schritt werden wir basierend auf den Enumerationsergebnissen explizit zwischen Systemdatenbanken und Benutzerdatenbanken unterscheiden. Diese Unterscheidung ist wichtig für die Priorisierung Ihrer nächsten Schritte bei einem Penetrationstest.
Wie im vorherigen Schritt beobachtet, sind Datenbanken wie information_schema, mysql und performance_schema typischerweise Datenbanken auf Systemebene. Sie sind Teil der Kernfunktionalität des Datenbankmanagementsystems und enthalten normalerweise Metadaten, Benutzerkonten für das DBMS selbst und Leistungsstatistiken. Obwohl sie manchmal ausgenutzt werden können, enthalten sie selten die anwendungsspezifischen sensiblen Daten, nach denen Angreifer oft suchen.
Andererseits sind Datenbanken mit Namen, die keine Standard-Systemnamen sind (z. B. acuart in unserem Beispiel oder webapp_db, users, products usw.), normalerweise benutzerdefinierte Datenbanken. Diese Datenbanken speichern die tatsächlichen Daten der Webanwendung, wie z. B.:
- Benutzeranmeldeinformationen (Benutzernamen, gehashte Passwörter)
- Kundeninformationen
- Produktkataloge
- Finanzberichte
- Andere proprietäre Geschäftsdaten
Bei der Durchführung eines Penetrationstests sollte sich Ihr Fokus nach der Enumeration von Datenbanken auf diese benutzerdefinierten Datenbanken verlagern. Der nächste logische Schritt wäre die Enumeration von Tabellen innerhalb dieser Benutzerdatenbanken, dann von Spalten innerhalb dieser Tabellen und schließlich das Auslesen der Daten.
Durch das Verständnis dieser Unterscheidung können Sie Ihre nachfolgenden sqlmap-Befehle effizient auf die wertvollsten Informationen ausrichten. Um beispielsweise Tabellen in der Datenbank acuart zu enumerieren, würden Sie einen Befehl wie diesen verwenden:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
Dieser Befehl zeigt, wie Sie mit der nächsten Stufe der Datenextraktion fortfahren würden, wobei Sie sich auf die identifizierte Benutzerdatenbank konzentrieren.
Zusammenfassung
In diesem Lab haben Sie erfolgreich gelernt, wie Sie mit sqlmap Datenbanken auf einem Zielserver enumerieren. Sie haben mit dem Verständnis der Bedeutung der Bestätigung einer erfolgreichen SQL-Injection begonnen. Dann haben Sie das Flag --dbs verwendet, um alle verfügbaren Datenbanken aufzulisten, und den Befehl zur Anzeige der Ergebnisse ausgeführt. Schließlich haben Sie gelernt, die zurückgegebenen Datenbanknamen zu interpretieren und zwischen Systemdatenbanken und potenziell wertvolleren, benutzerdefinierten Datenbanken zu unterscheiden. Diese Fähigkeit ist grundlegend für jeden Penetrationstester, der Informationen aus anfälligen Webanwendungen extrahieren möchte.


