Benutzerdefinierte Zeichensätze in einem Maskenangriff verwenden

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie eine erweiterte Funktion von Hashcat erkunden: benutzerdefinierte Zeichensätze (custom charsets) in Maskenangriffen. Während die integrierten Zeichensätze von Hashcat (?l, ?u, ?d, ?s) leistungsstark sind, können sie ineffizient sein, wenn Sie spezifische Informationen über die in einem Passwort verwendeten Zeichen haben. Wenn Sie beispielsweise wissen, dass ein Passwort nur die Zeichen 'a', 'b', 'c', '1', '2', '3' enthält, würden die Standardzeichensätze ?l und ?d viele unnötige Zeichen testen.

Benutzerdefinierte Zeichensätze ermöglichen es Ihnen, einen präzisen Zeichensatz zu definieren, wodurch der Suchraum drastisch reduziert und der Crack-Prozess beschleunigt wird. Sie lernen, wie Sie einen benutzerdefinierten Zeichensatz definieren, eine Maske erstellen, die ihn verwendet, und einen gezielten Angriff ausführen, um einen Passwort-Hash zu knacken, der einem einzigartigen Muster folgt.

Die Grenzen von integrierten Zeichensätzen verstehen

In diesem Schritt lernen Sie die integrierten Zeichensätze von Hashcat kennen und warum sie nicht immer das effizienteste Werkzeug für die Aufgabe sind.

Hashcat verwendet Platzhalter, sogenannte Zeichensätze (charsets), um verschiedene Zeichentypen in einem Maskenangriff darzustellen:

  • ?l = abcdefghijklmnopqrstuvwxyz
  • ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • ?d = 0123456789
  • ?s = !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
  • ?a = Alle oben genannten kombiniert

Diese sind für allgemeine Fälle nützlich, aber wenn wir wissen, dass das Passwort aus einer sehr spezifischen, begrenzten Zeichenmenge besteht, ist die Verwendung dieser breiten Zeichensätze ineffizient.

Zuerst inspizieren wir den Ziel-Hash, den wir knacken müssen. Das Setup-Skript hat bereits eine Datei namens hash.txt in Ihrem aktuellen Verzeichnis (~/project) erstellt.

Sehen Sie sich deren Inhalt an:

cat hash.txt

Sie sollten den folgenden MD5-Hash sehen:

2a5c3a657a73613391a8e58f1a43161e

Dieser Hash entspricht einem 8-stelligen Passwort, das nur aus den Zeichen l, a, b, e, x, 1, 2, 3 besteht. Wenn wir die integrierten Zeichensätze ?l und ?d verwenden würden, würde Hashcat Zeit damit verschwenden, alle 26 Kleinbuchstaben und 10 Ziffern auszuprobieren, anstatt nur die 8 bekannten Zeichen. Im nächsten Schritt erstellen wir einen benutzerdefinierten Zeichensatz, um dieses Problem zu lösen.

Definieren eines benutzerdefinierten Zeichensatzes mit --custom-charset1

In diesem Schritt definieren Sie einen benutzerdefinierten Zeichensatz, der genau den Zeichen entspricht, von denen bekannt ist, dass sie im Passwort enthalten sind.

Hashcat ermöglicht es Ihnen, bis zu vier benutzerdefinierte Zeichensätze mit den Kommandozeilenoptionen --custom-charset1, --custom-charset2, --custom-charset3 und --custom-charset4 zu definieren.

Für unser Szenario ist bekannt, dass das Passwort nur Zeichen aus der Menge labex123 enthält. Wir können dies als unseren ersten benutzerdefinierten Zeichensatz definieren.

Lassen Sie uns einen Befehl konstruieren, um zu sehen, wie das funktioniert. Wir verwenden die Option --stdout, um die generierten Passwortkandidaten auf dem Bildschirm auszugeben, anstatt einen echten Angriff durchzuführen. Wir verwenden auch head, um nur die ersten paar Ergebnisse zu sehen.

Führen Sie den folgenden Befehl aus, um 3-stellige Passwörter mit unserem benutzerdefinierten Zeichensatz zu generieren:

hashcat --stdout -a 3 --custom-charset1 labex123 ?1?1?1 | head -n 5

Lassen Sie uns diesen Befehl aufschlüsseln:

  • --stdout: Gibt die generierten Kandidaten auf der Konsole aus.
  • -a 3: Gibt einen Maskenangriff an.
  • --custom-charset1 labex123: Definiert ?1 als unseren benutzerdefinierten Zeichensatz.
  • ?1?1?1: Die Maske, die Hashcat anweist, 3-stellige Kandidaten zu generieren, wobei jedes Zeichen aus der in ?1 definierten Menge stammt.

Sie sehen eine Ausgabe wie diese, die zeigt, dass nur die von uns angegebenen Zeichen verwendet werden:

lll
lla
llb
lle
llx

Jetzt verstehen Sie, wie Sie einen benutzerdefinierten Zeichensatz für einen gezielten Angriff definieren.

Erstellen einer Maske, die den benutzerdefinierten Zeichensatz ?1 verwendet

In diesem Schritt erstellen Sie eine Maske, die den benutzerdefinierten Zeichensatz verwendet, den Sie im vorherigen Schritt definiert haben.

Benutzerdefinierte Zeichensätze werden in einer Maske mithilfe der Platzhalter ?1, ?2, ?3 und ?4 referenziert, entsprechend der verwendeten Option --custom-charset<N>. Da wir --custom-charset1 verwendet haben, werden wir ?1 in unserer Maske verwenden.

Wir wissen, dass unser Zielpasswort 8 Zeichen lang ist und jedes Zeichen aus unserem benutzerdefinierten Satz stammt. Daher ist die korrekte Maske ?1, achtmal wiederholt.

Zur Klarheit und Wiederverwendbarkeit ist es eine gute Praxis, Ihre Maske in einer Datei zu speichern. Lassen Sie uns eine Datei namens mask.txt erstellen und unsere Maske darin ablegen.

Führen Sie den folgenden Befehl aus, um die Datei zu erstellen:

echo "?1?1?1?1?1?1?1?1" > mask.txt

Überprüfen Sie nun den Inhalt der Datei, um sicherzustellen, dass er korrekt ist:

cat mask.txt

Die Ausgabe sollte genau dem entsprechen, was Sie eingegeben haben:

?1?1?1?1?1?1?1?1

Mit der vorbereiteten Maskendatei sind Sie nun bereit, den Angriff zu starten.

Ausführen eines Maskenangriffs mit dem benutzerdefinierten Zeichensatz

Nun werden Sie alles kombinieren, um den Maskenangriff mit Ihrem benutzerdefinierten Zeichensatz und Ihrer Maskendatei zu starten.

Sie haben den Hash in hash.txt, den definierten benutzerdefinierten Zeichensatz und die Maske in mask.txt. Lassen Sie uns den endgültigen Hashcat-Befehl zusammenstellen.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um den Angriff zu starten:

hashcat -m 0 -a 3 hash.txt --custom-charset1 labex123 mask.txt

Hier ist eine Aufschlüsselung des vollständigen Befehls:

  • -m 0: Gibt an, dass der Hash-Typ MD5 ist.
  • -a 3: Wählt den Maskenangriffsmodus aus.
  • hash.txt: Die Eingabedatei, die unseren Ziel-Hash enthält.
  • --custom-charset1 labex123: Definiert unseren benutzerdefinierten Zeichensatz ?1.
  • mask.txt: Die Datei, die die Maske ?1?1?1?1?1?1?1?1 enthält.

Hashcat startet den Angriff. Da unser benutzerdefinierter Zeichensatz sehr spezifisch ist, ist der Keyspace klein und der Angriff sollte sehr schnell abgeschlossen sein. Sie sehen eine Ausgabe, die den Fortschritt anzeigt, und schließlich den Status Cracked.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2a5c3a657a73613391a8e58f1a43161e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: Custom Charset 1: 'labex123', len=8
Speed.#1.........:  ... H/s (0.00ms) @ Accel:1 Loops:1 Thr:1 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 16777216/16777216 (100.00%)
Rejected.........: 0/16777216 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex123 -> labex123
Hardware.Mon.#1..: Util:  0%

Started: ...
Stopped: ...

Der Angriff ist abgeschlossen und erfolgreich. Im nächsten Schritt überprüfen Sie das geknackte Passwort.

Überprüfen, ob das geknackte Passwort dem benutzerdefinierten Muster entspricht

In diesem letzten Schritt sehen Sie das geknackte Passwort und bestätigen, dass es dem erwarteten Muster entspricht.

Hashcat speichert erfolgreich geknackte Passwörter automatisch in einer Datei namens "potfile" (weil es den Hash und das Passwort "topft"). Dies verhindert, dass derselbe Hash in Zukunft erneut geknackt wird. Der einfachste Weg, das geknackte Passwort für eine gegebene Hash-Datei anzuzeigen, ist die Verwendung der Option --show.

Führen Sie den folgenden Befehl aus, um das geknackte Passwort für den Hash in hash.txt anzuzeigen:

hashcat -m 0 --show hash.txt

Dieser Befehl weist Hashcat an, den Hash aus hash.txt in seiner Potfile nachzuschlagen und das entsprechende Klartextpasswort anzuzeigen.

Die Ausgabe ist klar und einfach:

2a5c3a657a73613391a8e58f1a43161e:labex123

Wie Sie sehen können, ist das geknackte Passwort labex123. Beachten Sie, dass es 8 Zeichen lang ist und nur Zeichen aus dem benutzerdefinierten Zeichensatz labex123 enthält, den Sie definiert haben. Dies bestätigt, dass Ihr gezielter Maskenangriff erfolgreich und sehr effizient war.

Zusammenfassung

In diesem Lab haben Sie eine leistungsstarke und effiziente Technik zur Passwortentschlüsselung mit Hashcat kennengelernt.

Sie haben zunächst die Grenzen der integrierten Zeichensätze von Hashcat für Passwörter mit spezifischen, bekannten Zeichensätzen verstanden. Anschließend haben Sie gelernt, wie Sie Ihren eigenen Zeichensatz mit der Option --custom-charset1 definieren und ihn in einer Maske mit ?1 referenzieren. Durch die Erstellung einer Maskendatei und den Start eines gezielten Angriffs konnten Sie einen MD5-Hash in Sekunden knacken.

Diese Methode der Verwendung benutzerdefinierter Zeichensätze ist für eine effiziente Passwortprüfung und -wiederherstellung unerlässlich, wenn Sie Informationen über die Struktur des Passworts haben, und reduziert die für einen Angriff erforderliche Zeit und Rechenressourcen erheblich.