Beliebige Dateien vom Server mit sqlmap lesen

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie eine leistungsstarke Funktion von sqlmap erkunden, einem beliebten Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert. Insbesondere lernen Sie, wie Sie sqlmap verwenden, um beliebige Dateien von einem Zielserver zu lesen. Diese Fähigkeit ist oft möglich, wenn der zugrunde liegende Datenbankbenutzer über ausreichende Berechtigungen verfügt (z. B. DBA-Berechtigungen) und das Datenbanksystem das Lesen von Dateien aus dem Dateisystem erlaubt. Das Verständnis dieser Technik ist für ethische Hacker und Sicherheitsexperten entscheidend, um solche Schwachstellen zu identifizieren und zu beheben.

DBA-Privilegien und Dateileseberechtigungen bestätigen

In diesem Schritt simulieren wir ein Szenario, in dem Sie eine SQL-Injection-Schwachstelle identifiziert haben und nun sqlmap verwenden, um die Privilegien des Datenbankbenutzers zu bewerten. Um beliebige Dateien vom Server zu lesen, benötigt der Datenbankbenutzer in der Regel DBA-Privilegien (Database Administrator) oder spezifische Dateileseberechtigungen. Wir werden sqlmap verwenden, um zu überprüfen, ob der aktuelle Datenbankbenutzer über diese erweiterten Privilegien verfügt.

Zunächst gehen wir davon aus, dass Sie eine anfällige URL haben. Für dieses Lab verwenden wir eine Platzhalter-URL. Ersetzen Sie http://example.com/vulnerable?id=1 durch Ihr tatsächliches Ziel, wenn Sie dies in einer realen Testumgebung durchführen.

Um nach DBA-Privilegien zu suchen, verwenden Sie das Flag --is-dba mit sqlmap:

sqlmap -u "http://example.com/vulnerable?id=1" --is-dba

Hinweis: In einem realen Szenario würde sqlmap zuerst die SQL-Injection erkennen und dann mit der Überprüfung der DBA-Privilegien fortfahren. Für dieses Lab konzentrieren wir uns auf den Aspekt des Dateilesens, daher gehen wir davon aus, dass sqlmap bereits einen Injektionspunkt gefunden hat.

Wenn die Ausgabe [INFO] current user is DBA: True anzeigt, verfügt der Benutzer über DBA-Privilegien, was oft die Möglichkeit zum Lesen von Dateien impliziert.

Um anschließend nach Dateileseberechtigungen zu suchen, können Sie das Flag --file-priv verwenden:

sqlmap -u "http://example.com/vulnerable?id=1" --file-priv

Dieser Befehl versucht festzustellen, ob der Datenbankbenutzer über die erforderlichen Berechtigungen zum Lesen und Schreiben von Dateien im Dateisystem verfügt. Wenn die Ausgabe [INFO] current user has FILE privilege: True anzeigt, können Sie wahrscheinlich mit dem Lesen von Dateien fortfahren.

Beispielausgabe (simuliert):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-26/
[INFO] fetched data: 'True'
[INFO] current user is DBA: True
[INFO] fetched data: 'True'
[INFO] current user has FILE privilege: True
[INFO] shutting down @ 12:34:57 /2023-10-26/

Diese Ausgabe bestätigt, dass der Datenbankbenutzer sowohl DBA- als auch FILE-Privilegien besitzt, was das Lesen beliebiger Dateien ermöglicht.

Einen bekannten absoluten Dateipfad identifizieren (z. B. /etc/passwd)

In diesem Schritt müssen Sie eine Zieldatei auf dem Remote-Server identifizieren, die Sie lesen möchten. Ein gängiges Ziel zur Demonstration von Arbitrary File Read-Schwachstellen ist /etc/passwd auf Linux-Systemen, da es Benutzerkontoinformationen enthält und typischerweise für alle lesbar ist. Andere potenzielle Ziele könnten Konfigurationsdateien, Webserver-Logs oder Anwendungscodes sein, abhängig vom System und Ihren Zielen.

Für dieses Lab gehen wir davon aus, dass der Zielserver ein Linux-System ist und wir den Inhalt von /etc/passwd lesen möchten. Es ist entscheidend, den absoluten Pfad der Datei zu kennen, die Sie lesen möchten. Ohne den absoluten Pfad kann sqlmap die Datei auf dem Remote-System nicht lokalisieren.

In diesem Schritt müssen Sie keine Befehle ausführen, sondern vielmehr die Bedeutung der Identifizierung eines gültigen, absoluten Dateipfads verstehen. Dieses Wissen wird typischerweise durch Aufklärung (Reconnaissance), Fehlermeldungen der Webanwendung oder durch das Erraten gängiger Dateispeicherorte erlangt.

Beispiele für gängige Dateipfade unter Linux:

  • /etc/passwd (Benutzerkontoinformationen)
  • /etc/shadow (Gehashte Passwörter – erfordert normalerweise Root-Privilegien zum Lesen)
  • /etc/hosts (Netzwerk-Hostnamen)
  • /etc/nginx/nginx.conf oder /etc/apache2/apache2.conf (Webserver-Konfiguration)
  • /var/log/auth.log oder /var/log/syslog (Systemprotokolle)
  • /proc/self/cmdline (Befehlszeile des aktuellen Prozesses)

Für dieses Lab werden wir mit /etc/passwd als unserer Zieldatei fortfahren.

Das Flag --file-read zum Angeben der Remote-Datei verwenden

In diesem Schritt lernen Sie, wie Sie das Flag --file-read in sqlmap verwenden, um den absoluten Pfad der Datei anzugeben, die Sie vom Remote-Server lesen möchten. Dieses Flag ist der Kern der Arbitrary File Read-Funktionalität.

Die Syntax für die Verwendung von --file-read ist unkompliziert:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/path/to/remote/file"

Ersetzen Sie http://example.com/vulnerable?id=1 durch Ihre Ziel-URL und /path/to/remote/file durch den absoluten Pfad der Datei, die Sie im vorherigen Schritt identifiziert haben.

Für unser Lab werden wir versuchen, /etc/passwd zu lesen. Der vollständige Befehl sieht dann wie folgt aus:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

Wenn sqlmap die Datei erfolgreich liest, speichert es den Inhalt lokal in einem Verzeichnis unter ~/.sqlmap/output/<target_host>/files/. Der Dateiname ist in der Regel derselbe wie der Remote-Dateiname (z. B. passwd).

Hinweis: sqlmap übernimmt die Generierung und Ausführung der SQL-Injection-Payload automatisch. Ihre Aufgabe ist es, die anfällige URL und den Ziel-Dateipfad anzugeben.

Den Befehl zum Lesen der Remote-Datei ausführen

Nun ist es an der Zeit, den sqlmap-Befehl auszuführen, den Sie im vorherigen Schritt erstellt haben, um die Remote-Datei tatsächlich zu lesen. Öffnen Sie Ihr Terminal in der LabEx-Umgebung und führen Sie den Befehl aus.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

Wichtig: Da dies eine simulierte Umgebung ist, wird sqlmap keine tatsächliche Verbindung zu einem Live-Server mit Schwachstellen herstellen. Es wird jedoch den Prozess simulieren und Meldungen ausgeben, als ob es dies tun würde. Sie sehen die typische Ausgabe von sqlmap, einschließlich Informationen über den Injektionsprozess und den Versuch, die Datei zu lesen.

Beispielausgabe (simuliert):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:35:00 /2023-10-26/
[INFO] fetched data: 'root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
... (truncated for brevity) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash'
[INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'
[INFO] shutting down @ 12:35:05 /2023-10-26/

Die wichtigste Zeile, auf die Sie achten sollten, ist [INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'. Dies zeigt an, dass sqlmap die Datei erfolgreich "gelesen" und ihren Inhalt auf Ihrem lokalen Rechner im sqlmap-Ausgabeverzeichnis gespeichert hat.

Den Inhalt der lokal gespeicherten Datei anzeigen

In diesem letzten Schritt überprüfen Sie, ob die Datei von sqlmap tatsächlich "gelesen" und gespeichert wurde, indem Sie ihren Inhalt in Ihrer lokalen LabEx-Umgebung anzeigen. Wie bereits erwähnt, speichert sqlmap die extrahierten Dateien in einer spezifischen Verzeichnisstruktur.

Der Pfad lautet typischerweise ~/.sqlmap/output/<target_host>/files/. In unserem simulierten Beispiel ist der Ziel-Host example.com und die Datei passwd. Der vollständige Pfad zur gespeicherten Datei wäre also ~/.sqlmap/output/example.com/files/passwd.

Sie können den Befehl cat verwenden, um den Inhalt dieser Datei anzuzeigen:

cat ~/.sqlmap/output/example.com/files/passwd

Beispielausgabe (simuliert):

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
... (truncated for brevity) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash

Diese Ausgabe bestätigt, dass sqlmap die Datei /etc/passwd erfolgreich vom simulierten Remote-Server "gelesen" und lokal gespeichert hat, sodass Sie deren Inhalt einsehen können. Dies demonstriert den vollständigen Prozess der Verwendung von sqlmap für das Arbitrary File Reading.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie mit sqlmap das Lesen beliebiger Dateien von einem simulierten verwundbaren Server durchführen. Sie haben damit begonnen, die Bedeutung der Bestätigung von DBA- oder Dateileseberechtigungen zu verstehen. Anschließend haben Sie eine gängige Zieldatei (/etc/passwd) identifiziert und das Flag --file-read verwendet, um sqlmap anzuweisen, deren Inhalt zu extrahieren. Schließlich haben Sie die erfolgreiche Extraktion durch Anzeige der lokal gespeicherten Datei verifiziert. Diese Fähigkeit ist für Penetrationstester grundlegend, um die Auswirkungen von SQL-Injection-Schwachstellen zu bewerten, und für Entwickler, um die Bedeutung des richtigen Berechtigungsmanagements und der Eingabevalidierung zu verstehen, um solche Angriffe zu verhindern.