Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
assless-chaps — Casser les challenges/réponses MSCHAPv2 rapidement en utilisant une base de données de hachages NT | Kitploit
Outils/GitHubGitHub/sensepost/assless-chaps
Cassage de Mots de PasseAudit Wi-FiAnalyse de HachageCryptographieTests d'Intrusion
GitHubsensepost/assless-chaps

assless-chaps

Casser les challenges/réponses MSCHAPv2 rapidement en utilisant une base de données de hachages NT

Voir le dépôt
14119il y a 27 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

assless-chaps

Craquez rapidement des défis/réponses MSCHAPv2/NTLMv1 en utilisant une base de données de hachages NT

Introduction

Assless CHAPs est un moyen efficace de récupérer le hachage NT utilisé dans un échange MSCHAPv2/NTLMv1 si vous disposez du défi et de la réponse (par exemple, à partir d'une attaque WPE WiFi EAP).

Il nécessite une base de données de hachages NT ; des instructions sur la façon de les créer à partir de listes existantes ou en utilisant hashcat avec des listes de mots et des règles sont disponibles ci-dessous. J'ai inclus un exemple de base de données provenant de SecLists. Vous devrez le décompresser avec bunzip.

Technique

Un échange MSCHAPv2 ne nécessite pas que le mot de passe en texte clair soit « craqué », il suffit simplement d'obtenir le NThash utilisé.

MSCHAPv2 divise le NThash en trois parties et utilise chaque partie comme clés différentes pour chiffrer par DES le même défi (dérivé des défis du pair et de l'authentificateur). Le NThash est divisé en deux clés de 7 octets et une clé de 2 octets. Cela signifie que la dernière clé est complétée par des NULL pour former une clé de la longueur requise. Celle-ci peut être rapidement forcée par brute force en raison de l'efficacité de l'opération DES et d'un espace de clés de 65 535. Une fois que nous avons ces deux octets, nous pouvons rechercher tous les NThash dans notre base de données qui se terminent par ces deux octets. Cela fournit un ensemble beaucoup plus restreint de hachages possibles à vérifier.

Il s'agit d'une forme de compromis espace/temps, similaire à une table arc-en-ciel. C'est aussi une forme de shucking de hachage.

Présentation

Cela a été présenté pour la première fois au RF Hacking Village de Defcon 29. Les diapositives sont incluses dans ce dépôt.

Vitesse

Voici la comparaison pour trois échantillons de défi/réponse et trois listes de mots différentes : une petite liste privée, rockyou et la liste Have I Been Pwned. Les tests ont été effectués sur mon Macbook Pro 2016. Hashcat utilise ce noyau de shucking de hachage et les deux GPU intégrés, ainsi qu'un noyau pur plutôt qu'optimisé (car ce dernier n'existe pas encore). Hash3 n'est pas dans les listes pour simuler le pire des cas. Je n'inclus pas le temps que prend hashcat pour construire le cache du dictionnaire lors de la première exécution.

Hash1

Petite liste de hachages :

root@kitploit:~
hashcat 0.50s user 0.27s system 55% cpu 1.405 total (8597.8 kH/s)
assless 0.05s user 0.00s system 294% cpu 0.018 total

Liste rockyou :

root@kitploit:~
hashcat 2.67s user 0.51s system 93% cpu 3.413 total
assless 0.05s user 0.01s system 281% cpu 0.021 total

Liste HIBP :

root@kitploit:~
hashcat 59.97s user 11.72s system 136% cpu 52.603 total (5620.6 kH/s)
assless 0.05s user 0.00s system 292% cpu 0.018 total

Hash 2

Petite liste de hachages :

root@kitploit:~
hashcat 0.51s user 0.27s system 55% cpu 1.409 total (8704.7 kH/s)
assless 0.03s user 0.00s system 248% cpu 0.012 total

Liste rockyou :

root@kitploit:~
hashcat 2.20s user 0.46s system 110% cpu 2.409 total (5798.4 kH/s)
assless 0.03s user 0.00s system 231% cpu 0.015 total

Liste HIBP :

root@kitploit:~
hashcat 65.37s user 12.74s system 135% cpu 57.712 total (5768.7 kH/s)
assless 0.03s user 0.00s system 249% cpu 0.013 total

Hash 3

Hash 3 n'existe dans aucune des listes de hachages pour simuler le pire des cas de performance de recherche.

Petite liste de hachages :

root@kitploit:~
hashcat 0.67s user 0.34s system 66% cpu 1.526 total (7550.1 kH/s)
assless 0.02s user 0.00s system 211% cpu 0.012 total

Liste rockyou :

root@kitploit:~
hashcat 2.71s user 0.52s system 94% cpu 3.415 total (5685.4 kH/s)
assless 0.02s user 0.01s system 181% cpu 0.014 total

Liste HIBP :

root@kitploit:~
hashcat 125.19s user 27.62s system 139% cpu 1:49.75 total (5634.9 kH/s)
assless 0.06s user 0.03s system 115% cpu 0.075 total

Installation

La version Rust nécessite SQLite 3.6.8 ou plus récent.

La version Python nécessite python3, sqlite3 et pycryptodome.

L'utilitaire de création de base de données nécessite python3 et l'interface en ligne de commande sqlite3.

Compilation

Cela ne s'applique qu'à la version Rust. Vous aurez besoin de cargo.

Une fois cargo installé, il suffit de se rendre dans le répertoire assless-chaps-rs et de le construire avec : cargo build --release

Le binaire résultant se trouvera dans le répertoire target/release/.

Utilisation

Assless nécessite le défi, la réponse et la base de données de NThash. En option, la version Python peut utiliser le fichier de recherche optimisé sur deux octets fourni. L'utilisation la plus simple ressemble à ceci :

./assless-chaps <Challenge> <Response> <hashes.db>

Par exemple :

./assless-chaps 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db

La sortie devrait ressembler à :

root@kitploit:~
[-] Aucun fichier de recherche sur deux octets fourni, passage en brute force à la place.
[+] Trouvé en 22636 essais : 586c
[-] 222 hachages trouvés se terminant par 586c
[+] Hachage trouvé : 8846f7eaee8fb1
[-] Trouvé après 186 hachages.
[+] Hachage trouvé : 17ad06bdd830b7
[+] Hachage complet : 8846f7eaee8fb117ad06bdd830b7586c

Le hachage complet final 8846f7eaee8fb117ad06bdd830b7586c est le hachage NT de password.

Recherche sur deux octets - Python uniquement

J'ai passé du temps à construire une liste de toutes les 65 535 valeurs possibles sur deux octets triées par prévalence dans un vaste corpus de mots de passe. Ce fichier est inclus sous le nom twobytes. Vous pouvez simplement le passer comme quatrième argument à assless.

Cela permet généralement d'économiser quelques tours de DES, mais ne fait pas une grande différence de vitesse. Cela pourrait en faire si vous traitez de nombreux hachages.

python3 assless-chaps.py 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db twobytes

root@kitploit:~
[+] Trouvé en 65533 essais : 586c
[-] 222 hachages trouvés se terminant par 586c
[+] Hachage trouvé : 8846f7eaee8fb1
[-] Trouvé après 186 hachages.
[+] Hachage trouvé : 17ad06bdd830b7
[+] Hachage complet : 8846f7eaee8fb117ad06bdd830b7586c

Créer votre propre dictionnaire de hachages

Le fichier mksqlitedb.py vous aidera à transformer un fichier CSV de hachages en base de données.

python3 mksqlitedb.py <nom de la base> <fichier csv>

Le fichier CSV nécessite trois colonnes :

  • Les deux derniers octets du hachage (les quatre derniers caractères ASCII)
  • Les 7 premiers octets (les 14 premiers caractères ASCII)
  • Les 7 deuxièmes octets (les caractères ASCII 15 à 29)

Par exemple, le hachage 8846f7eaee8fb117ad06bdd830b7586c deviendra :

586c,8846f7eaee8fb1,17ad06bdd830b7

Une transformation regexp exemple pour cela serait : echo 8846f7eaee8fb117ad06bdd830b7586c | sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\)$/\3,\1,\2/"

Vous pouvez soit prendre une liste existante de hachages (comme les listes Have I Been Pwned) soit générer les vôtres à partir de hashcat et de vos combinaisons préférées de listes de mots et de règles.

Utilisation de Have I Been Pwned

Les listes de mots de passe HIBP sont déjà téléchargeables sous forme de hachages NT ; il suffit de supprimer le comptage du fichier et de les convertir au format CSV pour les importer dans la base de données.

Cela peut être fait avec l'utilitaire Unix standard sed comme ceci :

sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\):.*/\3,\1,\2/" pwned-passwords-ntlm-ordered-by-hash.txt > hibp.csv

Ensuite, on peut l'importer avec mksqlitedb.py hibp.db hibp.csv.

Conversion d'une liste de mots en liste de hachages

Pour convertir une liste de mots brute en liste de hachages nthash, vous pouvez utiliser nthasher qui peut traiter rapidement de grandes listes de mots. Les hachages obtenus devront être convertis au format CSV requis comme décrit ci-dessus.

Un nthasher beaucoup plus lent qui produit les hachages directement au format CSV requis est inclus dans ce dépôt, et s'exécute simplement avec :

python3 nthash-from-clear.py <wordlist> > hashlist.csv

Si vous souhaitez étendre la liste de mots avec des règles, consultez la section suivante sur l'utilisation de hashcat.

Utilisation de hashcat pour créer un fichier CSV de hachages à partir de listes de mots et de règles

Vous devrez apporter une petite modification au module OpenCL du mode 1000 pour qu'il crache tous les hachages, plutôt que seulement ceux correspondant à votre candidat de craquage. Par défaut, il générera le hachage au bon format CSV requis.

  • Placez-vous dans le répertoire OpenCL de hashcat : cd hashcat/OpenCL
  • Appliquez le patch : patch < m01000_a0-pure.cl.patch
  • Préparez un fichier avec un hachage NT impossible à craquer, par exemple echo 11111111111111111111111111111111 > impossible_hash
  • Craquez normalement, mais désactivez votre fichier potfile et redirigez la sortie vers un fichier : hashcat -m1000 impossible_hash rockyou.txt -r best64.rule --potfile-disable --quiet > rockyou.csv
  • Créez votre base de données de hachages : python3 mksqlitedb.py rockyou.db rockyou.csv

Remarque sur l'espace disque et la taille des fichiers

La base de données SQLite est généralement 61 % plus grande que le fichier CSV utilisé pour la créer. La création de la base de données peut également prendre du temps en fonction de la taille des fichiers. Préparez vos besoins en espace disque en conséquence.

Voici un exemple utilisant le dictionnaire rockyou :

  • Dictionnaire rockyou de base : 129 Mo
  • rockyou.csv généré par hashcat : 462 Mo
  • Base de données SQLite résultante rockyou.db : 746 Mo
  • BZip2 compression maximale rockyou.db.bz2 : 339 Mo

Vous pourriez économiser de l'espace en convertissant et insérant chaque hachage dynamiquement, évitant ainsi le besoin du fichier CSV intermédiaire.

NTLMv1 SSP

NTLMv1 fonctionnera exactement de la même manière, sauf s'il utilise SSP. Vous saurez que SSP est utilisé si vous obtenez une réponse LM qui se termine par une série de zéros. Vous pouvez utiliser le script inclus ntlm-ssp.py pour produire le défi serveur dont assless aura besoin.

Exécutez-le comme ceci : python3 ntlm-ssp.py <réponse lm> <défi>

Par exemple, si nous utilisons l'exemple de défi-réponse NTLMv1-SSP provenant des exemples de hachages hashcat : u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

Vous passeriez le LM et le défi comme ceci :

python3 ntlm-ssp.py 338d08f8e26de93300000000000000000000000000000000 cb8086049ec4736c

Et obtiendriez la réponse suivante :

Le défi serveur est : 724edf24aea0d68b

Qui peut ensuite être craqué avec assless-chaps comme d'habitude :

./assless-chaps 724edf24aea0d68b 9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41 hashes.db

Télécharger l’outil