Hi guys ! what’s up ?
Introduction
Dans un article précédent, je vous ai parlé de l’escalade des privilèges Linux à l’aide du fichier /etc/passwd et aujourd’hui, je suis de retour pour vous montrer une autre méthode d’escalade des privilèges Linux à l’aide du fichier Sudoers.
Lors de la résolution des CTFs, pour l’élévation des privilèges il faut toujours vérifier les autorisations root de tout utilisateur pour exécuter n’importe quel fichier ou commande en exécutant sudo -l.
Le concept théorique !!
Sous Linux/Unix, il y a un fichier sudoers dans /etc qui est le fichier de configuration des droits sudo. Vous connaissez tous la puissance de la commande sudo ! le mot sudo représente SuperUser Do root.
Le fichier Sudoers est le fichier dans lequel les utilisateurs et les groupes disposant des privilèges root sont stockés pour exécuter certaines ou toutes les commandes en tant que root ou un autre utilisateur. Pas très compliqué, finalement si je tape sudo -l et qu’en face d’un utilisateur je vois des commandes je pourrais alors taper cette commande pour être root. Rien de particulier non ?
Voici le fichier sudoers : pour l’ouvrir je tape la commande visudo
Lorsque j’exécute une commande avec sudo, elle a besoin des privilèges root pour l’exécution et Linux vérifie ce nom d’utilisateur particulier dans le fichier sudoers.
S’il a conclu que le nom d’utilisateur particulier est dans la liste des fichiers sudoers ou non, sinon je ne peux pas exécuter la commande ou le programme à l’aide de la commande sudo. Conformément aux droits sudo, l’utilisateur root peut s’exécuter à partir de TOUS les terminaux , agissant en tant que TOUS les utilisateurs : groupe TOUS et exécuter la commande TOUS .
Syntaxe du fichier Sudoers
Si moi (utilisateur root) souhaite accorder le droit sudo à un utilisateur particulier, je dois taper la commande visudo qui ouvrira le fichier sudoers pour modification. Sous « spécification des privilèges de l’utilisateur », j’observe l’autorisation root par défaut » root ALL = (ALL: ALL) ALL « .Mais en réalité, il existe également une option TAG disponible qui est facultative.
NOTE:
(ALL:ALL) peut également être représentée comme (ALL)
Si rien n’est mentionné pour l’utilisateur/groupe, cela signifie que sudo est par défaut l’utilisateur root.
Pratique
Avant d’attaquer la partie escalade de privilège, je vais créer un utilisateur pour mieux pouvoir vous montrer comment ça fonctionne. Je vous conseille vivement de le faire aussi pour tester.
Adduser jon
Voilà, tout est prêt !
Méthode traditionnelle pour attribuer le privilège root
En tant qu’administrateur si j’ai envie de donner les doits du super utilisateur à l’utilisateur jon, je dois procéder de la manière suivante :
- Ouvrir le fichier sudoers avec la commande visudo
- Utiliser la bonne syntaxe pour donner les droits
jon ALL=(ALL:ALL) ALL
Maintenant que j’ai terminé la configuration, je démarre ma machine attaquante Kali Linux et je compromets d’abord le système cible, puis je passe à la phase d’escalade de privilège comme dans un vrai CTF.
Supposons que je me suis connecté avec succès à la machine de la victime via ssh et que je souhaite connaître les droits sudo de l’utilisateur actuel.
Pour cela j’exécute la commande sudo -l.
Note : Rappelez-vous j’ai beaucoup parlé de cette commande sur les articles de résolution de CTf , voilà pourquoi c’est important.
C’est opérationnel ! passons aux choses sérieuses.
Méthode par défaut pour attribuer le privilège root
Toujours pareil si en tant qu’admin je souhaite accorder à l’utilisateur jon l’autorisation root d’exécuter toutes les commandes et tous les programmes, je peux aussi écrire :
jon ALL= ALL
Vérification depuis le server cible :
Ici, j’ai utilisé la commande sudo bash mais je pouvais aussi taper sudo su essayez !
Autoriser le privilège root aux commandes binaires
Parfois, un utilisateur a l’autorisation d’exécuter n’importe quel fichier ou commande d’un répertoire particulier tel que /bin/cp, /bin/cat ou /usr/bin/ find, ce type d’autorisation conduit à une élévation de privilèges pour l’accès root sur la cible.
jon ALL=(racine) NOPASSWD : /usr/bin/find
REMARQUE : la balise NOPASSWD signifie qu’aucun mot de passe ne sera demandé pour l’authentification lors de l’exécution de la commande sudo -l.
Toujours depuis notre accès sur le server j’observe le résultat : sudo -l
sudo find /home -exec /bin/bash \;
Nickel ! ça fonctionne, j’ai déjà vu plusieurs fois ce scénario sur les CTFs donc retenez bien les amis .
Autoriser le privilège root aux programmes binaires
Il arrive souvent que l’administrateur système attribue des droits spécifiques à un utilisateur particulier pour exécuter des programmes binaires qui permettent de modifier n’importe quel fichier système tel que /etc/passwd par exemple.
Certains programmes binaires peuvent entraîner une élévation de privilèges, je vous montre :
Dans le fichier sudoers je rajoute
jon ALL= (root) NOPASSWD: /usr/bin/perl, /usr/bin/python3, /usr/bin/less, /usr/bin/man, /usr/bin/vi
- Vérification avec perl:
sudo perl -e ‘exec « /bin/bash »;’
- Vérificaton avec python3
sudo python -c ‘import pty;pty.spawn(« /bin/bash »)’
- Vérification avec less
sudo less /etc/hosts
Lorsque je tape cette commande il m’ouvre un fichier système en mode édition, je vais rajouter à la fin !bash :
Une fois que je valide avec la touche Enter je regarde le résultat :
Bingo !
- Vérification avec man
sudo man man
De la même manière que précédemment après avoir tapé la commande sudo man man un fichier s’ouvre (manuel) et je peux ajouter : !bash
Un petit check pour voir si je deviens root :
Yeah !! c’est cool je constate que c’est super puissant en fait.
- Vérification avec vi
sudo vi
je dois avouer que c’est très fréquent d’utiliser vi pour escalader les privilèges vers root, toujours pareil il suffit d’ajouter !bash (très pratique dans beaucoup de CTfs ) :
Et normalement ça doit fonctionner :
Super !
REMARQUE : les autorisations sudo pour less, nano, man, vi et man sont très dangereuses car elles permettent à l’utilisateur de modifier le fichier système et entraînent une élévation des privilèges ! soyez vigilents.
Autres types de programmes
Comme je viens de vous montrer ci-dessus, certains programmes binaires avec le droit sudo sont utiles pour obtenir un accès root. Mais en dehors de cela, d’autres applications peuvent également fournir un accès root si elles possèdent le privilège sudo, comme le FTP…, je vous mets en pratique pour mieux comprendre.
Je rajoute :
jon ALL=(ALL) NOPASSWD : /usr/bin/env, /usr/bin/ftp, /usr/bin/scp, /usr/bin/socat
Comme je vous ai parlé du FTP, je commence par celui-ci :
sudo ftp
! /bin/bash
C’est fort ! franchement c’est très puissant tout de même.
Et pour finir, je vous montre avec la commande env :
sudo env /bin/bash
Je vous laisse la curiosité d’essayer le reste des commandes pour que vous puissiez vous faire la main .
Conclusion
Ça y est les amis, c’est la fin de cet article qui suit parfaitement le précèdent sur l’escalade de privilège sur Linux. J’espère que vous aurez compris le principe, dans l’ensemble ce n’est pas compliqué.
Une maîtrise des points abordés sera un plus pour vous que se soit en CTF ou ailleurs ! après avoir fait quelques CTFs, je me suis rendu compte que pour les débutants, tout est basé sur ce que je viens de vous expliquer.
Cependant, si vous rencontrez des difficultés ou des erreurs durant la mise en pratique de cet article n’hésitez pas me contacter.
Je vous dis à très vite pour un prochain article (je vous prépare la suite de l’escalade des privilèges).
PEACE !
Cet article Escalade des privilèges Linux avec le fichier sudoers est apparu en premier sur HackinGeeK.