What’s up les amis ?
Introduction
Me revoilà pour un nouvel article différent des précédents qui étaient axés sur les CTFs.
Je vais vous montrer diverses méthodes pour modifier le fichier etc/passwd afin de créer ou de modifier un utilisateur pour les privilèges root ».
Il est impératif de savoir comment modifier l’utilisateur propre pour élever les privilèges sur sa machine. Tout se passe dans le fichier /etc/passwd.
Petit rappel : N’hésitez pas lire l’article sur les droits et permissions sur Linux sur mon blog
Tout d’abord, je dois connaître le fichier /etc/passwd en détail avant. En fait dans le répertoire /etc, il y a les trois fichiers les plus importants à connaître : passwd , group et shadow.
etc/passwd : c’est le fichier texte lisible par l’homme qui stocke les informations du compte utilisateur.
etc/group : Il s’agit également d’un fichier texte lisible par l’homme qui stocke les informations de groupe ainsi que l’utilisateur auquel appartient le groupe qui peut être identifié via ce fichier.
etc/shadow : est un fichier qui contient un mot de passe crypté.
Ajout d’un utilisateur depuis un terminal
Je commence par ouvrir le fichier /etc/passwd avec la commande cat /etc/passwd :
Alors, je vous invite à bien regarder la structure du contenu. Il y a plusieurs choses à comprendre, et je vous décortique tout ça :
kali:x:1000:1000:kali,,,:/home/kali:/usr/bin/zsh
Le premier champ indique le nom de l’utilisateur qui est utilisé pour se connecter, dans mon cas c’est kali.
Le X indique le mot de passe crypté qui est en fait stocké dans le fichier /shadow. Si l’utilisateur n’a pas de mot de passe, le champ du mot de passe aura un * ( astérisque ).
Juste après viens l’ID utilisateur appelé UID : Chaque utilisateur doit se voir attribuer un ID utilisateur. L’UID 0 (zéro) est conservé pour l’utilisateur root et les UID 1-99 sont conservés pour d’autres comptes prédéfinis.
L’UID 100-999 est conservé par le système à des fins administratives. L’ UID 1000 est presque toujours le premier utilisateur non-système, généralement un administrateur. Si je crée un nouvel utilisateur sur mon système (Parrot OS), il aura alors l’UID 1001.
Toujours après l’UID il y a le Group Id (GID) : il désigne le groupe de chaque utilisateur. Il fonctionne de la même manière que l’UID mais là c’est pour un groupe. Le GID de 0 se rapporte au groupe racine et le GID de 1000 signifie généralement les utilisateurs.
Champ Gecos : Habituellement, il s’agit d’un ensemble de valeurs séparées par des virgules qui donne plus de détails sur les utilisateurs. Le format du champ GECOS indique les informations suivantes :
- Nom complet de l’utilisateur
- Numéro de bâtiment et de chambre ou personne de contact
- Numéro de téléphone du bureau
- Numéro de téléphone à domicile
- Toute autre information de contact
/home/directory : Indique le chemin du répertoire d’accueil de l’utilisateur, où tous ses fichiers et programmes sont stockés. S’il n’y a pas de répertoire spécifié, alors / devient le répertoire de l’utilisateur. Je vous déconseille de garder / comme répertoire qui est la racine du système.
Shell : il indique le chemin complet du shell par défaut qui exécute la commande (par l’utilisateur) et affiche les résultats.
Voilà ! maintenant que j’ai compris le fonctionnement, je vais passer à la création et manipulation d’un nouvel utilisateur. Pour cela je vais utiliser la commande adduser :
adduser exemple1
Je viens de créer un nouvel utilisateur exemple1, si je regarde de plus près :
UID = 1001
GID = 1002
Répertoire personnel = /home/exemple1
J’effectue une petite vérification en réouvrant le fichier /etc/passwd :
Super ! ça a fonctionné, je peux également lister le contenu du répertoire /home pour voir les utilisateurs : ls /home
Ajout d’un utilisateur depuis le fichier /etc/passwd
Maintenant que je sais ajouter un nouvel utilisateur depuis le terminal, je vais réaliser la même tâche directement depuis le fichier contenant les utilisateurs.
Normalement, un utilisateur Lambda dispose d’une autorisation en lecture seule pour le fichier passwd, mais il est parfois également possible qu’un utilisateur dispose d’une autorisation de lecture/écriture. Alors si c’est le cas, je peux ajouter manuellement un utilisateur dans le fichier /etc/passwd.
J’utilise nano pour modifier le fichier :
nano /etc/passwd
puis je rajoute :
exemple2:*:1002:1003:,,,:/home/exemple2:/bin/bash
le signe * indique que le user exemple2 n’a pas de mot de passe.
Voilà ! c’est fait.
Puisque j’ai alloué 1003 GID pour exemple2, je dois également l’adresser dans le fichier /etc/group.
exemple2 :* :1003 :
C’est fait 😉, je vais définir un mot de passe pour cet utilisateur : passwd exemple2
Vu que j’ai créé un nouvel utilisateur manuellement sans utiliser la commande adduser, je ne vais pas trouver de nouvelle entrée dans le fichier /etc/shadow. Mais c’est dans le fichier /etc/passwd que je vais voir une différence :
cat /etc/passwd :
Ici le signe * a été remplacé par la valeur du mot de passe crypté. De cette façon, je peux créer un utilisateur pour l’élévation des privilèges.
Utilisation d’OpenSSL
Il arrive que je ne puisse pas exécuter la commande passwd pour définir le mot de passe d’un utilisateur, alors j’utilise OpenSSL qui générera un mot de passe crypté avec du sel.
OpenSSL passwd calculera le hachage du mot de passe donné à l’aide de la chaîne de sel et de l’algorithme de mot de passe BSD basé sur MD5.
Je m’explique avec la pratique :
openssl passwd -1 -salt exemple3 test123
J’ai obtenu le mot de passe crypté, maintenant je vais ajouter manuellement dans le fichier /etc/passwd l’utilisateur exemple3 en lui donnant les paramètres du super utilisateur root ( GID=0, UID0 et /root/root come chemin) : nano /etc/passwd
Je vérifie en me connectant en tant qu’exemple3 :
su exemple3
whoami
id
Super, je suis root ça fonctionne !
Utilisation de mkpasswd
mkpasswd est similaire à OpenSSL passwd qui générera un hachage de la chaîne de mot de passe donnée. Je regarde de plus près :
Il m’a généré un hachage de chaîne de mot de passe. Je remplace : X : par la valeur de hachage pour exemple1 :
Voilà, maintenant je vérifie si ça fonctionne :
su exemple1
whoami
id
Nickel ! c’est opérationnel 😉
Utilisation de Python
Avec Python, je peux importer une bibliothèque de cryptage et ajouter du sel à mon mot de passe, ce qui créera un mot de passe crypté comprenant cette valeur de sel.
python -c ‘import crypt; print crypt.crypt(« pass », « $6$salt »)’
Il m’a généré un hachage de chaîne de mot de passe. Je remplace l’ancienne valeur compris entre les : : pour l’utilisateur exemple2 par la valeur de hachage :
Je change d’utilisateur pour vérifier si ça marche :
su exemple2
whoami
id
Et voilà le travail ! c’est ok aussi avec Python 😉
NB : Vous pouvez aussi utiliser Perl et PHP pour générer un hachage et essayer pour voir si ça fonctionne.
Conclusion
C’est la fin de cette article, j’espère que vous avez bien compris le principe et que vous avez réussi de votre côté aussi.
Il faut bien garder en tête qu’il existe de nombreuses façons d’ajouter vos propres utilisateurs avec un accès root, ce qui est très utile pour obtenir le privilège root sur n’importe quelle machine.
Parfois il faut mettre en pratique, se tromper… pour bien comprendre donc n’hésitez pas à essayer d’autres méthodes et des noms d’utilisateurs différents.
Si parfois, certains d’entre vous ont du mal, contactez-moi afin que je puisse vous guider et expliquer avec une autre méthode.
Je vous dis à très vite dans un prochain article.
Portez-vous bien, PEACE !
No responses yet