La recette du Crunch
|Si vous êtes familier avec le blog, il est très probable que vous ayez déjà eu besoin d’une liste de mots volumineuse. Il est certes plus aisé de télécharger plusieurs dictionnaires déjà construit que de se les fabriquer, pourtant, il arrive un moment où cela devient inévitable…
Rappelez vous mon précédent article, je vous expliquais alors qu’il est souvent possible de construire des dictionnaires adaptés à la cible. Parce que vous détenez certaines de ses informations personnelles, ou parce que vous avez eu vent d’un ou de plusieurs de ses anciens mots de passe et que vous en avez tirez certaines conclusions : amateur de 1337 Sp34k, termine ses mots de passe par un point d’exclamation, utilise systématiquement son année de naissance, etc…
Crunch est le nom que porte un petit outil qui est nativement intégré à la distribution Kali Linux, et qui permet de générer ces fameuses listes personnalisées. Mais trêve de blabla, il est temps de goutter aux joies de la génération de mots de passe…
Exemples inspirés du man crunch
La première chose à faire lorsque l’on découvre un nouveau programme Linux, c’est de RTFM ! Une activité à laquelle je m’adonne chaque fois que j’entreprends une nouvelle présentation d’outil. De qualité variable, le man est parfois d’une aide précieuse. De nombreux exemples sont expliqués dans le manuel de crunch, à mon sens cette pratique devrait être une norme, car il est généralement plus facile de comprendre les différentes fonctionnalités qu’offre un logiciel de cette façon.
Exemple 1
0x0ff@kali:~# crunch 1 5
Génère un dictionnaire comprenant toutes les chaines de caractères minuscules de « a » à « zzzzz ».
Exemple 2
0x0ff@kali:~# crunch 1 5 abcdefg
Utilise les caractères « abcdefg » pour construire une liste de mots qui commence par « a » et se termine par « ggggg ».
Exemple 3
0x0ff@kali:~# crunch 1 5 abcdefg\ 0x0ff@kali:~# crunch 1 5 "abcdefg"
Si vous souhaitez intégrer un espace dans le groupe des caractères à utiliser pour générer la liste de mot, deux solutions s’offrent à vous :
- échapper l’espace avec un antislash (première ligne)
- utiliser des guillemets pour encadrer cette liste de caractères (seconde ligne)
Sur le modèle des exemples précédents, crunch retournera une liste de mots composés de ces 8 caractères différents.
Exemple 4
0x0ff@kali:~# crunch 1 5 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space
Crunch comprend un fichier proposant un certain nombre de charsets préconfigurés ce qui vous épargnera de construire vous-mêmes ces listes de caractères à utiliser (-f). Un petit chat en laisse du document vous donnera une idée des différentes possibilités.
Il est bien entendu possible de créer vos propre charset en éditant le dit fichier :
# charset configuration file for winrtgen v1.2 by Massimiliano Montoro (mao@oxid.it)
# compatible with rainbowcrack 1.1 and later by Zhu Shuanglei <shuanglei@hotmail.com>
0x0ff-info = [0xf.ino]
hex-lower = [0123456789abcdef]
hex-upper = [0123456789ABCDEF]
numeric = [0123456789]
numeric-space = [0123456789 ]
symbols14 = [!@#$%^&*()-_+=]
symbols14-space = [!@#$%^&*()-_+= ]
Ce qui donne :
0x0ff@kali:~# crunch 10 10 -f /usr/share/crunch/charset.lst 0x0ff-info | grep 0x0ff.info Crunch will now generate the following number of lines: 282475249 ... 0x0ff0info 0x0ffxinfo 0x0fffinfo 0x0ff.info 0x0ffiinfo 0x0ffninfo 0x0ffoinfo
C’est assez marrant, 7 caractères composent le charset et le grep retourne 7 lignes d’un coup. L’explication est certainement dans le code de crunch, grep comme méthode de disclosure, pourquoi pas !
Exemple 5
Il est possible de prédéfinir des templates (-t). Par exemple, si l’on utilise notre charset précédemment construit, il est possible de générer une liste d’url comprenant celle de notre blog.
0x0ff@kali:~# crunch 14 14 -f /usr/share/crunch/charset.lst 0x0ff-info -t www.@@@@@.info www.00000.info www.0000x.info www.0000f.info … www.0x0ff.info … www.ooooi.info www.oooon.info www.ooooo.info
Exemple 6
Puisqu’on est un poil mégalo, on souhaite évincer toutes les url qui serait placées devant nous. Ça tombe bien, crunch nous permet d’indiquer à partir d’où commencer (-s). (L’un des avantages de ce paramètre est de reprendre une génération interrompue à partir de la dernière occurrence du fichier que vous étiez en train de créer.)
0x0ff@kali:~# crunch 14 14 -f /usr/share/crunch/charset.lst 0x0ff-info -t www.@@@@@.info -s www.0x0ff.info
La commande ci-dessus permettra donc de récupérer une liste d’adresses commençant par www.0x0ff.info et prenant fin à www.00000.info.
Attention il est nécessaire, non seulement d’être cohérent sur les longueurs (les deux premières variables, la taille du template et la longueur de la chaine de début), mais aussi de respecter le charset. Impossible de débuter à www.0xaff.info ou zzz.0x0ff.info.
Exemple 7
0x0ff@kali:~# crunch 0 0 -p 0x0ff.info
On liste les anagrammes de l’occurrence suivant -p. Les longueurs min/max doivent être renseignées mais ne sont pas utilisées…
Exemple 8
0x0ff@kali:~# crunch 0 0 -p J\'aime 0x0ff.info \ '!' " " … J'aime ! 0x0ff.info J'aime !0x0ff.info J'aime 0x0ff.info ! J'aime 0x0ff.info! J'aime !0x0ff.info …
Sur le même principe, il est possible de composer des mots de passe en mélangeant plusieurs mots de votre choix. (Vous noterez les différentes syntaxes comprises par crunch, résumé de ce que je vous ai dit à propos des espaces. :)).
D’ailleurs, à propos de rien, saviez vous que les ponctuations hautes doivent être précédé d’un espace ? La seul phrase syntaxiquement correcte sera donc « J’aime 0x0ff.info ! ».
Exemple 9
0x0ff@kali:~# crunch 1 5 -o START -c 6000 -z gzip/bzip2/lzma
Plutôt que de générer un gros fichier, il est possible de sectionner cette liste en fichiers d’un nombre de ligne prédéfini avec -c qui porteront comme nom <premier mot de la section>-<dernier mot de la section>.txt. Il est aussi possible de compresser chacune de ces sections (-z)… Les algorithmes de compression gérés par crunch du plus rapide au plus lent sont : gzip, bzip2, lzma. L’option -o START est obligatoire.
Exemple 10
De même, il est possible de se baser sur la taille des fichiers pour déterminer ou couper la liste (-b).
0x0ff@kali:~# crunch 4 5 -b 20mib -o START
Exemple 11
0x0ff@kali:~# crunch 5 5 inf OX 01 \!.# -t @%^,^
L’antislash ci-dessous permet d’échapper le ! qui est interprété comme un event par bash (commande précédement lancé commençant par l’occurrence qui suit le symbole).
Il est possible de déterminer un liste de caractère dans laquelle crunch piochera pour former les mots de sa liste. Les patterns permettent de structurer ces mots. Selon le manuel, voici à quoi correspondent les caractères après l’argument –t.
- @ caractère minuscule
- , caractère majuscule
- % nombre
- ^ symbole
Dans la pratique, il s’agit plutôt de la place du groupe :
- @ groupe 1
- , groupe 2
- % groupe 3
- ^ groupe 4
La preuve, crunch accepte parfaitement cette commande :
0x0ff@kali:~# crunch 5 5 welove www 0x0ff info -t @%^,^
Attention, les nombres correspondant à la taille min/max des mots générés devront correspondre au nombre de caractères contenus dans le pattern.
Exemple 12
0x0ff@kali:~# crunch 4 4 0xfino + 42 £$¤ -t ^%@,
Le signe plus (+) permet de ne pas préciser le contenu du groupe, si le groupe est tout de même utiliser dans le pattern alors tous les caractères de la catégorie concernée seront utilisés.
Les nombres correspondant à la taille min/max des mots générés devront correspondre au nombre de caractères contenus dans le pattern.
Exemple 13
0x0ff@kali:~# crunch 5 5 -t A^£^1 -p www 0x0ff info
Il est également possible de prédéfinir un pattern où des mots de notre choix seraient intercalés. Les caractères de la chaine suivant l’argument -t qui ne sont pas @,%^, seront considérés comme une place pour les mots que l’on aura listé après l’argument -p.
Attention, chaque mot sera utilisé une seul fois, il faut donc au moins autant de mots que de places configurées dans le template.
Les nombres correspondant à la taille min/max des mots générés devront correspondre au nombre de caractères contenus dans le pattern.
Exemple 14
0x0ff@kali:~# crunch 5 5 + + + ' ' -t a^a^a -q dico.txt
De la même façon que dans l’exemple précédent, vous pouvez utiliser un fichier contenant une liste de mots pour générer… Une liste de mots. Oui c’est un peu redondant, mais que voulez vous ! :)
Exemple 15
0x0ff@kali:~# crunch 6 6 -t p@ss%^ -l a@^¨0! ... p@ss7? p@ss7/ p@ss7 p@ss8! p@ss8@ p@ss8# ...
La vous vous dites depuis un moment que crunch c’est pas mal, mais que si vous voulez générer des mots de passe contenant l’un de ces symboles @,%^, vous êtes cuit ! Et bien non, l’argument –l pour literal vous permet d’ancrer un de ces symboles. Tout caractère différents ne sera pas interprété, il en va de même pour si l’un de ces quatre symboles est placé à un emplacement qui ne correspond pas au template (-t).
Temps d’exécution
Petit comparatif sur la vitesse d’exécution, entre une redirection de la sortie standard vers un fichier et l’argument output de crunch…
And the Winner is….
0x0ff@kali:~# root@kali:~# time crunch 1 6 -o test Crunch will now generate the following amount of data: 2236055952 bytes 2132 MB 2 GB 0 TB 0 PB Crunch will now generate the following number of lines: 321272406 5% 10% … 99% 100% real 3m55.644s user 2m38.292s sys 0m5.232s
0x0ff@kali:~# root@kali:~# time crunch 1 6 > test2 Crunch will now generate the following amount of data: 2236055952 bytes 2132 MB 2 GB 0 TB 0 PB Crunch will now generate the following number of lines: 321272406 real 3m27.113s user 2m17.444s sys 0m4.420s
… La redirection de la sortie standard ! On l’applaudit bien fort, et on l’embrasse sur le troutrou !
Troubleshooting
Doublons
Il semblerait qu’un petit bug affecte crunch lorsque l’on utilise un template de très petite taille…
0x0ff@kali:~# crunch 1 1 -t a -q ../dico.txt # retourne 6 fois chaque occurence crunch 1 1 -t aa -q ../dico.txt # retourne 2 fois chaque occurence crunch 1 1 -t aaa -q ../dico.txt # retourne 1 fois chaque occurence
Le mot de la fin
Voilà qui devrait vous permettre de vous amuser un peu avec cet outil fort en chocolat. Comme toujours, n’hésitez surtout pas à partager sur le blog les outils qui font le même boulot mais en mieux, ou les commandes de crunch de qualité supérieur que vous avez composé de vos doigts virtuoses en écoutant le Velvet Underground.
Et si le cœur vous en dit, partagez aussi cet article, et parler de 0x0ff.info autour de vous en attendant lundi prochain !