Dépannage des problèmes courants de John the Ripper

Kali LinuxBeginner
Pratiquer maintenant

Introduction

John the Ripper (JtR) est un outil open-source puissant et largement utilisé pour le cassage de mots de passe. Bien qu'il soit incroyablement efficace, les utilisateurs, en particulier les débutants, peuvent rencontrer des problèmes courants qui freinent leur progression. Ces problèmes peuvent aller de messages d'erreur cryptiques à des ralentissements de performance.

Dans ce laboratoire, vous apprendrez à dépanner certains des problèmes les plus fréquents rencontrés lors de l'utilisation de John the Ripper. Nous aborderons des erreurs telles que "No hashes loaded" (Aucun hash chargé), traiterons les formats de hash invalides, résoudrons les goulots d'étranglement de performance, gérerons les fichiers de session corrompus et apprendrons où trouver de l'aide lorsque vous êtes bloqué. À la fin de ce laboratoire, vous serez mieux équipé pour diagnostiquer et résoudre efficacement les problèmes de JtR.

Résoudre l'erreur "No hashes loaded"

Dans cette étape, nous allons examiner l'une des erreurs les plus courantes dans John the Ripper : No password hashes loaded (Aucun hash de mot de passe chargé). Cette erreur se produit généralement pour deux raisons principales : John a déjà cassé tous les hashes du fichier fourni, ou le fichier n'est pas dans un format que John peut comprendre.

Tout d'abord, exécutons John sur un fichier de hash valide. Le script d'installation a déjà créé un fichier nommé shadow.txt dans votre répertoire actuel (~/project) qui contient le hash du mot de passe d'un utilisateur dans un format que John reconnaît.

Essayons de le casser en utilisant une simple liste de mots.

john --wordlist=pass.list shadow.txt

Vous devriez voir une sortie indiquant que John a chargé un hash et tente de le casser. Il devrait trouver le mot de passe rapidement.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (dummyuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Maintenant que le mot de passe a été cassé, John le stocke dans un fichier appelé john.pot. Essayons d'exécuter exactement la même commande à nouveau.

john --wordlist=pass.list shadow.txt

Cette fois, vous verrez l'erreur.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

C'est parce que John vérifie le fichier john.pot avant de commencer et ignore tous les hashes qui ont déjà été cassés. Vous pouvez afficher le contenu du fichier john.pot pour confirmer.

cat ~/.john/john.pot

La sortie affichera le hash et le mot de passe cassé.

$1$notarealhash$b5gQ1P2kPiyP2t.OqI0kS1:password123

Une autre raison de cette erreur est un format de fichier invalide. Créons un fichier qui ne contient aucun hash.

echo "this is just a text file" > plain.txt

Maintenant, essayons d'exécuter John dessus.

john plain.txt

Vous verrez la même erreur "No password hashes loaded" car John n'a trouvé aucune donnée dans le fichier qui ressemblait à un hash de mot de passe. Assurez-vous toujours que votre fichier cible contient des hashes dans un format pris en charge.

Débogage de l'erreur "Invalid hash type"

Dans cette étape, nous allons aborder les problèmes liés aux types de hash. Parfois, John ne parvient pas à détecter automatiquement le type de hash, ou un utilisateur peut spécifier le mauvais en utilisant l'indicateur --format, ce qui entraîne des erreurs ou des tentatives de cassage échouées.

Tout d'abord, voyons ce qui se passe lorsque John rencontre un fichier avec une chaîne de hash malformée. Nous avons un fichier nommé invalid_hashes.txt à cet effet.

john invalid_hashes.txt

John analysera le fichier et signalera qu'il n'a pu charger aucun hash valide, similaire à l'erreur de l'étape précédente.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

Maintenant, utilisons un fichier avec un hash valide mais spécifions le mauvais format. Notre fichier hashes_md5.txt contient un hash raw-MD5 standard, mais nous dirons à John qu'il s'agit d'un hash NT.

john --wordlist=pass.list --format=nt hashes_md5.txt

John produira un avertissement ou une erreur car les données du hash ne correspondent pas au format spécifié.

Warning: invalid ciphertext ignored: user1:5d41402abc4b2a76b9719d911017c592
No password hashes loaded (see FAQ)

Pour corriger cela, vous devez fournir le bon format de hash. Si vous connaissez le format comme étant raw-MD5, vous pouvez le spécifier directement. C'est souvent plus rapide que de laisser John le détecter automatiquement.

Exécutons la commande avec le bon format.

john --wordlist=pass.list --format=raw-md5 hashes_md5.txt

Cette fois, la commande réussit et casse le mot de passe.

Using default input encoding: UTF-8
Loaded 1 password hash (raw-MD5 [MD5 128/128 SSE2-16])
Cost 1 (iteration count) is 1 for all loaded hashes
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (user1)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 1234Kp/s 1234Kc/s 1234KC/s 123..labex
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Si vous n'êtes pas sûr du type de hash, vous pouvez omettre l'indicateur --format et laisser John essayer de le détecter automatiquement. Cependant, pour les hashes ambigus ou non standard, spécifier le format est le meilleur moyen d'assurer le succès.

Adresser les goulots d'étranglement de performance

Dans cette étape, nous allons explorer comment identifier et résoudre les problèmes de performance. Le cassage de mots de passe peut être une tâche très gourmande en ressources, et une performance lente peut la rendre impraticable.

Une métrique clé pour la performance dans John the Ripper est le "nombre de candidats par seconde" (c/s). Vous pouvez exécuter un benchmark pour voir comment votre système se comporte avec différents algorithmes de hachage.

john --test

Cette commande exécutera une série de benchmarks. Regardez la sortie pour les taux de c/s pour divers algorithmes.

Benchmarking: descrypt, traditional crypt(3) [DES 128/128 SSE2-16]... DONE
Many salts:	1234K c/s real, 1234K c/s virtual
Only one salt:	1111K c/s real, 1111K c/s virtual

... (beaucoup d'autres algorithmes) ...

Benchmarking: raw-MD5 [MD5 128/128 SSE2-16]... DONE
Raw:	45678K c/s real, 45678K c/s virtual

L'un des moyens les plus efficaces d'améliorer les performances sur un système multi-cœurs est d'utiliser le traitement parallèle. John peut le faire avec l'option --fork=N, où N est le nombre de processus à lancer.

Avant de tester cela, supprimons le fichier john.pot afin de pouvoir recasser le hash de l'étape 1.

rm ~/.john/john.pot

Maintenant, exécutons une session de cassage sur un seul cœur sur shadow.txt. Pendant qu'elle s'exécute, appuyez sur n'importe quelle touche (comme Entrée) pour voir le statut. Notez le taux de c/s.

john --wordlist=pass.list shadow.txt

Après un moment, appuyez sur Entrée. Vous verrez une ligne de statut. Appuyez ensuite sur Ctrl+C pour l'arrêter.

Essayons maintenant à nouveau avec deux processus parallèles.

john --fork=2 --wordlist=pass.list shadow.txt

Cette fois, John utilisera deux cœurs de processeur pour effectuer la tâche. Si vous vérifiez le statut, le taux global de c/s devrait être significativement plus élevé, près du double du taux sur un seul cœur. Cela peut réduire considérablement le temps requis pour une session de cassage.

Autres conseils de performance :

  • Utiliser des listes de mots ciblées : Une liste de mots plus petite et plus pertinente est plus rapide qu'une liste massive et générique.
  • Spécifier le format : Comme vu à l'étape 2, l'utilisation de --format évite la surcharge de la détection automatique.

Gérer les fichiers de session corrompus

Dans cette étape, nous allons apprendre à gérer un fichier de session corrompu. John the Ripper sauvegarde automatiquement sa progression dans un fichier de session (avec une extension .rec) situé dans le répertoire ~/.john/. Cela vous permet de mettre en pause et de reprendre les sessions de cassage de longue durée. Cependant, si ce fichier devient corrompu, vous ne pourrez pas restaurer votre session.

Commençons une nouvelle session. Nous l'appellerons my_session.

john --session=my_session --wordlist=pass.list corrupt_me.txt

Laissez la commande s'exécuter pendant quelques secondes, puis appuyez sur Ctrl+C pour l'arrêter proprement. John sauvegardera sa progression.

Session aborted

Vous pouvez voir le fichier de session qui a été créé.

ls ~/.john/
john.log  john.pot  my_session.rec

Maintenant, simulons un fichier corrompu en y ajoutant des données indésirables.

echo "THIS IS CORRUPTED DATA" >> ~/.john/my_session.rec

Le fichier de session étant corrompu, essayons de reprendre notre travail.

john --restore=my_session

John ne parviendra pas à analyser le fichier de récupération et se terminera probablement avec un message d'erreur. L'erreur exacte peut varier, mais elle indiquera un problème avec le fichier .rec.

Error in recovery file: ~/.john/my_session.rec

Lorsque cela se produit, la seule solution est de supprimer le fichier de session corrompu. Cela signifie que vous perdrez la progression de cette session spécifique et devrez recommencer. Cependant, tous les mots de passe qui ont déjà été cassés avec succès sont en sécurité dans le fichier john.pot.

Supprimons le fichier défectueux.

rm ~/.john/my_session.rec

Vous pouvez maintenant redémarrer la session depuis le début. C'est une étape de dépannage cruciale pour récupérer des plantages inattendus ou des arrêts système pendant une tentative de cassage.

Chercher de l'aide auprès de la communauté John the Ripper

Dans cette étape, nous allons couvrir ce qu'il faut faire lorsque vous avez tout essayé et que vous êtes toujours bloqué. La communauté John the Ripper est une excellente ressource, mais pour obtenir une aide efficace, vous devez fournir les bonnes informations.

Le principal lieu de support communautaire est la liste de diffusion john-users. Avant de poster, il est de bonne pratique de rechercher dans les archives pour voir si votre question a déjà reçu une réponse.

Lorsque vous avez besoin de demander de l'aide, fournir des informations claires et complètes est essentiel. Voici ce que vous devriez toujours inclure dans votre demande :

  1. Version de John the Ripper : Les différentes versions ont des fonctionnalités et des bugs différents.
  2. La Commande Exacte : La commande complète que vous avez utilisée pour exécuter John.
  3. La Sortie Complète : Toute la sortie de la commande, y compris les messages d'erreur.
  4. Système d'Exploitation : Le système d'exploitation que vous utilisez (par exemple, Ubuntu 22.04, Windows 10).
  5. Exemple de Hash : Un exemple du hash que vous essayez de casser (s'il n'est pas sensible).

Vous pouvez obtenir votre version de John the Ripper avec l'indicateur --version. Exécutons-le maintenant.

john --version

La sortie ressemblera à ceci :

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]

Savoir comment recueillir ces informations facilitera grandement la compréhension de votre problème par les membres de la communauté et leur permettra de vous fournir une solution utile. N'oubliez pas d'être poli et patient lorsque vous demandez de l'aide aux communautés open-source.

Résumé

Dans ce laboratoire, vous avez acquis une expérience pratique du dépannage de certains des problèmes les plus courants avec John the Ripper.

Vous avez appris à :

  • Diagnostiquer l'erreur No hashes loaded en vérifiant le fichier john.pot pour les mots de passe déjà cassés et en vérifiant le format du fichier d'entrée.
  • Résoudre les problèmes de type de hash en utilisant l'indicateur --format pour spécifier le bon algorithme.
  • Résoudre les goulots d'étranglement de performance en exécutant des benchmarks et en utilisant l'option --fork pour le traitement parallèle.
  • Récupérer d'une tentative de cassage échouée en supprimant un fichier de session corrompu (.rec).
  • Rassembler les informations nécessaires, telles que la version de JtR et la sortie de la commande, pour demander efficacement de l'aide à la communauté.

Avec ces compétences, vous êtes maintenant mieux préparé à utiliser John the Ripper plus efficacement et à résoudre les problèmes au fur et à mesure qu'ils se présentent.