Introduction
Dans ce laboratoire, vous explorerez les capacités avancées de John the Ripper, en vous concentrant spécifiquement sur la manière d'exploiter les jeux de caractères personnalisés. John the Ripper est un puissant outil open-source de cassage de mots de passe. Bien qu'il soit livré avec des jeux de caractères prédéfinis, la définition des vôtres peut améliorer considérablement l'efficacité du cassage, en particulier lorsqu'il s'agit de politiques de mots de passe spécifiques ou de caractères non standard. Vous apprendrez à créer, appliquer et optimiser ces jeux personnalisés pour divers scénarios, acquérant ainsi une compréhension plus approfondie de leur impact sur le processus de cassage.
Définir un jeu de caractères personnalisé pour le mode incrémental
Dans cette étape, vous apprendrez à définir un jeu de caractères personnalisé pour le mode incrémental de John the Ripper. Le mode incrémental est une méthode de cassage puissante qui essaie toutes les combinaisons de caractères possibles jusqu'à une certaine longueur. Par défaut, John utilise un jeu de caractères large, ce qui peut être inefficace si vous savez que le mot de passe utilise un ensemble limité de caractères (par exemple, uniquement des lettres minuscules et des chiffres).
Tout d'abord, créons un hachage de mot de passe simple que nous essaierons de casser en utilisant un jeu de caractères personnalisé. Nous allons créer un hachage pour le mot de passe abc et l'enregistrer dans un fichier nommé hash_to_crack.txt.
echo "user1:\$6\$salt1\$y.g.a.hash.for.abc" > ~/project/hash_to_crack.txt
Maintenant, définissons un jeu de caractères personnalisé qui n'inclut que les lettres minuscules. Nous enregistrerons cette définition dans un fichier nommé custom.chr dans le répertoire ~/project. Ce fichier indiquera à John the Ripper quels caractères utiliser lors du cassage.
nano ~/project/custom.chr
Ajoutez le contenu suivant au fichier custom.chr :
[CharSet]
charset = abcdefghijklmnopqrstuvwxyz
Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, et Entrée.
Maintenant, utilisons John the Ripper avec ce jeu de caractères personnalisé en mode incrémental pour casser le fichier hash_to_crack.txt. L'option --incremental indique à John d'utiliser le mode incrémental, et --external=custom.chr spécifie notre jeu de caractères personnalisé.
john --format=sha512crypt --incremental=custom --external=~/project/custom.chr ~/project/hash_to_crack.txt
Vous devriez voir John tenter de casser le hachage. Une fois qu'il aura trouvé le mot de passe, il l'affichera.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
abc (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100.0g/s 100p/s 100c/s 100C/s abc
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Pour afficher le mot de passe cassé, utilisez l'option --show :
john --show ~/project/hash_to_crack.txt
user1:abc
1 password hash cracked, 0 left
Cela démontre comment un jeu de caractères personnalisé peut être utilisé pour réduire l'espace de recherche, rendant le processus de cassage plus efficace lorsque vous avez une certaine connaissance de la composition du mot de passe.
Appliquer des jeux de caractères personnalisés à des scénarios spécifiques
Dans cette étape, vous appliquerez des jeux de caractères personnalisés à des scénarios plus spécifiques, démontrant leur flexibilité. Nous allons créer un nouveau hachage et un jeu de caractères personnalisé plus affiné.
Supposons que nous ayons un mot de passe composé uniquement de chiffres, par exemple, 1234. Tout d'abord, nous allons créer un hachage pour ce mot de passe.
echo "user2:\$6\$salt2\$y.g.a.hash.for.1234" > ~/project/numeric_hash.txt
Maintenant, définissons un jeu de caractères personnalisé qui n'inclut que les chiffres (0-9). Nous nommerons ce fichier digits.chr.
nano ~/project/digits.chr
Ajoutez le contenu suivant à digits.chr :
[CharSet]
charset = 0123456789
Enregistrez le fichier (Ctrl+X, Y, Entrée).
Ensuite, nous utiliserons John the Ripper avec ce nouveau jeu de caractères pour casser le fichier numeric_hash.txt.
john --format=sha512crypt --incremental=digits --external=~/project/digits.chr ~/project/numeric_hash.txt
Vous devriez voir John casser rapidement le mot de passe 1234.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
1234 (user2)
1g 0:00:00:00 DONE (2023-10-27 10:05) 100.0g/s 100p/s 100c/s 100C/s 1234
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Pour confirmer le mot de passe cassé :
john --show ~/project/numeric_hash.txt
user2:1234
1 password hash cracked, 0 left
Ce scénario souligne à quel point les jeux de caractères personnalisés peuvent être très efficaces lorsque vous avez des informations précises sur la composition des caractères du mot de passe, réduisant considérablement le temps de cassage par rapport à l'utilisation d'un jeu de caractères général.
Comprendre l'impact de la taille du jeu de caractères
Dans cette étape, vous observerez l'impact de la taille du jeu de caractères sur le processus de cassage. Un jeu de caractères plus grand signifie plus de combinaisons possibles, ce qui entraîne des temps de cassage plus longs.
Créons un nouveau hachage pour un mot de passe qui utilise à la fois des lettres minuscules et des chiffres, par exemple, a1b2.
echo "user3:\$6\$salt3\$y.g.a.hash.for.a1b2" > ~/project/alphanum_hash.txt
Maintenant, définissons un jeu de caractères personnalisé qui inclut à la fois les lettres minuscules et les chiffres. Nous nommerons ce fichier alphanum.chr.
nano ~/project/alphanum.chr
Ajoutez le contenu suivant à alphanum.chr :
[CharSet]
charset = abcdefghijklmnopqrstuvwxyz0123456789
Enregistrez le fichier (Ctrl+X, Y, Entrée).
Utilisons maintenant John the Ripper avec ce jeu de caractères combiné.
john --format=sha512crypt --incremental=alphanum --external=~/project/alphanum.chr ~/project/alphanum_hash.txt
Vous remarquerez que le cassage de a1b2 avec ce jeu de caractères plus grand peut prendre légèrement plus de temps que le cassage de abc ou 1234 avec leurs ensembles respectifs plus petits, même si la longueur du mot de passe est similaire. C'est parce que l'espace de recherche (le nombre de combinaisons possibles) est considérablement plus grand.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
a1b2 (user3)
1g 0:00:00:00 DONE (2023-10-27 10:10) 100.0g/s 100p/s 100c/s 100C/s a1b2
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Pour confirmer le mot de passe cassé :
john --show ~/project/alphanum_hash.txt
user3:a1b2
1 password hash cracked, 0 left
Cette étape illustre la relation directe entre la taille de votre jeu de caractères et le temps requis pour le cassage. L'optimisation de votre jeu de caractères en le rendant aussi petit et spécifique que possible, en fonction des informations disponibles, est cruciale pour un cassage de mot de passe efficace.
Optimiser les définitions de jeux de caractères personnalisés
Dans cette étape, vous apprendrez à optimiser davantage les définitions de jeux de caractères personnalisés en combinant différents types de caractères et en utilisant les classes de caractères intégrées de John. John the Ripper vous permet de définir des jeux de caractères à l'aide de classes prédéfinies comme ?l pour les minuscules, ?u pour les majuscules, ?d pour les chiffres et ?s pour les symboles.
Créons un hachage pour un mot de passe comme Pass123!.
echo "user4:\$6\$salt4\$y.g.a.hash.for.Pass123!" > ~/project/complex_hash.txt
Au lieu de lister tous les caractères, nous pouvons utiliser les classes de caractères de John. Créons un fichier nommé complex.chr qui combine ces classes.
nano ~/project/complex.chr
Ajoutez le contenu suivant à complex.chr :
[CharSet]
charset = ?l?u?d?s
Enregistrez le fichier (Ctrl+X, Y, Entrée).
Ici, ?l représente les lettres minuscules, ?u pour les majuscules, ?d pour les chiffres et ?s pour les symboles. C'est une manière plus concise de définir un jeu de caractères large.
Utilisons maintenant John the Ripper avec ce jeu de caractères optimisé.
john --format=sha512crypt --incremental=complex --external=~/project/complex.chr ~/project/complex_hash.txt
John tentera maintenant de casser le mot de passe en utilisant toutes les combinaisons de minuscules, majuscules, chiffres et symboles.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
Pass123! (user4)
1g 0:00:00:00 DONE (2023-10-27 10:15) 100.0g/s 100p/s 100c/s 100C/s Pass123!
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Pour confirmer le mot de passe cassé :
john --show ~/project/complex_hash.txt
user4:Pass123!
1 password hash cracked, 0 left
Cette méthode est efficace pour définir des jeux de caractères courants sans avoir à lister manuellement chaque caractère. C'est un bon équilibre entre spécificité et facilité de définition pour les compositions de mots de passe typiques.
Créer des jeux de caractères pour les mots de passe non anglais
Dans cette étape, vous apprendrez à créer des jeux de caractères personnalisés pour les mots de passe non anglais, qui contiennent souvent des caractères spéciaux introuvables dans les jeux de caractères anglais standard. Ceci est crucial pour casser les mots de passe dans différentes langues.
Supposons que nous ayons un mot de passe qui inclut un umlaut allemand courant, par exemple, schön. Tout d'abord, nous allons créer un hachage pour ce mot de passe.
echo "user5:\$6\$salt5\$y.g.a.hash.for.schön" > ~/project/german_hash.txt
Maintenant, nous devons définir un jeu de caractères personnalisé qui inclut les caractères spécifiques non anglais. Pour schön, nous avons besoin de ö.
nano ~/project/german.chr
Ajoutez le contenu suivant à german.chr. Assurez-vous d'inclure le caractère ö.
[CharSet]
charset = abcdefghijklmnopqrstuvwxyzäöüß
Enregistrez le fichier (Ctrl+X, Y, Entrée).
Utilisons maintenant John the Ripper avec ce jeu de caractères personnalisé. Il est important de spécifier l'encodage si les caractères ne sont pas des caractères ASCII standard. John gère généralement bien l'UTF-8, mais un encodage explicite peut parfois être nécessaire.
john --format=sha512crypt --incremental=german --external=~/project/german.chr --input-encoding=UTF-8 ~/project/german_hash.txt
John tentera maintenant de casser le mot de passe, y compris les caractères allemands spéciaux.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
schön (user5)
1g 0:00:00:00 DONE (2023-10-27 10:20) 100.0g/s 100p/s 100c/s 100C/s schön
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Pour confirmer le mot de passe cassé :
john --show ~/project/german_hash.txt
user5:schön
1 password hash cracked, 0 left
Cette étape démontre l'importance d'inclure des caractères spécifiques non anglais dans vos jeux de caractères personnalisés lorsque vous traitez des mots de passe internationaux. Sans ces caractères, John the Ripper ne serait pas en mesure de casser de tels mots de passe en mode incrémental.
Résumé
Dans ce laboratoire, vous avez acquis une expérience pratique dans la définition et l'utilisation de jeux de caractères personnalisés avec John the Ripper. Vous avez appris à créer des fichiers de jeux de caractères spécifiques (.chr), à les appliquer en mode de cassage incrémental et à comprendre l'impact significatif de la taille du jeu de caractères sur l'efficacité du cassage. De plus, vous avez exploré comment optimiser les définitions de jeux de caractères en utilisant les classes de caractères intégrées de John et comment gérer les mots de passe non anglais en incluant des caractères spéciaux. La maîtrise des jeux de caractères personnalisés est une compétence cruciale pour un cassage de mots de passe efficace et ciblé, vous permettant de réduire l'espace de recherche et d'accélérer le processus en fonction des caractéristiques connues du mot de passe.


