Hashcat Brute-Force mit Maskenangriffen

LinuxBeginner
Jetzt üben

Einführung

Hashcat ist ein weltweit bekanntes Tool zur Passwortwiederherstellung, das in der Lage ist, eine Vielzahl von Hashes mit unglaublicher Geschwindigkeit zu knacken. Obwohl Wörterbuchangriffe (Dictionary Attacks) üblich sind, sind sie nur dann effektiv, wenn das Passwort in einer bestimmten Wortliste (Wordlist) enthalten ist. Ein reiner Brute-Force-Angriff, der jede mögliche Zeichenkombination ausprobiert, ist oft zu langsam, um praktikabel zu sein.

Hier kommt der Maskenangriff (Mask Attack) ins Spiel. Ein Maskenangriff ist eine hochgradig effiziente Form des Brute-Force-Angriffs, die verwendet wird, wenn man Kenntnisse über die Struktur des Passworts hat. Sie könnten beispielsweise die Länge des Passworts kennen oder wissen, dass es mit einem Großbuchstaben beginnt und mit einer Zahl endet.

In diesem Lab lernen Sie die Grundlagen der Durchführung eines Maskenangriffs mit Hashcat. Sie beginnen damit, das Konzept zu verstehen, lernen, wie man Zeichensätze (Character Sets) zum Erstellen von Masken verwendet, und wenden dieses Wissen an, um Passwort-Hashes mit bekannten Mustern zu knacken.

Das Konzept des Maskenangriffs (-a 3) verstehen

In diesem Schritt lernen Sie das grundlegende Konzept eines Maskenangriffs in Hashcat kennen. Der Modus für den Maskenangriff wird mit der Option -a 3 angegeben. Dieser Modus weist Hashcat an, Passwortkandidaten basierend auf einem von Ihnen definierten Muster oder einer "Maske" zu generieren.

Dies unterscheidet sich von einem Wörterbuchangriff (-a 0), der eine vorgefertigte Liste von Wörtern verwendet. Ein Maskenangriff erstellt seine eigenen Kandidaten "on the fly" (dynamisch).

Sehen wir uns an, wie eine Maske Kandidaten generiert. Wir können die Option --stdout verwenden, um die generierten Passwörter auf dem Bildschirm auszugeben, anstatt zu versuchen, einen Hash zu knacken. Wir verwenden ?d als einfachen Platzhalter für eine Ziffer (0-9).

Führen Sie den folgenden Befehl aus, um alle möglichen 3-stelligen Zahlen zu generieren:

hashcat -a 3 ?d?d?d --stdout

Hashcat generiert alle möglichen 3-stelligen Kombinationen. Beachten Sie, dass die Reihenfolge der Ausgabe aufgrund der Optimierungsalgorithmen von Hashcat zufällig erscheinen kann, aber es werden alle Kombinationen von 000 bis 999 generiert.

...
476
576
876
976
...

Dies demonstriert die Kernidee: Die Maske ?d?d?d fungiert als Vorlage, und Hashcat füllt diese systematisch mit allen möglichen Kombinationen aus dem angegebenen Zeichensatz auf.

Die integrierten Zeichensätze (?l, ?u, ?d, ?s) kennenlernen

In diesem Schritt lernen Sie die grundlegenden Bausteine von Masken kennen: die eingebauten Zeichensätze (built-in character sets). Dies sind Platzhalter, die eine bestimmte Gruppe von Zeichen repräsentieren.

Hashcat bietet mehrere nützliche eingebaute Zeichensätze:

Platzhalter Zeichensatz Beschreibung
?l abcdefghijklmnopqrstuvwxyz Alle Kleinbuchstaben
?u ABCDEFGHIJKLMNOPQRSTUVWXYZ Alle Großbuchstaben
?d 0123456789 Alle Ziffern
?s !"#$%&'()*+,-./:;<=>?@[\]^_{}~ Alle Sonderzeichen (Symbole)
?a ?l?u?d?s Alle möglichen Zeichen

Sie können diese Platzhalter kombinieren, um komplexe Masken zu erstellen. Die Länge der Maske bestimmt direkt die Länge der generierten Passwortkandidaten.

Versuchen wir, Kandidaten für ein Passwort zu generieren, das aus einem Großbuchstaben gefolgt von einer Ziffer besteht. Die Maske dafür wäre ?u?d.

Verwenden Sie erneut die Option --stdout, um die Ausgabe anzuzeigen:

hashcat -a 3 ?u?d --stdout

Hashcat generiert alle Kombinationen aus einem Großbuchstaben gefolgt von einer Ziffer. Beachten Sie, dass die Reihenfolge der Ausgabe aufgrund der Optimierungsalgorithmen von Hashcat zufällig erscheinen kann, aber es werden alle Kombinationen von A0 bis Z9 generiert.

...
B4
C7
D2
...

Durch die Kombination dieser Zeichensätze können Sie ein präzises Muster für die Passwörter definieren, die Sie testen möchten.

Starten eines Maskenangriffs für eine 3-stellige PIN (NTLM-Hash)

In diesem Schritt wenden Sie Ihr Wissen auf ein reales Szenario an: das Knacken einer 3-stelligen PIN. Wir haben eine Datei namens pin_hash.txt, die einen Passwort-Hash im NTLM-Format enthält. Wir vermuten, dass das ursprüngliche Passwort eine 3-stellige Zahl ist.

Sehen wir uns zunächst den Inhalt der Hash-Datei an:

cat pin_hash.txt

Sie sehen den NTLM-Hash:

D2063C28444B9B742B9B89C282395EBF

Um diesen zu knacken, müssen wir Hashcat drei Dinge mitteilen:

  1. Der Angriffsmodus ist Maskenangriff (-a 3).
  2. Der Hash-Typ ist NTLM (-m 1000).
  3. Die Maske für eine 3-stellige PIN ist ?d?d?d.

Kombinieren Sie diese nun in einem einzigen Befehl, um den Angriff zu starten:

hashcat -a 3 -m 1000 pin_hash.txt ?d?d?d

Hashcat startet, und da der Schlüsselraum (Keyspace) (000-999) sehr klein ist, wird das Passwort fast augenblicklich gefunden.

...
D2063C28444B9B742B9B89C282395EBF:137
...
Status...........: Cracked
...

Hashcat hat das Passwort erfolgreich wiederhergestellt: 137. Sobald ein Passwort geknackt ist, speichert Hashcat es in einer Datei, die als "Potfile" bezeichnet wird. Sie können alle geknackten Passwörter für diesen Hash-Typ mit der Option --show anzeigen:

hashcat -m 1000 pin_hash.txt --show

Ausgabe:

D2063C28444B9B742B9B89C282395EBF:137

Erstellen einer benutzerdefinierten Maske für ein bekanntes Passwortmuster

In diesem Schritt befassen Sie sich mit einem komplexeren Passwort. Stellen Sie sich vor, ein Unternehmen hat eine Passwortrichtlinie: "Passwörter müssen aus genau 5 Kleinbuchstaben bestehen." Ein Beispielpasswort wäre labex.

Wir haben den NTLM-Hash für ein solches Passwort in der Datei pattern_hash.txt.

Zuerst übersetzen wir die Passwortrichtlinie in eine Hashcat-Maske:

  • Alle 5 Zeichen müssen Kleinbuchstaben sein: ?l?l?l?l?l

Dies ergibt unsere endgültige Maske: ?l?l?l?l?l.

Nun verwenden wir diese Maske, um den Hash in pattern_hash.txt zu knacken. Der Befehl ähnelt dem vorherigen Schritt, jedoch mit unserer neuen Maske.

hashcat -a 3 -m 1000 pattern_hash.txt ?l?l?l?l?l

Hashcat beginnt mit dem Testen aller Kombinationen, die diesem spezifischen Muster entsprechen. Dies ist wesentlich effizienter als ein reiner Brute-Force-Angriff, der alle 5-stelligen Kombinationen ausprobiert. Nach kurzer Zeit wird das Passwort gefunden.

...
2BF7D33EC706798E0308F5DF34BC7D2F:labex
...
Status...........: Cracked
...

Sie haben erfolgreich ein Passwort mit einem spezifischen Muster geknackt, indem Sie eine benutzerdefinierte Maske erstellt haben, die genau der erforderlichen Richtlinie von 5 Kleinbuchstaben entspricht.

Vergleich der Leistung von Maskenangriffen im Vergleich zu Wörterbuchangriffen

Im letzten Schritt vergleichen wir den gerade durchgeführten Masken-Angriff mit einem traditionellen Wörterbuch-Angriff, um deren jeweilige Stärken zu verstehen.

Ein Wörterbuch-Angriff (-a 0) ist sehr schnell, wenn das Passwort in der Wortliste enthalten ist. Wir haben eine kleine Wörterbuchdatei namens dict.txt, die das Passwort aus dem vorherigen Schritt enthält.

Führen wir einen Wörterbuch-Angriff gegen pattern_hash.txt durch:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt

Da labex in dict.txt enthalten ist, findet Hashcat es fast augenblicklich.

hashcat (v6.2.5) starting

OpenCL API (OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=====================================================================================================================================
* Device #1: pthread-Intel(R) Xeon(R) Platinum 8575C, 6808/13680 MB (2048 MB allocatable), 4MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

INFO: All hashes found in potfile! Use --show to display them.

Started: Sat Oct 11 16:05:20 2025
Stopped: Sat Oct 11 16:05:20 2025

Hashcat informiert uns darüber, dass der Hash bereits gefunden und in der Potfile gespeichert wurde. Um das geknackte Passwort anzuzeigen, können wir die Option --show verwenden:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt --show

Ausgabe:

2bf7d33ec706798e0308f5df34bc7d2f:labex

Wann hat also ein Masken-Angriff den Vorteil? Ein Wörterbuch-Angriff ist nur erfolgreich, wenn das exakte Passwort in der Wortliste existiert. Wenn das Passwort stattdessen testx wäre und dieses nicht in unserem Wörterbuch enthalten wäre, würde der Angriff fehlschlagen.

Der Masken-Angriff aus Schritt 4 (?l?l?l?l?l) wäre jedoch weiterhin erfolgreich, da er systematisch alle Passwörter generiert und testet, die dem Muster entsprechen, unabhängig davon, ob sie in einem Wörterbuch stehen. Er würde labex, testx, hello und so weiter testen.

Fazit:

  • Wörterbuch-Angriff (-a 0): Am besten geeignet zum Knacken gängiger Passwörter oder wenn Sie eine qualitativ hochwertige, zielgerichtete Wortliste besitzen. Er ist schnell, aber durch den Inhalt des Wörterbuchs begrenzt.
  • Masken-Angriff (-a 3): Am besten geeignet, wenn Sie die Struktur oder das Muster des Passworts kennen (z. B. aufgrund einer bekannten Passwortrichtlinie). Er ist weitaus umfassender als ein Wörterbuch-Angriff und unendlich effizienter als ein reiner Brute-Force-Angriff.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit einer der leistungsstärksten Funktionen von Hashcat gesammelt: dem Maskenangriff.

Sie haben gelernt:

  • Das grundlegende Konzept eines Maskenangriffs (-a 3) und wie dieser Passwortkandidaten basierend auf einem Muster generiert.
  • Wie man die integrierten Zeichensätze von Hashcat (?l, ?u, ?d, ?s) zur Konstruktion von Masken verwendet.
  • Wie man eine einfache Maske anwendet, um eine 3-stellige PIN zu knacken.
  • Wie man eine benutzerdefinierte Maske basierend auf einer bekannten Passwortrichtlinie (5 Kleinbuchstaben) erstellt, um ein Passwort mit einem spezifischen Muster zu knacken.
  • Die wesentlichen Unterschiede und strategischen Vorteile der Verwendung eines Maskenangriffs im Vergleich zu einem Standard-Wörterbuchangriff.

Maskenangriffe sind eine wesentliche Fähigkeit für jeden Sicherheitsexperten, da sie die perfekte Balance zwischen der Geschwindigkeit eines Wörterbuchangriffs und der Vollständigkeit eines reinen Brute-Force-Angriffs bieten.