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 Bar

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 !