NOTE Post Réécriture : Cet article, et bien d’autres, fait parti de la série “Script kiddie”. Il a été écrit il y a plusieurs années. Son contenu n’est pas à jour et il contient potentiellement des erreurs. Plus d’information sur la page de présentation de la série.
La méthode BruteForce consiste à tester toutes les possibilités pour trouver un mot de passe. C’est une technique très simple qui peut demander beaucoup de temps, on préférera donc l’utiliser en dernier recours ou en même temps qu’une autre attaque (au cas où). Pour plus d’informations sur le vocabulaire employé, référez-vous au chapitre sur la cryptographie.
Pour faire nos expériences, on se basera sur un hash très simple que vous pouvez obtenir avec la commande suivante :
echo "12345" | md5sum | tr -d “ -”
d577273ff885c3f84dadb8578bb41399
Collez-le à l’intérieur d’un fichier nommé pass.txt.
Accessoirement, vous aurez également besoin de dictionnaires, c’est-à-dire de grandes listes de mots constituant un ensemble de possibilité de mot-de-passe. Vous en trouverez à cette adresse.
John The Ripper, l’attaque sur CPU
John The Ripper est l’outil de cracking préféré des hackers. Il utilise les ressources du processeur (CPU) pour attaquer, ce qui en fait un outil facile à installer par apport à d’autre, et qui donne l’avantage d’avoir de bonnes performances sans carte graphique (dans la limite de la puissance de l’ordinateur).
Pour l’installer, soit vous passez par GitHub, soit par snap :
apt install john
John The Ripper, que l’on va appeler JtR maintenant, offre de nombreux avantages, comme la reconnaissance du hash, le fonctionnement sur de multiple types de hash et de multiple plateformes.
Il dispose également de plusieurs méthodes d’attaque :
- Crack seul : le mode le plus rapide pour les fichiers de mot-de-passe
- Dictionnaire : compare les hash avec un fichier de possibilité
- Incrémentale : essaye toutes les possibilités, ce qui est très long
C’est trois techniques peuvent se mettre en commande, et s’exécuter très simplement :
john --single pass.txt
john pass.txt --wordlist=[chemin]
john --incremental pass.txt
Une fois le travail effectué, pour voir le résultat, tapez simplement :
john --show pass.txt
Afin de gagner un peu de temps, vous pouvez préciser le type de hash que vous allez donner à john :
john --single pass.txt --format=RAW-MD5
Vous pouvez obtenir la liste des formats supportés avec :
john --list=formats
Laissez-moi dès à présent vous montrer un cas bien pratique d’utilisation de JtR. Avec ce logiciel, il devient très facile de contourner les mots de passe d’une archive zip.
Par exemple, créons une archive avec cette commande :
zip -e -r pass.zip pass.txt
Le programme vous demande alors de saisir un mot de passe, puis de le vérifier. Je vous encourage à en mettre un pas très long afin de ne pas surcharger John lors de ce petit exercice.
On va à présent utiliser la commande zip2john pour créer un hash à partir de cette archive. Sur certaines installations, la commande peut être john-the-ripper.zip2john :
zip2john pass.zip > hash.txt
Notre nouveau fichier contient à présent le hash de l’archive, il n’y a plus qu’à le cracker simplement avec cette commande :
john --format=zip hash.txt
Vous n’avez plus qu’à récupérer le mot-de-passe avec la commande plus haute.
Hashcat, l’attaque au GPU
Hashcat est également un logiciel de BruteForce très utilisé par les communautés de Hackers. Sa grande différence avec john est que, bien qu’il soit possible de le faire fonctionner sur le CPU, il fonctionne majoritairement sur la carte graphique (GPU). Ainsi, il va nous falloir quelques instructions en plus pour le faire fonctionner parfaitement.
D’abord installons-le avec :
apt install hashcat
Nous allons également recourir à un deuxième paquet qui sera très utile pour beaucoup d’opérations : https://github.com/hashcat/hashcat-utils.git
Vérifiez ensuite si hashcat est pris en charge par votre carte graphique avec cette commande :
hashcat -I
Si elle renvoie ceci :
hashcat (v5.1.0) starting...
No devices found/left.
C’est qu’il va falloir installer les drivers de votre carte graphique. Quelques instructions sont présentes ici : https://hashcat.net/hashcat/
Je possède un intel i915, si c’est aussi votre cas, vous trouverez votre bonheur ci-dessous…
https://registrationcenter-download.intel.com/akdlm/irc_nas/vcp/15532/l_opencl_p_18.1.0.015.tgz
Pour avoir un peu plus d’informations sur hashcat, le mieux reste encore de jeter un œil à sa documentation :
hashcat -h
On remarquera que les paramètres les plus imortants sont en haut du tableau.
En effet, -a et -m respectivement utilisé pour rentrer en mode attaque et pour
spécifier le type de hash seront souvent présents dans vos instructions.
Vous avez ensuite la liste des algorithmes pris en charge. Le nombre présent sur la colonne de gauche correspond au nom de l’algorithme que vous allez essayer de cracker. Vous avez les formats de hash, les modes d’attaques, le branchement de l’attaque sur le GPU ou le CPU, les performances de la machine allouées à l’exécution et enfin quelques exemples d’utilisation.
Je n’ai presque rien à ajouter, à part appliquer à hashcat notre exemple de tout à l’heure. Si l’on reprend notre fichier pass.txt, la commande pour cracker le mot-de-passe présent à l’intérieur sera alors :
hashcat -m 0 -a 0 -o resultat.txt pass.txt richelieu.txt
Ici j’utilise l’algorithme MD5, en mode d’attaque par dictionnaire.
Le résultat sera placé dans le fichier resultat.txt,
après avoir décrypté le fichier pass.txt grâce à la liste de mots (dictionnaire) richeulieu.txt.
Comme pour John The Ripper, je vais vous présenter une utilisation un peu plus pratique de Hashcat.
Vous vous rappelez du chapitre sur les réseaux wifis ?
Eh bien il est temps de passer à l’étape supérieure avec hashcat en augmentant la rapidité du crack.
Pour ce faire, nous avons besoin du fichier contenant le handhake et nous allons le passer dans un des programmes de hashcat-utils.
En effet, le handshake sera dans le fichier avec l’extension .cap.
Hashcat ne comprenant pas ce genre de fichier, il va falloir le convertir avec hcat-utils en hccapx.
Allez dans le dossier /src du dépôt hashcat-utils, puis tapez :
./cap2hccapx [fichierCap] [sortieHccapx]
Le premier chemin est celui vers votre fichier .cap, le deuxième sera pour le nom du fichier dans lequel écrire.
Il va falloir ensuite trouver le mode que hashcat va utiliser :
hashcat --help
Ici, on cherche le protocole WPA, vous pouvez ajuster la sortie du manuel avec grep.
Ça devrait s’afficher comme ceci :
2500 | WPA-EAPOL-PBKDF2 Network Protocols
Une fois choisi, tapez :
crunch [min] [max] [chaîne] (options) | hashcat -m 2500 [fichierHccapx]
Avec Hashcat, la rapidité de votre ordinateur devrait accrue. Elle dépendra cette fois-ci de la puissance de votre carte graphique.
Hydra, l’attaque de services
Passons à présent à un logiciel de BruteForce un peu moins utilisé que les deux autres, Hydra. Hydra sert majoritairement à attaquer des services pour trouver un mot de passe, là ou les deux autres sont utilisés pour le crack sur des hash présents sur la machine.
Pour installer Hydra :
apt install hydra
Je vous conseille de faire comme avec hashcat et de jeter directement un œil à l’aide qui est plutôt bien remplie :
hydra -h
Vous avez la liste des services pouvant être attaqués par hydra en dessous de supported services, ainsi que quelques exemples d’utilisation à la fin. On en déduira qu’une des syntaxes les plus couramment utilisées est la suivante :
hydra -l [nomUtilisateur] -P [dictionnaire] [IP] [service]
Un rapide exemple pour la route. Si je veux trouver le mot de passe du super-utilisateur sur la machine 80.74.144.93 :
hydra -l root -P 1millionProbable.txt -s 2121 80.74.144.93 ssh
Il me faut tout de même faire un petit aparté sur les services Web puisque ceux-ci ont une syntaxe un peu particulière :
hydra -l [nom] -P [dictionnaire] [IP] http-post-form “[chemin]:[var1]=[val1]&[var2]=[val2](&[plus2parametres]):[Echec]”
Expliquons cette commande qui est assez grosse pour le coup :
-lcorrespond au nom d’utilisateur-Pau dictionnaire[IP]à l’adresse de celui que vous attaquezhttp-post-formau service que vous attaquez. Attention cependant, HTTP et HTTPS ne sont pas les mêmes services et prendront respectivement http-post-form et https-post-form[chemin]représente le dossier du serveur web vers lequel est envoyé le formulaire. Vous le trouverez dans l’en-tête de la requête[var1]et[var2]sont des variables qui prennent respectivement les valeurs [val1] et [val2][plus2parametres]sont les paramètres supplémentaires à l’exécution de la requête[Echec]représente la phrase qui s’affiche en cas de mauvais mot de passe sur le service.
Si certains mots ne vous paraissent pas clairs, tous ces termes ainsi que de plus amples explications sont présents dans la partie sur les requêtes HTTP modéfiées.
Comme un exemple vaut mieux qu’un long discours, voici ce que cette commande peut donner :
hydra -l Administrateur -p richelieu.txt 172.17.200.30 http-post-form "/login:user=^USER^&password=^PASS^:Échec de la connexion (nom d’utilisateur ou mot de passe non valide)"
Ainsi, ^USER^ prendra la valeur de -l (ou -L) et ^pass^ la valeur de -p (ou -P).
Vous voilà maintenant prêts à pouvoir contourner n’importe quel mécanisme de sécurité. Cependant, gardez bien à l’esprit que cette méthode doit constituer le dernier recours de l’exploitation et non pas la stratégie de base. Elle s’avère pratique pour récupérer un maximum de mot-de-passe hashé dans une base de données, mais inutile pour récupérer les identifiants du super-utilisateur sur le service SSH quand d’autres méthodes sont disponibles sur la machine.
Bonus : Découvrir les répertoires cachés d’un site
Un service web est un dossier comportant plusieurs ressources que le client peut consulter. Bien souvent, il s’agit de document HTML, XML, PHP ou de simples textes, mais il peut s’agir d’autres types de fichier (CSS, JavaScript, Musique, Images, Vidéos, etc.).
Il demeure cependant un problème, nous ne pouvons pas nous promener librement sur le site sans avoir l’URL exacte pour consulter une ressource. Cela ne pose pas de soucis quand elles sont indexées (mises en lien sur une page), mais lorsque l’administrateur cache volontairement des informations, il est plus difficile de les retrouver.
Ainsi, le logiciel DirBuster répond à ce problème en essayant chaque possibilité d’URL que vous lui donnerez. Autrement dit, il va vérifier si tels ou tels pages existent selon le dictionnaire que vous lui avez donné.
Vous le trouverez ici : https://sourceforge.net/projects/dirbuster/
Une fois décompressé, le dossier comporte plusieurs listes ainsi que le logiciel sous le format .jar, il faut avoir Java d’installer pour le lancer, vous trouverez suffisamment d’informations sur Internet pour savoir comment faire.
Lancer DirBuster :
java -jar DirBuster-0.12.jar
Ici, nous nous pencherons uniquement sur une utilisation classique de DirBuster, libre à vous d’approfondir derrière. Pour se faire :
- Dans Target URL, rentrez le nom du site à attaquer.
- Number of threads désigne la puissance allouée à l’attaque (le nombre de threads qui seront utilisés par le programme
- Select scanning type permet de choisir la méthode de bruteforce entre l’utilisation d’un dictionnaire ou la génération de mot de passe (comme avec crunch). Il faut ensuite remplir les champs en dessous selon ce que vous voulez.
- Dir to start représente le dossier à partir duquel attaquer. À savoir que le / présent veut dire que vous commencez avec la racine.
- File extension désigne les extensions qui seront recherchées, séparez-les d’une virgule sans espace. Les dossiers seront obligatoirement visés.
Une fois tout cela rempli, appuyez sur Start, le programme fait le reste du boulot.
D’autres logiciels, un peu plus modernes, existent et peuvent constituer de bonnes alternatives à DirBuster si l’installation de java vous effraie. Par exemple : https://github.com/stefanoj3/dirstalk.
Par apport aux autres méthodes de BruteForce, la recherche de dossiers cachés sur un site web est indispensable. Elle peut vous donner accès à des panels secrets et à des interfaces de connexion bien gardées.