Interaktive OS-Shell mit sqlmap erhalten

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab lernen Sie, wie Sie sqlmap, ein beliebtes Open-Source-Penetrationstest-Tool, verwenden, um eine SQL-Injection-Schwachstelle zu einer vollständigen, interaktiven Betriebssystem-Shell zu eskalieren. Während sqlmap hervorragend für die Enumeration und Exfiltration von Daten aus Datenbanken geeignet ist, reichen seine Fähigkeiten bis zur Übernahme der Kontrolle über den zugrunde liegenden Server.

Wir konzentrieren uns auf die --os-shell-Funktion, die versucht, eine Web-Shell (einen Stager) auf den Zielserver hochzuladen, um Ihnen eine Kommandozeile für die direkte Interaktion mit dem entfernten System zu bieten. Für dieses Lab wurde eine einfache, für SQL-Injection anfällige Webanwendung eingerichtet und läuft auf Ihrem lokalen Rechner.

Bestätigen der Möglichkeit zur Ausführung von Betriebssystembefehlen

In diesem Schritt, bevor wir versuchen, eine vollständige interaktive Shell zu erhalten, werden wir zunächst überprüfen, ob wir Befehle auf dem Zielbetriebssystem ausführen können. Dies ist eine entscheidende Vorabprüfung. Wir können dies mit dem Flag --os-cmd in sqlmap erreichen, das das Tool anweist, einen einzelnen angegebenen Befehl auszuführen.

Wir werden den Befehl whoami verwenden, der den effektiven Benutzernamen des aktuellen Benutzers ausgibt. Wir werden auch das Flag --batch verwenden, damit sqlmap mit seinen Standardantworten auf alle interaktiven Fragen ausgeführt wird, was den Prozess beschleunigt.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-cmd="whoami" --batch

Sie werden viele Ausgaben sehen, während sqlmap das Ziel testet. Warten Sie, bis es abgeschlossen ist. Gegen Ende der Ausgabe sollten Sie das Ergebnis des whoami-Befehls sehen.

...
[22:10:30] [INFO] fetching command output
[22:10:30] [INFO] retrieved: 'labex\n'
...
command execution stdout:
labex
...

Die Ausgabe labex bestätigt, dass wir erfolgreich Befehle auf dem Remote-Server als Benutzer labex ausführen können.

Verwenden des Flags --os-shell zum Anfordern einer interaktiven Shell

In diesem Schritt bereiten wir den Befehl vor, um eine vollständige interaktive Shell zu erhalten. Da wir nun bestätigt haben, dass die Ausführung von Betriebssystembefehlen möglich ist, können wir mit größerem Vertrauen fortfahren.

Das sqlmap-Flag hierfür ist --os-shell. Wenn dieses Flag verwendet wird, versucht sqlmap, einen "Stager" hochzuladen, der ein kleines Code-Fragment (in diesem Fall eine PHP-Web-Shell) in ein beschreibbares Verzeichnis auf dem Webserver hochlädt. Dieser Stager stellt dann den Mechanismus für eine interaktive Befehls-Shell bereit.

Der Befehl, den wir verwenden werden, lautet:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

Wenn Sie diesen Befehl im nächsten Schritt ausführen, wird sqlmap Sie durch einige Aufforderungen führen, um den besten Weg zum Hochladen des Stagers zu ermitteln. Wir werden den Befehl in diesem Schritt nicht ausführen, sondern lediglich seinen Zweck verstehen.

Ausführen des Befehls zum Starten der Shell

In diesem Schritt führen Sie den Befehl zum Starten der interaktiven Shell aus. sqlmap wird Sie nach Ihrer Eingabe fragen, um die Sprache der Webanwendung und das Dokumenten-Root-Verzeichnis des Servers (der Hauptordner für die Website) zu ermitteln.

Führen Sie zuerst den Befehl in Ihrem Terminal aus:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --os-shell

sqlmap wird starten und Sie möglicherweise einige Fragen stellen.

  1. Es könnte nach dem Back-End-DBMS fragen. Sie können Enter drücken, um die Standardeinstellung zu akzeptieren, die es wahrscheinlich bereits erkannt hat (z. B. SQLite).

  2. Anschließend wird es nach dem Dokumenten-Root-Verzeichnis des Webservers gefragt. Dies ist ein kritischer Schritt. sqlmap muss ein beschreibbares Verzeichnis kennen, um seine Web-Shell hochzuladen. Basierend auf unserem Setup-Skript ist der richtige Pfad /home/labex/project/vulnerable_app.

    [?] what is the web server document root? [/var/www/html] >
    

    Geben Sie den folgenden Pfad ein und drücken Sie Enter:

    /home/labex/project/vulnerable_app

Nachdem Sie den Pfad angegeben haben, wird sqlmap versuchen, den Stager hochzuladen. Wenn dies erfolgreich ist, sehen Sie Meldungen, die den Upload anzeigen, und Sie werden zu einer neuen Eingabeaufforderung weitergeleitet: os-shell>.

...
[22:15:45] [INFO] trying to upload stager shell to '/home/labex/project/vulnerable_app'
[22:15:45] [INFO] uploading stager shell to '/home/labex/project/vulnerable_app/tmpueyge.php'
[22:15:45] [INFO] stager shell uploaded
os-shell>

Diese os-shell>-Eingabeaufforderung ist Ihre interaktive Shell auf dem Remote-Server.

Interaktion mit dem Remote-System über die sqlmap Shell-Eingabeaufforderung

In diesem Schritt interagieren Sie mit dem Remote-System über die os-shell>-Eingabeaufforderung, die Sie gerade erhalten haben. Diese Eingabeaufforderung ist nicht Ihr lokales Terminal; jeder Befehl, den Sie hier eingeben, wird an den Remote-Server gesendet und dort ausgeführt.

Lassen Sie uns ein paar einfache Befehle ausführen, um unseren Zugriff zu überprüfen.

Geben Sie zuerst pwd ein und drücken Sie Enter, um das aktuelle Arbeitsverzeichnis auf dem Remote-Server herauszufinden.

os-shell > pwd

Die Ausgabe sollte das Verzeichnis sein, in das sqlmap seine Stager-Datei hochgeladen hat.

/home/labex/project/vulnerable_app

Bestätigen Sie anschließend erneut Ihre Benutzeridentität auf dem Remote-System, indem Sie whoami eingeben.

os-shell > whoami

Die Ausgabe sollte erneut labex sein.

labex

Sie haben nun erfolgreich Befehle interaktiv auf dem Zielsystem ausgeführt.

Ausführen mehrerer Befehle und Erkunden des Dateisystems

In diesem Schritt werden Sie das Remote-Dateisystem weiter erkunden. Eine interaktive Shell ist leistungsfähig, da sie es Ihnen ermöglicht, Verzeichnisse zu durchsuchen, Dateien anzuzeigen und das Layout des Servers zu verstehen.

Listen Sie zuerst den Inhalt des aktuellen Verzeichnisses (/home/labex/project/vulnerable_app) im Langformat mit dem Befehl ls -l auf.

os-shell > ls -l

Sie sehen die Dateien in diesem Verzeichnis, einschließlich index.php, users.db und der von sqlmap hochgeladenen temporären PHP-Web-Shell (z. B. tmpueyge.php).

total 20
-rw-r--r-- 1 labex labex  539 Dec 10 22:05 index.php
-rw-r--r-- 1 labex labex   45 Dec 10 22:15 tmpueyge.php
-rw-r--r-- 1 labex labex 12288 Dec 10 22:05 users.db

Versuchen wir nun, im Dateisystem zu navigieren. Wechseln Sie mit dem Befehl cd .. in das übergeordnete Verzeichnis (/home/labex/project).

os-shell > cd ..

Sie sehen keine Ausgabe, aber Ihr aktuelles Verzeichnis auf dem Remote-Server hat sich geändert. Überprüfen Sie dies, indem Sie den Inhalt des neuen Verzeichnisses auflisten.

os-shell > ls

Sie sollten das Verzeichnis vulnerable_app aufgelistet sehen.

vulnerable_app

Sie können nun das Dateisystem innerhalb der Berechtigungen des Benutzers labex frei erkunden. Um die sqlmap-Shell zu verlassen und zu Ihrem normalen Terminal zurückzukehren, geben Sie einfach exit ein und drücken Sie Enter.

Zusammenfassung

In diesem Labor haben Sie erfolgreich eine SQL-Injection-Schwachstelle eskaliert, um vollen Kommandozeilenzugriff auf einen Remote-Server zu erhalten. Sie haben gelernt, wie Sie:

  • Das --os-cmd-Flag von sqlmap verwenden, um zu bestätigen, dass die Ausführung von OS-Befehlen möglich ist.
  • Das --os-shell-Flag verwenden, um sqlmap anzuweisen, eine interaktive Shell einzurichten.
  • Notwendige Informationen, wie das Document Root des Webservers, bereitstellen, um den Upload einer Web-Shell zu ermöglichen.
  • Mit dem Remote-System interagieren, indem Sie Befehle wie pwd, whoami, ls und cd über die sqlmap-Shell ausführen.

Diese Übung demonstriert das kritische Sicherheitsrisiko, das von SQL-Injection-Schwachstellen ausgeht, da diese nicht nur zu Datendiebstahl, sondern auch zu einer vollständigen Systemkompromittierung führen können.