Introduction
Dans ce laboratoire, vous allez explorer une fonctionnalité avancée de Hashcat : les jeux de caractères personnalisés dans les attaques par masque. Bien que les jeux de caractères intégrés de Hashcat (?l, ?u, ?d, ?s) soient puissants, ils peuvent être inefficaces si vous avez des informations spécifiques sur les caractères utilisés dans un mot de passe. Par exemple, si vous savez qu'un mot de passe ne contient que les caractères 'a', 'b', 'c', '1', '2', '3', l'utilisation des jeux de caractères standard ?l et ?d testerait de nombreux caractères inutiles.
Les jeux de caractères personnalisés vous permettent de définir un ensemble précis de caractères, réduisant considérablement l'espace de recherche et accélérant le processus de craquage. Vous apprendrez à définir un jeu de caractères personnalisé, à créer un masque qui l'utilise et à exécuter une attaque ciblée pour craquer un hash de mot de passe qui suit un modèle unique.
Comprendre les limitations des jeux de caractères intégrés
Dans cette étape, vous apprendrez les jeux de caractères intégrés de Hashcat et pourquoi ils ne sont pas toujours l'outil le plus efficace pour la tâche.
Hashcat utilise des espaces réservés, appelés jeux de caractères (charsets), pour représenter différents types de caractères dans une attaque par masque :
?l= abcdefghijklmnopqrstuvwxyz?u= ABCDEFGHIJKLMNOPQRSTUVWXYZ?d= 0123456789?s= !"#$%&'()*+,-./:;<=>?@[]^_`{|}~?a= Tous les caractères ci-dessus combinés
Ceux-ci sont utiles pour les cas généraux, mais si nous savons que le mot de passe est composé d'un ensemble de caractères très spécifique et limité, l'utilisation de ces jeux de caractères larges est inefficace.
Tout d'abord, inspectons le hash cible que nous devons craquer. Le script de configuration a déjà créé un fichier nommé hash.txt dans votre répertoire actuel (~/project).
Visualisez son contenu :
cat hash.txt
Vous devriez voir le hash MD5 suivant :
2a5c3a657a73613391a8e58f1a43161e
Ce hash correspond à un mot de passe de 8 caractères composé uniquement des caractères l, a, b, e, x, 1, 2, 3. Si nous utilisions les jeux de caractères intégrés ?l et ?d, Hashcat perdrait du temps à essayer toutes les 26 lettres minuscules et les 10 chiffres, au lieu des 8 caractères connus. Dans l'étape suivante, nous allons créer un jeu de caractères personnalisé pour résoudre ce problème.
Définir un jeu de caractères personnalisé avec --custom-charset1
Dans cette étape, vous allez définir un jeu de caractères personnalisé qui correspond précisément aux caractères connus pour être dans le mot de passe.
Hashcat vous permet de définir jusqu'à quatre jeux de caractères personnalisés en utilisant les options de ligne de commande --custom-charset1, --custom-charset2, --custom-charset3 et --custom-charset4.
Pour notre scénario, on sait que le mot de passe ne contient que des caractères de l'ensemble labex123. Nous pouvons définir cela comme notre premier jeu de caractères personnalisé.
Construisons une commande pour voir comment cela fonctionne. Nous utiliserons l'option --stdout pour afficher les candidats de mots de passe générés à l'écran au lieu d'effectuer une véritable attaque. Nous utiliserons également head pour ne voir que les premiers résultats.
Exécutez la commande suivante pour générer des mots de passe de 3 caractères en utilisant notre jeu de caractères personnalisé :
hashcat --stdout -a 3 --custom-charset1 labex123 ?1?1?1 | head -n 5
Décomposons cette commande :
--stdout: Affiche les candidats générés dans la console.-a 3: Spécifie une attaque par masque.--custom-charset1 labex123: Définit?1comme notre ensemble personnalisé de caractères.?1?1?1: Le masque, qui indique à Hashcat de générer des candidats de 3 caractères où chaque caractère provient de l'ensemble défini dans?1.
Vous verrez une sortie similaire à celle-ci, montrant que seuls les caractères que nous avons spécifiés sont utilisés :
lll
lla
llb
lle
llx
Vous comprenez maintenant comment définir un jeu de caractères personnalisé pour une attaque ciblée.
Créer un masque qui utilise le jeu de caractères personnalisé ?1
Dans cette étape, vous allez construire un masque qui utilise le jeu de caractères personnalisé que vous avez défini à l'étape précédente.
Les jeux de caractères personnalisés sont référencés dans un masque à l'aide des espaces réservés ?1, ?2, ?3 et ?4, correspondant à l'option --custom-charset<N> utilisée. Puisque nous avons utilisé --custom-charset1, nous utiliserons ?1 dans notre masque.
Nous savons que notre mot de passe cible a 8 caractères, et que chaque caractère provient de notre ensemble personnalisé. Par conséquent, le masque correct est ?1 répété huit fois.
Pour plus de clarté et de réutilisabilité, il est de bonne pratique de sauvegarder votre masque dans un fichier. Créons un fichier nommé mask.txt et y plaçons notre masque.
Exécutez la commande suivante pour créer le fichier :
echo "?1?1?1?1?1?1?1?1" > mask.txt
Maintenant, vérifiez le contenu du fichier pour vous assurer qu'il est correct :
cat mask.txt
La sortie devrait être exactement ce que vous avez saisi :
?1?1?1?1?1?1?1?1
Avec le fichier de masque prêt, vous êtes maintenant préparé à lancer l'attaque.
Exécuter une attaque par masque avec le jeu de caractères personnalisé
Vous allez maintenant combiner tous les éléments pour lancer l'attaque par masque en utilisant votre jeu de caractères personnalisé et votre fichier de masque.
Vous avez le hash dans hash.txt, le jeu de caractères personnalisé défini, et le masque dans mask.txt. Assemblons la commande Hashcat finale.
Exécutez la commande suivante dans votre terminal pour démarrer l'attaque :
hashcat -m 0 -a 3 hash.txt --custom-charset1 labex123 mask.txt
Voici une description détaillée de la commande complète :
-m 0: Spécifie que le type de hash est MD5.-a 3: Sélectionne le mode d'attaque par masque.hash.txt: Le fichier d'entrée contenant notre hash cible.--custom-charset1 labex123: Définit notre jeu de caractères personnalisé?1.mask.txt: Le fichier contenant le masque?1?1?1?1?1?1?1?1.
Hashcat va démarrer l'attaque. Comme notre jeu de caractères personnalisé est très spécifique, l'espace des clés est réduit, et l'attaque devrait se terminer très rapidement. Vous verrez une sortie indiquant la progression, et finalement, un statut Cracked.
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2a5c3a657a73613391a8e58f1a43161e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: Custom Charset 1: 'labex123', len=8
Speed.#1.........: ... H/s (0.00ms) @ Accel:1 Loops:1 Thr:1 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 16777216/16777216 (100.00%)
Rejected.........: 0/16777216 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex123 -> labex123
Hardware.Mon.#1..: Util: 0%
Started: ...
Stopped: ...
L'attaque est terminée et réussie. Dans la prochaine étape, vous vérifierez le mot de passe déchiffré.
Vérifier que le mot de passe déchiffré correspond au modèle personnalisé
Dans cette dernière étape, vous allez afficher le mot de passe déchiffré et confirmer qu'il correspond au modèle attendu.
Hashcat enregistre automatiquement les mots de passe déchiffrés avec succès dans un fichier appelé "potfile" (car il "met en pot" le hash et le mot de passe). Cela évite de devoir déchiffrer le même hash à l'avenir. La manière la plus simple de voir le mot de passe déchiffré pour un fichier de hash donné est d'utiliser l'option --show.
Exécutez la commande suivante pour afficher le mot de passe déchiffré pour le hash dans hash.txt :
hashcat -m 0 --show hash.txt
Cette commande demande à Hashcat de rechercher le hash de hash.txt dans son potfile et d'afficher le mot de passe en clair correspondant.
La sortie sera claire et simple :
2a5c3a657a73613391a8e58f1a43161e:labex123
Comme vous pouvez le constater, le mot de passe déchiffré est labex123. Notez qu'il a 8 caractères et ne contient que des caractères de l'ensemble personnalisé labex123 que vous avez défini. Cela confirme que votre attaque par masque ciblée a été réussie et très efficace.
Résumé
Dans ce laboratoire, vous avez appris une technique de déchiffrement de mots de passe puissante et efficace en utilisant Hashcat.
Vous avez commencé par comprendre les limitations des jeux de caractères intégrés de Hashcat pour les mots de passe avec des ensembles de caractères spécifiques et connus. Vous avez ensuite appris à définir votre propre jeu de caractères en utilisant l'option --custom-charset1 et à le référencer dans un masque avec ?1. En créant un fichier de masque et en lançant une attaque ciblée, vous avez pu déchiffrer un hash MD5 en quelques secondes.
Cette méthode d'utilisation de jeux de caractères personnalisés est essentielle pour une audit et une récupération de mots de passe efficaces lorsque vous disposez d'informations sur la structure du mot de passe, réduisant considérablement le temps et les ressources informatiques nécessaires pour une attaque.


