Extraire et casser les hachages d'un fichier Shadow Linux

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez le processus fondamental d'audit de la sécurité des mots de passe sous Linux. Vous explorerez comment Linux stocke les informations de mot de passe utilisateur, extrairez ces informations, puis tenterez de casser les mots de passe à l'aide d'une attaque par dictionnaire. Ce processus est essentiel pour les testeurs d'intrusion et les administrateurs système afin d'identifier et de corriger les mots de passe faibles au sein d'un système.

Vous travaillerez avec deux fichiers critiques : /etc/passwd, qui stocke les informations de compte utilisateur, et /etc/shadow, qui stocke de manière sécurisée les mots de passe hachés. Vous utiliserez des outils standard en ligne de commande sous Linux et des logiciels spécialisés tels que unshadow (de la suite John the Ripper) et Hashcat pour effectuer le processus de cassage.

À la fin de ce laboratoire, vous aurez une expérience pratique de :

  • Comprendre le format du fichier /etc/shadow.
  • Combiner les données utilisateur et mot de passe dans un format exploitable pour le cassage.
  • Identifier les types de hachage de mots de passe.
  • Utiliser Hashcat pour effectuer une attaque par dictionnaire.

Comprendre le format du fichier /etc/shadow

Dans cette étape, vous allez examiner le fichier /etc/shadow. Ce fichier stocke les hachages de mots de passe réels des utilisateurs sur un système Linux et n'est lisible que par l'utilisateur root pour des raisons de sécurité. Comprendre sa structure est la première étape pour extraire les hachages.

Tout d'abord, utilisez sudo pour obtenir les privilèges nécessaires afin de visualiser le contenu du fichier /etc/shadow.

sudo cat /etc/shadow

Vous verrez une sortie contenant plusieurs lignes, chacune correspondant à un compte utilisateur. Examinons l'entrée pour l'testuser que nous avons créé. Elle ressemblera à ceci (le sel et le hachage seront différents) :

root:*:19327:0:99999:7:::
daemon:*:19327:0:99999:7:::
...
testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:19422:0:99999:7:::

Chaque ligne est une série de champs séparés par des deux-points. Pour ce laboratoire, nous nous intéressons aux deux premiers :

  1. Nom d'utilisateur : testuser
  2. Mot de passe haché : $6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1

Les signes dollar ($) dans le champ de hachage sont importants. Le nombre entre les deux premiers caractères $ indique l'algorithme de hachage. Dans ce cas, $6$ signifie que le mot de passe a été haché en utilisant l'algorithme sha512crypt.

Utiliser l'outil unshadow pour combiner les fichiers passwd et shadow

Dans cette étape, vous utiliserez l'utilitaire unshadow pour créer un fichier unique adapté aux outils de cassage de mots de passe comme Hashcat. Les outils de cassage ont besoin à la fois du nom d'utilisateur de /etc/passwd et du hachage de /etc/shadow dans un format spécifique. L'outil unshadow, qui fait partie de la suite John the Ripper, automatise ce processus de combinaison.

Vous allez maintenant exécuter unshadow, en fournissant /etc/passwd et /etc/shadow en entrée, et rediriger la sortie vers un nouveau fichier nommé hashes.txt dans votre répertoire ~/project.

Exécutez la commande suivante dans votre terminal :

sudo unshadow /etc/passwd /etc/shadow > ~/project/hashes.txt

Cette commande lit les deux fichiers système, fusionne les informations pertinentes et les enregistre dans ~/project/hashes.txt.

Maintenant, visualisons le contenu du fichier nouvellement créé pour voir le résultat.

cat ~/project/hashes.txt

La sortie affichera une liste d'utilisateurs et leurs hachages correspondants dans le format attendu par les outils de cassage. La ligne pour testuser ressemblera à ceci :

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:1001:1001::/home/testuser:/bin/bash

Ce fichier est maintenant prêt à être utilisé avec Hashcat.

Identifier le type de hachage (par exemple, sha512crypt)

Dans cette étape, vous allez confirmer le type de hachage utilisé pour les mots de passe des utilisateurs. C'est une étape cruciale car vous devez indiquer à Hashcat exactement quel algorithme de hachage utiliser pour la tentative de cassage. Un algorithme incorrect échouera toujours.

Comme nous l'avons observé à l'étape 1, le format de la chaîne de hachage elle-même révèle l'algorithme. Examinons à nouveau le fichier hashes.txt.

cat ~/project/hashes.txt

Concentrez-vous sur la chaîne de hachage pour testuser :

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:...

Le hachage commence par $6$. C'est un identifiant standard pour un type de hachage spécifique. Voici une référence rapide pour les identifiants de hachage Linux courants :

  • $1$ = md5crypt (MD5)
  • $2a$ ou $2y$ = bcrypt (Blowfish)
  • $5$ = sha256crypt (SHA-256)
  • $6$ = sha512crypt (SHA-512)

Sur la base du préfixe $6$, nous pouvons identifier avec confiance le type de hachage comme étant sha512crypt. C'est l'information dont nous aurons besoin pour la prochaine étape.

Sélectionner le mode Hashcat correspondant

Dans cette étape, vous allez trouver le numéro de mode correct que Hashcat utilise pour identifier l'algorithme sha512crypt. Hashcat prend en charge des centaines de types de hachage différents, et chacun se voit attribuer un numéro de mode unique.

Pour trouver le mode pour sha512crypt, vous pouvez parcourir les informations d'aide de Hashcat en utilisant grep. C'est un moyen efficace de trouver le mode spécifique dont vous avez besoin sans lire l'intégralité du menu d'aide.

Exécutez la commande suivante pour rechercher sha512crypt :

hashcat --help | grep -i sha512crypt

L'indicateur -i dans grep rend la recherche insensible à la casse, ce qui est une bonne pratique. La sortie vous montrera la ligne correspondante du menu d'aide :

...
1800 | sha512crypt, SHA512(Unix)                  | Operating System
...

D'après cette sortie, vous pouvez voir que le numéro de mode pour sha512crypt est 1800. Vous utiliserez ce numéro de mode dans la dernière étape pour indiquer à Hashcat comment interpréter les hachages dans votre fichier hashes.txt.

Lancer une attaque par dictionnaire sur les hachages Linux

Dans cette dernière étape, vous allez lancer une attaque par dictionnaire contre les hachages capturés à l'aide de Hashcat. Une attaque par dictionnaire fonctionne en prenant une liste de mots de passe potentiels (un "dictionnaire" ou une "wordlist"), en hachant chacun d'eux en utilisant le même algorithme que le hachage cible, et en comparant les résultats. Si une correspondance est trouvée, le mot de passe a été cassé.

Vous utiliserez la wordlist rockyou.txt qui a été téléchargée dans votre répertoire ~/project lors de la configuration du laboratoire. C'est une wordlist très courante utilisée pour l'audit de mots de passe.

Maintenant, construisez la commande Hashcat complète avec toutes les informations que vous avez recueillies :

  • Mode (-m) : 1800 pour sha512crypt.
  • Fichier de hachage : ~/project/hashes.txt.
  • Wordlist : ~/project/rockyou.txt.
  • Option (--force) : Ceci est ajouté pour éviter d'éventuelles erreurs lors de l'exécution de Hashcat dans un environnement virtualisé ou avec certains pilotes.

Exécutez la commande pour démarrer l'attaque :

hashcat -m 1800 --force ~/project/hashes.txt ~/project/rockyou.txt

Hashcat s'initialisera et commencera la session de cassage. Comme le mot de passe password123 se trouve dans la liste rockyou.txt, le processus devrait être très rapide.

...
Session..........: hashcat
Status...........: Running
Hash.Name........: sha512crypt, SHA512(Unix)
Hash.Target......: testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn...
...
Approaching final keyspace - workload adjusted.

Session..........: hashcat
Status...........: Cracked
...

Une fois que Hashcat affiche le statut Cracked (Cassé) ou Exhausted (Épuisé), l'attaque est terminée. Pour afficher le mot de passe cassé, vous pouvez utiliser l'option --show avec la même commande.

hashcat -m 1800 --force ~/project/hashes.txt --show

La sortie affichera clairement le hachage cassé ainsi que son mot de passe en clair correspondant.

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:password123

Vous avez réussi à casser le mot de passe de testuser !

Résumé

Félicitations pour avoir terminé ce laboratoire ! Vous avez réussi à effectuer un flux de travail classique d'audit de mots de passe sur un système Linux.

Dans ce laboratoire, vous avez appris à :

  • Lire et comprendre la structure du fichier /etc/shadow, qui stocke les hachages de mots de passe des utilisateurs.
  • Utiliser l'outil unshadow pour combiner les données utilisateur et de hachage de /etc/passwd et /etc/shadow en un seul fichier.
  • Identifier l'algorithme de hachage de mot de passe (sha512crypt) en inspectant le format du hachage.
  • Trouver le mode correspondant (1800) dans Hashcat pour le type de hachage identifié.
  • Lancer une attaque par dictionnaire à l'aide de Hashcat, d'une wordlist puissante et des hachages extraits.
  • Afficher le mot de passe cassé avec succès.

Cet exercice démontre l'importance d'utiliser des mots de passe forts, complexes et uniques qui ne se trouvent pas dans les wordlists courantes. Les administrateurs système peuvent utiliser ces mêmes techniques pour trouver et corriger de manière proactive les mots de passe faibles dans leurs environnements.