Das SQLMap-Tool ist im Werkzeugkasten eines jeden Penetrationstesters zu finden. Es ist eines der beliebtesten und leistungsfähigsten Tools, wenn es um die Ausnutzung von SQL-Injection-Schwachstellen geht, die selbst die OWASP-Liste der Top-10-Schwachstellen anführen. Von der Bestätigung der SQL-Injection-Schwachstelle bis hin zum Extrahieren des Datenbanknamens, der Tabellen und Spalten und der Erlangung eines vollständigen Systems kann es für verschiedene Zwecke verwendet werden.
In diesem Artikel werden wir verschiedene Arten von SQLMap-Befehlen sehen, die beim Ausnutzen verschiedener Szenarien der SQL-Injection nützlich sein können.
SQLMap kann von den folgenden Links heruntergeladen werden:
Windows
Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Für Demozwecke verwende ich diese Maschine von Vulnhub.
Schauen wir uns die grundlegende Verwendung des SQLMap-Tools bei GET- und POST-Anfragen an.
sqlmap -u http://site-to-test.com/test.php?id=1 -p id
sqlmap -u http://site-to-test.com/test.php?id=1*
-u: URL zu scannen
-p: Parameter zu scannen
*: Zu scannende Parameter (wenn der Schalter -p nicht angegeben wird)
POST-Anfrage
Wir können die Daten, die im POST-Anfragekörper übergeben werden, zum Scannen durch das SQLMap-Tool bereitstellen.
sqlmap -u http://site-to-test.com/admin/index.php -data=“user=admin&password=admin“ -p user
-data = POST data
Eine andere Möglichkeit ist, die Burp-Anfrage in eine Datei zu kopieren und diese an SQLMap zu übergeben.
sqlmap -r <Pfad zur Anfragedatei>
Lassen Sie uns ein wenig weiter gehen, um andere Optionen zu verstehen, die das SQLMap-Tool bietet.
Scannen von POST-Anmeldeseiten
Post-Anmeldeseiten werden durch den Cookie-Header autorisiert, der im HTTP-Header einer GET/POST-Anfrage übergeben wird. Um die Post-Login-Seite(n) zu scannen, müssen wir SQLMap das gültige Cookie zur Verfügung stellen.
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=“cookie value“
/admin/index.php?id=1 ist eine Post-Login-Seite.
Auch viele der Seiten sind durch den User-Agent oder Referrer-Header geschützt. Diese können in den Befehl aufgenommen werden:
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php
Zusätzlich können wir den User-Agent-Header mit der Option -random-agent randomisieren.
CRAWL
Crawl ist eine wichtige Option, die es dem SQLMap-Tool ermöglicht, die Website zu crawlen, beginnend mit dem Stammverzeichnis. Die zu durchsuchende Tiefe kann mit dem Befehl
sqlmap -u http://192.168.202.160/ -crawl=1
-crawl definiert werden: Definieren Sie eine Tiefe zum Crawlen. (Beispiel: Wenn man 2 definiert, kann das Tool bis zu zwei Verzeichnisse crawlen)
Wenn man eine Seite vom Crawler ausschließen will, kann man dies mit -crawl-exclude definieren. Dies ist eine nützliche Option, wenn wir eine Post-Login-Seite crawlen.
sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=“Cookie-Wert“ -crawl-exclude=“logout“
Dieser Befehl crawlt die Website bis zu drei Verzeichnisse und schließt jede URL aus, in der das Schlüsselwort „logout“ vorkommt.
Wie Sie unten sehen können, hat SQLMap die Website gecrawlt, aber die Logout-URL ausgeschlossen.
Lassen Sie uns denselben Befehl ohne die Option -crawl-exclude ausführen:
Wie unten zu sehen ist, hat SQLMap die Abmelde-URL gecrawlt, wenn -crawl-exclude nicht definiert ist. Dies würde dazu führen, dass die bestehende Sitzung ungültig wird (aufgrund von Logout) und der Scan nicht abgeschlossen werden kann.
SQLMap über Proxy
Wir können die Details eines Proxys definieren, von dem aus wir die Anfrage durchlassen. Wenn wir die Anfrage durch ein Proxy-Tool wie Burp leiten wollen, starten Sie Burp Suite und konfigurieren Sie es so, dass es auf localhost auf Port 8080 läuft. Verwenden Sie nun den folgenden SQLMap-Befehl:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=“http://localhost:8080″
Nun denken Sie an ein Szenario, in dem die sqlinjection-Schlüsselwörter wie OrderBy und Union auf dem Server auf einer schwarzen Liste stehen. Wir können diese Art von Implementierungen umgehen, indem wir die Camel-Case-Technik verwenden. Wir werden SQLMap verwenden, um den Datenverkehr an Burp zu senden, und die „Match and Replace“-Funktion von Burp nutzen, um die obige Einschränkung zu umgehen.
Die „Match and Replace“-Funktion befindet sich auf der Registerkarte „Options“ unter der Registerkarte „Proxy“ von Burp.
Damit wird geprüft, ob die Anfrage ein Schlüsselwort wie „union“ enthält. Wenn ja, ersetzen Sie es durch „UnIoN“.
In einem Szenario, in dem die Anwendung nur über einen Proxy-Server zugänglich ist, kann dieser mit dem folgenden Befehl definiert werden:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=“http://localhost:8080″ -proxy-cred=Benutzername:Passwort
Batch
Der Batch-Befehl wird für nicht interaktive Sitzungen verwendet. Wenn wir versuchen, etwas zu scannen, kann SQLMap uns auffordern, während des Scans Eingaben zu machen: z.B. bei der Verwendung der Crawl-Funktion fragt das Tool den Benutzer, ob er die identifizierte URL scannen möchte. Wenn -batch im Befehl definiert ist, verwendet das Tool einen Standardwert, um fortzufahren, ohne den Benutzer zu fragen.
Form
Eine Seiten-URL mit einem Formularfeld (z. B. Anmeldeseite) kann zusammen mit der Option -form angegeben werden, um die Seite zu analysieren und den Benutzer anzuleiten, die identifizierten Felder zu testen.
Nun können Seiten mit einer großen Anzahl von Formularfeldern effektiv getestet werden, indem die Optionen -form und -batch zusammen verwendet werden. Dadurch wird die Seite geparst, auf Formularfelder geprüft und die Eingaben automatisch für den Benutzer bereitgestellt.
Wenn die gesamte Anwendung gescannt werden soll, kann die Crawl-Option zusammen mit -form und -batch verwendet werden.
Threads
Mit der Thread-Option kann der Benutzer die Anzahl der gleichzeitigen Anfragen festlegen, die vom SQLMap-Tool gesendet werden sollen. Dadurch wird die Gesamttestzeit reduziert. Dieser Wert sollte nicht zu hoch angesetzt werden, da er die Genauigkeit des Ergebnisses beeinträchtigen kann.
Risiko und Level
Risiko erlaubt die Art der vom Tool verwendeten Nutzlasten. Standardmäßig wird der Wert 1 verwendet und kann bis zur Stufe 3 konfiguriert werden. Stufe 3 ist die höchste Stufe und umfasst einige umfangreiche SQL-Abfragen.
Die Stufe legt die Anzahl der durchzuführenden Prüfungen/Payloads fest. Der Wert reicht von 1 bis 5. 5 ist das Maximum und schließt eine große Anzahl von Nutzdaten in den Scan ein.
Es wird empfohlen, das Risiko und die Stufe zu erhöhen, wenn SQLMap nicht in der Lage ist, die Injektion in den Standardeinstellungen zu erkennen.
Verbose
Wenn wir die Nutzdaten sehen wollen, die vom Tool gesendet werden, können wir die Option verbose verwenden. Die Werte reichen von 1 bis 6.
Datenbankaufzählung
Da wir wissen, dass SQLMap hauptsächlich für SQL-Injection-Exploitation verwendet wird, sehen wir uns einige der Befehle zur Aufzählung der Datenbank durch eine für SQL-Injection anfällige Anwendung an.
1. -dbs: Diese Option wird verwendet, um die Datenbank aufzuzählen.
2. Jetzt haben wir den Datenbanknamen. Um die Tabelle für die Datenbank „photoblog“ zu extrahieren, führen Sie den folgenden Befehl aus:
3. Um die Spaltendetails aus der Tabelle „users“ zu extrahieren, führen Sie den folgenden Befehl aus:
4. Um die Daten für die Tabelle „users“ zu dumpen, verwenden Sie den Befehl -dump:
5. So identifizieren Sie den aktuellen Datenbankbenutzer:
6. So identifizieren Sie den aktuellen Datenbanknamen:
7. Identifizieren der Privilegien, Rollen und ob der aktuelle DB-Benutzer der DB-Administrator ist:
Umgehen der WAF mit einem Manipulationsskript
Viele Male stoßen wir auf ein Szenario, in dem die Anwendung hinter der Web Application Firewall (WAF) gehalten wird. Um zu prüfen, ob die Website durch die WAF geschützt ist, können wir die folgenden Optionen verwenden:
-identify-waf
Wenn die WAF identifiziert ist, können wir das Tamper-Skript verwenden, um die WAF-geschützten Anwendungen anzugreifen. Das Manipulationsskript kann die Anfrage so verändern, dass sie der WAF-Erkennung entgeht. Die Skripte befinden sich im Verzeichnis /usr/share/sqlmap/tamper/.
Ausführen von Systembefehlen
Wir können die Befehle auf Betriebssystem-/Systemebene ausführen, wenn der aktuelle Datenbankbenutzer DBA-Rechte hat. Wir können die folgenden Optionen verwenden:
Für einen Linux-Server:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell
Für einen Windows-Server:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>
Ausführen von SQL-Abfragen
Wir können die SQL-Anweisung auf der Datenbank ausführen, indem wir die folgenden Befehle ausführen:
sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell
Weitere Optionen
Einige andere Optionen sind:
1. Scannen einer Seite, die durch HTTP-Authentifizierung wie Basic, NTLM und Digest geschützt ist:
sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred „admin:admin“
2. Scannen einer Seite, die durch eine schlüsselbasierte Authentifizierung geschützt ist
sqlmap -u http://example.com/admin.aspx -auth-file=<Pfad zu PEM-Zertifikat oder privater Schlüsseldatei>
3. Um angreifende IPs zu randomisieren (dies kann in Fällen wie der WAF-Erkennung helfen, oder wenn das Verstecken der angreifenden Quelle die Schwierigkeit der Verfolgung der IP erhöhen würde).
Um das standardmäßige Tor-Anonymitätsnetzwerk zu verwenden:
sqlmap -u http://example.com/admin.aspx -tor
Um einen Tor-Port zu definieren:
sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy port>
4. Wenn eine Verzögerung zwischen den einzelnen HTTP-Anfragen erforderlich ist:
sqlmap -u http://example.com/admin.aspx -delay=1 #1 Sekunde Verzögerung
5. Wenn eine Seite durch ein CSRF-Token geschützt ist, können wir dasselbe in den Befehl aufnehmen:
sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>
Second-Order SQL injection: Bei dieser Art der SQL-Injektion wird die SQL-Nutzlast in der Datenbank gespeichert und später beim Zugriff auf eine andere Seite abgerufen. Wir geben eine URL an, die vom SQLMap-Tool nach jeder Injektion abgefragt wird. Wir können das SQLMap-Tool anweisen, diese Injektion mit den folgenden Befehlen zu testen:
sqlmap -r /root/Desktop/Burp.txt -second-order „http://target/vulnerbalepage.php“
Die Burp.txt-Datei enthält die Anfrage, bei der die Injektion durchgeführt werden soll.
-second-order „URL“ enthält die URL, auf die SQLMap nach jeder Injektion zugreift.