I. Présentation

J’arrive sans aucun doute tard, mais l’important ici est de voir les procédés utilisés pour parvenir à trier de nombreux fichiers.
Vous avez sans doute entendu parler de cette archive de 41 Go contenant des couples de mails et mots de passe en clair.

Je ne vous donnerai pas le moyen de la trouver mais il est très facile de se la procurer.
Ici je vais vous montrer les moyens utilisés pour arriver à mon but. But étant d’avoir une top liste des mots de passe utilisés.

Cet article est dédié à des fins de tests ou d’études. Toute autre utilisation n’est absolument pas cautionnée par ce site ou ces auteurs. Nous ne pourrons pas en être tenu pour responsable.


II. Rappels Sécurités

Quelques rappels de sécurité à propos des mots de passe. On ne le répète pas assez mais, il faut avant tout complexifier ses mots de passe. C’est-à-dire qu’il faut utiliser une longueur assez conséquente, supérieure ou égal à 8 caractères, c’est un bon début. Il faut ensuite varier les minuscules / majuscules et enfin rajouter un chiffre et/ou un caractère spécial.

Reparlons de cette archive de mails/mots de passe, vous pouvez aller vérifier sur ce site pwdquery si vos adresses mails en font parties. Si tel est le cas changez votre mot de passe et ne réutilisez plus JAMAIS l’ancien.

 


III. Le tri – partie 1

 

Lorsque l’on ouvre l’archive, nous n’avons pas qu’un seul fichier, un unique fichier serait difficilement exploitable. L’auteur de cette compilation a scindé en plusieurs niveaux (3)  le contenu. Voici à quoi ressemble l’arborescence:

Arborescence

Chaque fichier est de la forme suivante:

  • adresse_mail@fai.com:mot_de_passe
  • adresse_mail@fai.com;mot_de_passe
Il faudrait que je dise principalement car certaines adresses mails n’en sont pas vraiment.

 

A partir de cette constatation il va être très facile de ne récupérer que les mots de passe. Voici la commande miracle:

root@SCRIPTS# grep -rohP ‘(?<=[: ;]).*$’  > BreachCompilation_All_password_list

 

Explications:

 

Commande/Option Description dans notre cas
grep Permet de rechercher un terme dans un fichier
-rohP r: cherche de façon récursive

o: affiche que ce qui match avec notre terme

h: supprime le préfixe du nom du fichier sur la sortie

P: spécifie que l’on va utiliser une expression régulière de type PERL comme terme de recherche

‘(?<=[: ;]).*$’ Expression régulière: on ne recherche que ce qui se trouve du ‘:’ ou ‘;’ jusqu’à la fin de la chaine
> Permet d’indiquer que l’on va enregistrer le résultat
BreachCompilation_All_password_list Fichier de sortie (d’enregistrement)

 

Une fois la commande lancée, on peut prendre un petit café :P, et on va se retrouver avec un très gros fichier. Dans notre cas un fichier de 11 Go.

Mais si vous avez suivi ce que j’ai dis au début, la gestion des gros fichiers, etc. Et bien nous allons scinder ce fichier en plusieurs plus petits.

 


 

IV. Le trie – partie 2

 

Nous avons donc notre (gros) fichier contenant tous les mots de passe, mais vous vous doutez bien qu’il doit y avoir quelques doublons, c’est pourquoi nous allons les supprimer. Commençons déjà par connaitre le nombre de ligne de notre fichier et donc le nombre de mots de passe.

La commande wc -l va nous donner cela très facilement:

root@SCRIPTS# wc -l BreachCompilation_All_password_list
1135582453 BreachCompilation_All_password_list

1 milliard 135 millions 582 milles 453 mots de passe. ha oui 😐 pfffff

 

Aller on coupe ce fichier en plusieurs fichiers de 30 000 000 de lignes :

root@SCRIPTS# split -l 30000000 --verbose BreachCompilation_All_password_list

Sans option la commande split va enregistrer les fichiers avec cette normalisation xaa, xab…

La commande tree permet d’afficher l’arborescence du dossier:

root@SCRIPTS# tree
.
|-- BreachCompilation_All_password_list
|-- xaa
|-- xab
......
|-- xbl

 

Nous avons donc 43 fichiers d’environ 280 Mo chacun, beaucoup plus facile à gérer.

Maintenant place au scripts


 

V. Scripting

 

Alors, je tiens à vous prévenir tout de suite, je ne suis pas un pro des scripts loin de là. Cela ne fonctionne peut être pas de la manière la plus optimale.

 

Commençons par faire un script qui va lire dans chaque fichier xaa, xab…xbl, puis va trier de façon alphabétique puis supprimer les doublons (ou ne retenir que les lignes uniques), faire un compte de ces lignes (uniques) puis faire un tri sur ce comptage et enfin on n’affiche que les 20 premières lignes que l’on enregistre dans un fichier (Stats)

 

#!/bin/bash
dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
FILES=$dir/BreachCompilation_All/xa*
FILES2=$dir/BreachCompilation_All/xb*
for letter in $FILES
do
echo 'Fichier traite:' $letter
cat $letter | sort | uniq -c | sort -nr | head -n 20 >> $dir/BreachCompilation_All/Stats
done
for letter2 in $FILES2
do
echo 'Fichier traite:' $letter2
cat $letter2 | sort | uniq -c | sort -nr | head -n 20 >> $dir/BreachCompilation_All/Stats
done

 

On se retrouve avec un fichier Stats contenant les mots de passe uniques de chaque fichier (très important de le notifier) avec le nombre de fois qu’ils apparaissent. Là je me suis simplement servi de Excel pour faire la somme de chaque mot de passe identique.

Voyons le résultat.

 


 

VI. Résultat

 

Le résultat sous forme graphique:

 

 

Voici la liste brute des mots de passe les plus utilisés :

 

Top MDP NB
1 123456           7 680 663
2 123456789           2 563 182
3 qwerty           1 425 090
4 111111           1 089 134
5 password           1 076 046
6 12345678              932 515
7 abc123              897 096
8 1234567              802 034
9 password1              781 469
10 123123              736 158
11 1234567890              723 990
12 0              706 761
13 12345              683 658
14 homelesspa              621 063
15 iloveyou              418 162
16 1q2w3e4r5t              350 195
17 qwertyuiop              347 591
18 1234              314 391
19 123456a              207 222
20 123321              186 400
21 passer2009              130 101
22 123              121 958
23 monkey              110 016
24 654321              102 513
25 dragon                 98 105
26 666666                 78 595
27 asdasd5                 53 823
28 paSSword                 50 433
29 a123456                 50 059
30 ashley                 32 926
31 klaster                 29 942
32 5201314                 29 368
33 121212                 28 140
34 myspace1                 25 487
35 ybccfy                 24 309
36 qwe123                 21 200
37 1qaz2wsx                 20 441
38 qarglr123                 18 839
39 marina                 18 792
40 fu7u4a#$$$                 18 654
41 daniel                 18 013
42 passer2011                 16 063
43 michael                 15 778
44 jessica                 15 317
45 natasha                 13 971
46 jennifer                 13 816
47 zxcvbnm                 13 314
48 nikita                 13 268
49 asdasd                 12 168
50 andrea                 11 742
51 svetlana                 11 180
52 MaprCheM56458                 10 877
53 michelle                 10 389
54 ruslan                 10 304
55 123qwe                   9 582
56 oksana                   9 563
57 target123                   8 781
58 j38ifUbn                   8 766
59 iloveyou1                   8 728
60 richard                   8 716
61 martin                   8 448
62 FQRG7CS493                   8 358
63 maksim                   7 889
64 vfhbyf                   7 677
65 Eh1K9oh335                   7 442
66 charlie                   7 392
67 qwaszx                   6 780