Durchführen eines grundlegenden Scans auf einem GET-Parameter mit sqlmap

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab erhalten Sie praktische Erfahrung mit sqlmap, einem Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen sowie die Übernahme von Datenbankservern automatisiert. Insbesondere konzentrieren Sie sich auf die Durchführung eines grundlegenden Scans eines GET-Parameters einer Webanwendung, um potenzielle SQL-Injection-Schwachstellen zu identifizieren. Das Verständnis, wie man einen Scan initiiert und dessen anfängliche Ausgabe interpretiert, ist eine grundlegende Fähigkeit für jeden, der im Bereich Web-Sicherheit oder Penetrationstests tätig ist. Dieses Lab führt Sie durch die notwendigen Schritte, von der Einrichtung einer anfälligen Umgebung bis zur Ausführung Ihres ersten sqlmap-Befehls und der Analyse der Ergebnisse.

Identifizieren einer Ziel-URL mit einem GET-Parameter

In diesem Schritt identifizieren Sie die Ziel-URL, die einen GET-Parameter enthält, den sqlmap zum Testen auf SQL-Injection-Schwachstellen verwendet. Ein GET-Parameter befindet sich typischerweise in der URL nach einem Fragezeichen (?), gefolgt von Schlüssel-Wert-Paaren, die durch kaufmännische Und-Zeichen (&) getrennt sind. Für dieses Lab haben wir eine einfache anfällige PHP-Anwendung eingerichtet, die einen id-Parameter über GET entgegennimmt.

Öffnen Sie zuerst den Webbrowser in der LabEx-Umgebung. Sie können auf den Browser zugreifen, indem Sie auf das Symbol "Web Browser" in der Desktop-Umgebung klicken.

Navigieren Sie zur folgenden URL: http://localhost/index.php?id=1

Beobachten Sie den Seiteninhalt. Sie sollten eine einfache Ausgabe sehen, die darauf hinweist, dass die Anwendung Daten basierend auf dem id-Parameter anzeigt. Dies bestätigt, dass der id-Parameter ein geeignetes Ziel für unseren sqlmap-Scan ist.

Konstruieren des grundlegenden Scan-Befehls mit der Option -u

In diesem Schritt lernen Sie, wie Sie den grundlegenden sqlmap-Befehl zum Anvisieren einer bestimmten URL mit einem GET-Parameter konstruieren. Die primäre Option zur Angabe der Ziel-URL ist -u (oder --url).

Öffnen Sie ein Terminal in der LabEx-Umgebung. Der Standardbenutzer ist labex und das Standardarbeitsverzeichnis ist ~/project.

Die grundlegende Syntax für sqlmap zum Scannen einer URL mit einem GET-Parameter lautet:

sqlmap -u "http://example.com/page.php?param=value"

Ersetzen Sie http://example.com/page.php?param=value durch unsere Ziel-URL.

Für unser Lab lautet die Ziel-URL http://localhost/index.php?id=1. Daher lautet der Befehl, den Sie verwenden werden:

sqlmap -u "http://localhost/index.php?id=1"

Dieser Befehl weist sqlmap an, mit dem Scannen der angegebenen URL zu beginnen und den id-GET-Parameter auf SQL-Injection-Schwachstellen zu testen.

Ausführen des Scans gegen die Ziel-URL

Nachdem Sie den sqlmap-Befehl konstruiert haben, ist es an der Zeit, ihn im Terminal auszuführen. Dies leitet den automatisierten SQL-Injection-Scan ein.

Führen Sie in Ihrem Terminal den sqlmap-Befehl aus, den Sie im vorherigen Schritt konstruiert haben:

sqlmap -u "http://localhost/index.php?id=1"

sqlmap beginnt damit, verschiedene Payloads an den id-Parameter zu senden, um verschiedene Arten von SQL-Injection-Schwachstellen zu testen. Während des Scans kann sqlmap Ihnen einige Fragen stellen. Für diesen grundlegenden Scan können Sie im Allgemeinen die Standardoptionen akzeptieren, indem Sie Enter drücken oder y (für Ja) eingeben, wenn Sie dazu aufgefordert werden.

Zum Beispiel könnte sqlmap fragen: [INFO] das Back-End-DBMS ist MySQL. Möchten Sie Test-Payloads überspringen, die spezifisch für andere DBMSs sind? [Y/n] Geben Sie Y ein und drücken Sie Enter.

Es könnte auch fragen: für die URL 'http://localhost/index.php?id=1' scheint der Parameter 'id' injizierbar zu sein. Möchten Sie andere (falls vorhanden) weiter testen? [y/N] Geben Sie N ein und drücken Sie Enter, um sich auf den identifizierten injizierbaren Parameter zu konzentrieren.

Der Scan wird fortgesetzt, und Sie sehen verschiedene Meldungen, die den Fortschritt und die durchgeführten Tests anzeigen.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (truncated output) ...

Analyse der anfänglichen Scan-Ausgabe auf Injektionspunkte

Nach Abschluss des sqlmap-Scans wird eine Zusammenfassung der Ergebnisse angezeigt. In diesem Schritt analysieren Sie die anfängliche Ausgabe, um bestätigte SQL-Injection-Punkte zu identifizieren.

Überprüfen Sie die Ausgabe in Ihrem Terminal. Suchen Sie nach Zeilen, die darauf hinweisen, dass sqlmap einen anfälligen Parameter gefunden hat. Ein wichtiger Indikator ist eine Meldung ähnlich wie:

[INFO] GET parameter 'id' is vulnerable.

Diese Meldung bestätigt, dass sqlmap erfolgreich eine SQL-Injection-Schwachstelle im id-GET-Parameter der Ziel-URL identifiziert hat. Die Ausgabe zeigt in der Regel auch die Art der gefundenen Injektion (z. B. Boolean-based blind, Error-based, Time-based blind, Stacked queries usw.) und das identifizierte Back-End-Datenbankmanagementsystem (DBMS) (z. B. MySQL, PostgreSQL usw.).

Das Verständnis dieser anfänglichen Ausgabe ist entscheidend, da sie Ihnen mitteilt, wo sich die Schwachstelle befindet und mit welcher Art von Datenbank Sie es zu tun haben, was weitere Schritte zur Ausnutzung informieren kann.

... (previous output) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (truncated output) ...

Lokalisieren der Sitzungsdatei im Ausgabeverzeichnis

sqlmap speichert automatisch alle Scan-Ergebnisse, einschließlich identifizierter Schwachstellen, abgerufener Daten und Sitzungsinformationen, in einem dedizierten Ausgabeverzeichnis. In diesem Schritt lernen Sie, wie Sie diese Sitzungsdatei lokalisieren.

Standardmäßig speichert sqlmap seine Ausgaben im Verzeichnis ~/.sqlmap/output/. Innerhalb dieses Verzeichnisses finden Sie Unterverzeichnisse, die nach dem Zielhost benannt sind.

Navigieren Sie zum sqlmap-Ausgabeverzeichnis:

cd ~/.sqlmap/output/localhost/

Listen Sie dann den Inhalt dieses Verzeichnisses auf, um die Sitzungsdateien und andere Scan-bezogene Daten anzuzeigen:

ls -l

Sie sollten ein Verzeichnis sehen, das nach der spezifischen URL oder einem Hash davon benannt ist, und darin Dateien wie session.sqlite, log und möglicherweise dump-Verzeichnisse, wenn Daten extrahiert wurden. Die Datei session.sqlite enthält die Sitzungsdaten, die es sqlmap ermöglichen, Scans fortzusetzen oder frühere Ergebnisse zu überprüfen, ohne erneut zu scannen.

labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan  1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan  1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan  1 12:35 session.sqlite

Dieser Schritt ist wichtig, um zu verstehen, wo sqlmap seine persistenten Daten speichert, was nützlich ist, um vergangene Scans zu überprüfen oder komplexe Operationen fortzusetzen.

Zusammenfassung

In diesem Lab haben Sie erfolgreich einen grundlegenden SQL-Injection-Scan auf einen GET-Parameter mit sqlmap durchgeführt. Sie haben gelernt, wie Sie eine Ziel-URL identifizieren, den sqlmap-Befehl mit der Option -u erstellen, den Scan ausführen und die anfängliche Ausgabe interpretieren, um einen Injektionspunkt zu bestätigen. Darüber hinaus haben Sie die Sitzungsdatei und das Ausgabeverzeichnis lokalisiert, in denen sqlmap seine Ergebnisse speichert. Dieses grundlegende Wissen ist entscheidend für jeden, der sich tiefer mit Webanwendungs-Sicherheitstests und den Fähigkeiten von sqlmap beschäftigen möchte.