Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
assless-chaps — MSCHAPv2-Challenge/Response schnell mit einer Datenbank von NT-Hashes knacken. | Kitploit
Tools/GitHubGitHub/sensepost/assless-chaps
Passwort-CrackingWi-Fi-PrüfungHash-AnalyseKryptographiePenetrationstests
GitHubsensepost/assless-chaps

assless-chaps

MSCHAPv2-Challenge/Response schnell mit einer Datenbank von NT-Hashes knacken.

Repository anzeigen
14119vor 27 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

assless-chaps

Knacken von MSCHAPv2/NTLMv1 Challenge/Response schnell mit einer Datenbank von NT-Hashes

Einleitung

Assless CHAPs ist eine effiziente Methode, um den NT-Hash wiederherzustellen, der in einem MSCHAPv2/NTLMv1-Austausch verwendet wird, wenn du die Challenge und Response hast (z. B. von einem WiFi EAP WPE-Angriff).

Es erfordert eine Datenbank von NT-Hashes; Anleitungen zur Erstellung dieser aus vorhandenen Listen oder mit hashcat mit Wortlisten und Regeln findest du weiter unten. Ich habe eine Beispieldatenbank von SecLists beigefügt. Du musst sie entpacken (bunzip).

Technik

Ein MSCHAPv2-Austausch erfordert nicht, dass das Klartext-Passwort „geknackt“ wird, sondern wir benötigen lediglich den verwendeten NThash.

MSCHAPv2 teilt den NThash in drei Teile auf und verwendet jeden Teil als unterschiedlichen Schlüssel zur DES-Verschlüsselung derselben Challenge (abgeleitet von der Peer- und Authentifikator-Challenge). Der NTHash wird in zwei 7-Byte-Schlüssel und einen 2-Byte-Schlüssel aufgeteilt. Das bedeutet, dass der letzte Schlüssel mit NULLs aufgefüllt wird, um einen Schlüssel der erforderlichen Länge zu erhalten. Dieser kann aufgrund der Effizienz der DES-Operation und eines Schlüsselraums von 65.535 schnell brute-forced werden. Sobald wir diese zwei Bytes haben, können wir alle NThashes in unserer Datenbank nachschlagen, die auf diese zwei Bytes enden. Dies ergibt eine viel kleinere Menge möglicher Hashes zur Überprüfung.

Dies ist eine Form des Speicher-Zeit-Kompromisses, ähnlich einer Regenbogentabelle. Es ist auch eine Form des Hash Shuckings.

Präsentation

Dies wurde zum ersten Mal auf dem RF Hacking Village der Defcon 29 vorgestellt. Die Folien sind in diesem Repository enthalten.

Geschwindigkeit

Hier ist der Vergleich für drei Beispiel-Challenge/Response und drei verschiedene Wortlisten, eine kleine private, rockyou und die Have I Been Pwned-Liste. Diese wurden auf meinem Macbook Pro 2016 durchgeführt. Hashcat verwendet diesen Hash-Shucking-Kernel und die beiden integrierten GPUs sowie einen reinen statt optimierten Kernel (da letzterer noch nicht existiert). Hash3 ist nicht in den Listen enthalten, um die Leistung im ungünstigsten Fall zu simulieren. Ich habe die Zeit, die Hashcat benötigt, um den Wörterbuch-Cache beim ersten Durchlauf aufzubauen, nicht mit einbezogen.

Hash1

Kleine Hashliste:

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

Rockyou-Hashliste:

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

HIBP-Hashliste:

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

Kleine Hashliste:

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

Rockyou-Hashliste:

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

HIBP-Hashliste:

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 existiert in keiner der Hashlisten, um die Leistung im ungünstigsten Fall zu simulieren.

Kleine Hashliste:

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

Rockyou-Hashliste:

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

HIBP-Hashliste:

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

Die Rust-Version erfordert SQLite 3.6.8 oder neuer.

Die Python-Version erfordert python3, sqlite3 und pycryptodome.

Das Dienstprogramm zur Datenbankerstellung erfordert python3 und das sqlite3 CLI.

Kompilieren

Dies gilt nur für die Rust-Version. Du benötigst cargo.

Nach der Installation von cargo wechsle einfach in das assless-chaps-rs-Verzeichnis und baue es mit: cargo build --release

Das resultierende Binary befindet sich im Verzeichnis target/release/.

Verwendung

Assless benötigt die Challenge, Response und eine Datenbank von NThashes. Optional kann die Python-Version die gebündelte optimierte Zwei-Byte-Nachschlagdatei verwenden. Die einfachste Verwendung sieht so aus:

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

Zum Beispiel:

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

Die Ausgabe sollte wie folgt aussehen:

root@kitploit:~
[-] Two byte lookup file not provided, will brute force instead.
[+] Found in 22636 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

Der endgültige vollständige Hash 8846f7eaee8fb117ad06bdd830b7586c ist der NT-Hash für password.

Zwei-Byte-Nachschlage - nur Python

Ich habe einige Zeit damit verbracht, eine Liste aller 65.535 möglichen Zwei-Byte-Werte zu erstellen, sortiert nach der häufigsten Verwendung in einem großen Korpus von Passwörtern. Diese Datei ist als twobytes enthalten. Du kannst sie einfach als viertes Argument an assless übergeben.

Dies spart normalerweise ein paar Runden DES, macht aber keinen großen Geschwindigkeitsunterschied. Vielleicht, wenn du viele Hashes verarbeitest.

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

root@kitploit:~
[+] Found in 65533 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

Erstellen eines eigenen Hash-Wörterbuchs

Die Datei mksqlitedb.py hilft dabei, eine CSV-Hashdatei in die Datenbank umzuwandeln.

python3 mksqlitedb.py <database name> <csv file>

Die CSV-Datei erfordert drei Spalten:

  • Die letzten zwei Bytes des Hashes (die letzten vier ASCII-Zeichen)
  • Die ersten 7 Bytes (die ersten 14 ASCII-Zeichen)
  • Die zweiten 7 Bytes (die 15.-29. ASCII-Zeichen)

Zum Beispiel wird der Hash 8846f7eaee8fb117ad06bdd830b7586c zu:

586c,8846f7eaee8fb1,17ad06bdd830b7

Ein Beispiel für eine Regexp-Transformation dafür wäre: echo 8846f7eaee8fb117ad06bdd830b7586c | sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\)$/\3,\1,\2/"

Du kannst entweder eine vorhandene Liste von Hashes nehmen (wie die Have I Been Pwned-Listen) oder deine eigenen mit hashcat und deinen bevorzugten Wortlisten/Regel-Kombinationen erstellen.

Verwendung von Have I Been Pwned

Die HIBP-Passwortlisten sind bereits als NT-Hashes herunterladbar; man muss lediglich die Anzahl aus der Datei entfernen und sie in das CSV-Format konvertieren, um sie in die Datenbank zu importieren.

Dies kann mit dem standardmäßigen Unix-Dienstprogramm sed wie folgt erledigt werden:

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

Danach kann es mit mksqlitedb.py hibp.db hibp.csv importiert werden.

Konvertieren einer Wortliste in eine Hashliste

Um eine reine Wortliste in eine Hashliste von nthashes zu konvertieren, kannst du nthasher verwenden, das große Wortlisten schnell verarbeiten kann. Die resultierenden Hashes müssen wie oben beschrieben in das erforderliche CSV-Format umgewandelt werden.

Ein wesentlich langsamerer nthasher, der die Hashes direkt im erforderlichen CSV-Format ausgibt, ist in diesem Repository enthalten und wird ganz einfach mit folgendem Befehl ausgeführt:

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

Wenn du die Wortliste mit Regeln erweitern möchtest, siehe den nächsten Abschnitt zur Verwendung von hashcat.

Verwenden von hashcat zum Erstellen einer Hash-CSV-Datei aus Wortlisten und Regeln

Du musst eine kleine Codeänderung am OpenCL-Modul des Modus 1000 vornehmen, damit es jeden Hash ausgibt, nicht nur die, die deinem Crack-Kandidaten entsprechen. Standardmäßig wird es den Hash im erforderlichen CSV-Format generieren.

  • Wechsle in dein hashcat-OpenCL-Verzeichnis: cd hashcat/OpenCL
  • Wende den Patch an: patch < m01000_a0-pure.cl.patch
  • Bereite eine Datei mit einem unmöglich zu knackenden NT-Hash vor, z. B. echo 11111111111111111111111111111111 > impossible_hash
  • Cracke wie gewohnt, deaktiviere aber deine Potfile und leite die Ausgabe in eine Datei um: hashcat -m1000 impossible_hash rockyou.txt -r best64.rule --potfile-disable --quiet > rockyou.csv
  • Erstelle deine Hashes-Datenbank: python3 mksqlitedb.py rockyou.db rockyou.csv

Ein Hinweis zu Festplattenspeicher und Dateigrößen

Die SQLite-Datenbank ist in der Regel 61% größer als die zu ihrer Erstellung verwendete CSV-Datei. Es kann auch je nach Dateigröße einige Zeit dauern, die Datenbank zu erstellen. Bereite deine Dateisystemanforderungen entsprechend vor.

Hier ist ein Beispiel mit dem rockyou-Wörterbuch:

  • Basis-rockyou-Wörterbuch 129M
  • Mit hashcat generiertes rockyou.csv 462M
  • Resultierende SQLite-Datenbank rockyou.db 746M
  • BZip2-Maximalkompression rockyou.db.bz2 339M

Du könntest Platz sparen, indem du jeden Hash dynamisch konvertierst und einfügst und die Notwendigkeit der zwischengeschalteten CSV-Datei umgehst.

NTLMv1 SSP

NTLMv1 funktioniert auf genau die gleiche Weise, es sei denn, es wird SSP verwendet. Du erkennst, ob SSP verwendet wird, wenn du eine LM-Antwort erhältst, die mit einer Reihe von Nullen endet. Du kannst das enthaltene ntlm-ssp.py verwenden, um die Server-Challenge zu erstellen, die assless benötigt.

Führe es wie folgt aus: python3 ntlm-ssp.py <lm response> <challenge>

Wenn wir zum Beispiel die Beispiel-NTLMv1-SSP-Challenge-Response aus den hashcat-Beispiel-Hashes verwenden: u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

Du würdest LM und Challenge wie folgt übergeben: python3 ntlm-ssp.py 338d08f8e26de93300000000000000000000000000000000 cb8086049ec4736c

Und erhältst die folgende Antwort: The server challenge is: 724edf24aea0d68b

Die dann wie gewohnt mit assless-chaps geknackt werden kann: ./assless-chaps 724edf24aea0d68b 9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41 hashes.db

Tool herunterladen