---
title: "TDM : Authentification et mots de passes"
date: 2019-01-09
categories: ['Sécurité', 'TD machine']
tags : ['hash', 'MD5', 'mot de passe', 'kali']
---

Lors de ce TD nous utiliserons principalement **john the ripper**, un outil de
cassage de mots de passe. C'est un logiciel opensource (licence GPL V.2)
connaissant de base plusieurs algorithmes de hachages (MD4, MD5, SHA256,
Blowfish, NTLM etc). Il est de plus extensible par des plugins.

Il est disponible sur beaucoup de plates-formes (GNU/Linux, *BSD, Windows, BeOS
etc.). Pour l'installer sur Debian ( et ses dérivés comme Ubuntu) :

```
apt install john
```

## Utiliser john

John permet de fonctionner dans 3 modes différents : single, par dictionnaire et
incrémentale

**Single** : dans ce mode, `john` utilise le *hash* du login et éventuellement
des variantes de celui-ci.

**Dictionnaire** : `john` essaye un à un les mos de passes d'une liste établie

**Incrémentale** : aussi appelé *Bruteforce*, dans ce mode, `john` essaye un
ensemble de combinaisons composé d'une suite de caractères donnés.

### Le mode single

C'est le mode le plus rapide du logiciel, pour tester notre fichier de mot de
passe dans ce mode il suffit de faire : 

```
john -single -format=raw-MD5 logins.txt
```

Voici la sortie de la commande :

```
Created directory: /root/.john
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Press 'q' or Ctrl-C to abort, almost any other key for status
AndyGollum       (AndyGollum)
Warning: Only 18 candidates buffered for the current salt, minimum 24
needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any
Warning: Only 4 candidates buffered for the current salt, minimum 24
needed for performance.
1g 0:00:00:08 DONE (2019-01-09 23:14) 0.1142g/s 718.4p/s 718.4c/s 5031C/s indianaford1900..brucemclane1900
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
Session completed
```

`john` sauvegarde automatiquement **tous** les *hashes* qu'il retrouve dans sa
base de donnée qu'il stocke dans le fichier `~/.john/john.pot`. Il écrit aussi
un fichier journal afin de reprendre les opérations là où il les a arrêtées
(`~/.john/john.log`).

Il est possible de retrouver les mots de passes que `john` a trouvé avec la
commande :

```
john -show -format=raw-MD5 logins.txt
```

Et le résultat :

```
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Remaining 7 password hashes with no different salts
Proceeding with single, rules:Wordlist
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 15 candidates buffered for the current salt, minimum 24
needed for performance.
0g 0:00:00:01  1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we
Almost done: Processing the remaining buffered candidate passwords, if any
Warning: Only 4 candidates buffered for the current salt, minimum 24
needed for performance.
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
Proceeding with incremental:ASCII
pwnetp           (SylvesterBalboa)
avnrflr          (bt1)
2g 0:00:51:49  3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma
```

### La recherche incrémentale

`john` va tester un ensemble de combinaisons, elle est communément appelée
*bruteforce*. Comme pour les précédentes commandes, il est **nécessaire** de
spécifier la fonction de hashage via le paramètre `-format=<hash>` :

```
john -format=raw-MD5 logins.txt
```


Cette commande est bien plus longue que la précédente, les combinaisons à tester
étant très nombreuses. Voici le résultat : 

```
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Remaining 7 password hashes with no different salts
Proceeding with single, rules:Wordlist
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 15 candidates buffered for the current salt, minimum 24
needed for performance.
0g 0:00:00:01  1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we
Almost done: Processing the remaining buffered candidate passwords, if any
Warning: Only 4 candidates buffered for the current salt, minimum 24
needed for performance.
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
Proceeding with incremental:ASCII
pwnetp           (SylvesterBalboa)
avnrflr          (bt1)
2g 0:00:51:49  3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma
```

La commande a été interrompue, mais a trouvé deux mots de passe. Il est possible
de la lancer en changeant le format par `raw-SHA256`.

### les dictionnaires

Plus rapide que la technique précédente, celle-ci est basée sur une liste
définie de mots de passe> Voici la commande :

```
john -wordlist=top500movies.txt -format=raw-MD5 logins.txt
```

Et le résultat : 

```
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Remaining 5 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
Le silence des agneaux (MaximusCrowe)
1g 0:00:00:00 DONE (2019-01-10 00:34) 25.00g/s 13500p/s 13500c/s 63600C/s The King of New York..Indiana Jones et le temple maudit
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
Session completed
```

## Utilisation avancée de john

Nous avons vu ici trois utilisations de `john the ripper`, mais grâce à son
fichier de configuration situé dans le répertoire `/etc/john/john.conf`. En plus
des paramètres de bases du logiciel, il est possible de définit des règles plus
fine pour la recherche.

Ces règle sont définie dans des sections commençant par 

```
[List.Rules.<name>]
```

Où `<name>` est la nom donné à notre liste. Suive ensuite un ensemble de règle
étendant les recherche de bases. 

### Premier exemple : étendre notre dictionnaire

Il est courant qu'un utilisateur choisisse un mot courant, puis ajoute son année 
de naissance puis un caractère spécial à la fin, composant ainsi un mot de passe
correspondant à la politique de sécurité de son organisation.

Nous allons donc étendre notre liste de mots en prenant en compte ceci. Parton
du principe que les personnes de l'organisation on moins de 40 ans, voici la
règle créée :

```
[List.Rules:MaListe]
$1$9$[7-9]$[0-9]$[.,;:@-_!#]
```

Le caractère `$` remplace un caractère et `[]` est là pour définir une plage de
caractères.

Pour l'appliquer modifions notre dernière commande `john` comme ceci :

```
john -format=raw-MD5 -wordlist=top500movies.txt -rules=MaListe logins.txt
```

```
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Remaining 4 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
Pulp Fiction1989! (IndianaFord)
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
Session completed
```

### Second exemple : modifier la recherche

Prenons le cas d'un utilisateur qui aurait changé les voyelles d'un mot par des
chiffres pour en faire un mot de passe. Il est possible via des règles de tester
ce cas de figure.

```
[List.Rules:Voyelles]
s?v[0-9]
```

 - `s` : remplacer
 - `?v` : rechercher la classe v : les voyelles
 - `[0-9]` : remplacer par la classe d : un chiffre

Nous pouvons maintenant lancer la recherche avec la commande

```
john -format=raw-MD5 -wordlist=top500movies.txt -rules=Voyelles logins.txt
```

Et voilà la sortie :

```
Using default input encoding: UTF-8
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Remaining 3 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
Sl1md1g M1ll11n11r1 (KevinSoze)
1g 0:00:00:00 DONE (2019-01-10 01:40) 16.66g/s 90000p/s 90000c/s 192800C/s Th9 Pl9y9r..9nd99n9 J9n9s 9t l9 t9mpl9 m99d9t
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
Session completed
```

## Bibliographie

 - [Site officiel](https://www.openwall.com/john/) de John the Ripper
 - [Page Wikipedia](https://fr.wikipedia.org/wiki/John_the_Ripper)
