Einleitung
In diesem Lab werden Sie die leistungsstarken regelbasierten Cracking-Fähigkeiten von John the Ripper (JtR) erkunden. Während einfache Wörterbuchangriffe effektiv sind, beinhalten reale Passwörter oft Variationen wie Groß-/Kleinschreibung, angehängte Zahlen oder Sonderzeichen. Die Regel-Engine von JtR ermöglicht es Ihnen, komplexe Transformationen zu definieren, die auf Wörter in einer Wortliste angewendet werden, wodurch die Wahrscheinlichkeit, Passwörter zu knacken, die nicht direkt im Wörterbuch vorhanden sind, erheblich erhöht wird. Sie lernen die grundlegende Syntax von JtR-Regeln kennen, erstellen Ihre eigenen benutzerdefinierten Regeln und wenden diese auf eine Wortliste an, um deren Wirkung zu sehen.
John the Ripper Regel-Syntax verstehen
In diesem Schritt lernen Sie die grundlegende Syntax von John the Ripper (JtR) Regeln. JtR Regeln werden in einer Konfigurationsdatei definiert, typischerweise john.conf, oder können in einfachen Fällen direkt über die Kommandozeile übergeben werden. Jede Regel ist eine Sequenz von Ein-Zeichen-Befehlen, die ein Wort modifizieren.
Gängige Regelbefehle umfassen:
c: Macht den ersten Buchstaben groß.C: Macht alle Buchstaben groß.l: Macht den ersten Buchstaben klein.L: Macht alle Buchstaben klein.t: Vertauscht die Groß-/Kleinschreibung des ersten Buchstabens.T: Vertauscht die Groß-/Kleinschreibung aller Buchstaben.p<N>: Fügt das Zeichen<N>am Anfang ein.a<N>: Fügt das Zeichen<N>am Ende ein.s<old><new>: Ersetzt das erste Vorkommen von<old>durch<new>.S<old><new>: Ersetzt alle Vorkommen von<old>durch<new>.x<N>: Extrahiert einen Teilstring der LängeNvom Anfang.z<N>: Extrahiert einen Teilstring der LängeNvom Ende.D: Löscht das erste Zeichen.M: Löscht das letzte Zeichen.r: Kehrt das Wort um.
Beginnen wir damit, die Standarddatei john.conf anzuzeigen, um einige Beispiele für integrierte Regeln zu sehen.
Öffnen Sie die Datei john.conf mit nano:
nano /etc/john/john.conf
Scrollen Sie durch die Datei, um den Abschnitt [List.Rules:Wordlist] zu finden. Dort werden verschiedene Regelsets definiert. Sie könnten zum Beispiel Regeln wie c (erster Buchstabe großschreiben) oder a[0-9] (eine Ziffer anhängen) sehen.
Drücken Sie Ctrl+X, um nano zu beenden.
Versuchen wir nun eine einfache Regel direkt von der Kommandozeile aus mit der Option --stdout von JtR, die Regeln auf eine Wortliste anwendet und die Ergebnisse auf die Standardausgabe ausgibt, ohne zu versuchen, Hashes zu knacken. Dies ist nützlich zum Testen von Regeln.
Führen Sie den folgenden Befehl aus, um die Regel c (erster Buchstabe großschreiben) auf Ihre wordlist.txt anzuwenden:
john --wordlist=~/project/wordlist.txt --rules=single --stdout
Sie sollten die Wörter aus Ihrer wordlist.txt mit ihrem ersten großgeschriebenen Buchstaben sehen. Zum Beispiel wird aus "password" "Password".
Password
Secret
Labex
Test
Dies zeigt, wie eine einfache Regel Wörter transformieren kann. In den nächsten Schritten werden Sie komplexere Regeln erstellen und kombinieren.
Eine einfache Regel für Groß-/Kleinschreibung erstellen
In diesem Schritt erstellen Sie eine benutzerdefinierte Regeldatei, um Regeln für die Groß-/Kleinschreibung anzuwenden. Während das single-Regelset in JtR grundlegende Groß-/Kleinschreibung beinhaltet, gibt Ihnen die Erstellung Ihrer eigenen Regeldatei mehr Kontrolle und ermöglicht spezifischere Transformationen.
Erstellen Sie zuerst eine neue Datei namens my_rules.rule in Ihrem ~/project-Verzeichnis. Diese Datei wird Ihre benutzerdefinierten Regeln enthalten.
nano ~/project/my_rules.rule
Fügen Sie die folgenden Zeilen zur Datei my_rules.rule hinzu. Diese Regeln werden:
c: Den ersten Buchstaben großschreiben.C: Alle Buchstaben großschreiben.t: Die Groß-/Kleinschreibung des ersten Buchstabens umschalten (z. B. "password" -> "Password", "Password" -> "password").
c
C
t
Speichern Sie die Datei, indem Sie Ctrl+O und dann Enter drücken, und beenden Sie nano, indem Sie Ctrl+X drücken.
Wenden Sie nun diese benutzerdefinierten Regeln auf Ihre wordlist.txt an, indem Sie die Option --rules verwenden und Ihre neue Regeldatei angeben.
john --wordlist=~/project/wordlist.txt --rules=file:~/project/my_rules.rule --stdout
Beobachten Sie die Ausgabe. Sie sollten sehen, wie jedes Wort aus Ihrer wordlist.txt durch jede der von Ihnen definierten Regeln transformiert wird. Zum Beispiel wird "password" als "Password", "PASSWORD" und "Password" (aufgrund der Regel t, die auf das ursprüngliche "password" angewendet wird) erscheinen.
Password
SECRET
LABEX
TEST
password
PASSWORD
secret
SECRET
labex
LABEX
test
TEST
Password
Secret
Labex
Test
Dies zeigt, wie eine benutzerdefinierte Regeldatei definiert und verwendet wird. Jede Regel in der Datei wird sequenziell auf jedes Wort in der Wortliste angewendet.
Regeln für das Anhängen von Zahlen anwenden
In diesem Schritt lernen Sie, wie Sie Zahlen an Wörter anhängen können, indem Sie JtR-Regeln verwenden. Das Anhängen von Zahlen ist eine sehr gängige Passwortvariation, und JtR bietet leistungsstarke Befehle, um diese Variationen effizient zu generieren.
Der Befehl a<N> hängt ein Zeichen <N> an. Um Ziffern anzuhängen, können Sie Zeichenbereiche wie a[0-9] verwenden, um eine einzelne Ziffer von 0 bis 9 anzuhängen. Sie können dies auch mit anderen Regeln kombinieren.
Fügen wir der Datei my_rules.rule Regeln zum Anhängen von Zahlen hinzu. Öffnen Sie Ihre Regeldatei erneut:
nano ~/project/my_rules.rule
Fügen Sie die folgenden Zeilen am Ende der Datei hinzu. Diese Regeln werden:
a[0-9]: Hängt eine einzelne Ziffer (0-9) an das Wort an.a[0-9][0-9]: Hängt zwei Ziffern (00-99) an das Wort an. Diese Regel generiert 100 Variationen für jedes Wort.
a[0-9]
a[0-9][0-9]
Speichern Sie die Datei (Ctrl+O, Enter) und beenden Sie nano (Ctrl+X).
Wenden Sie nun diese aktualisierten Regeln auf Ihre wordlist.txt an. Da a[0-9][0-9] viele Variationen generiert, werden wir die Ausgabe zu Demonstrationszwecken mit head begrenzen.
john --wordlist=~/project/wordlist.txt --rules=file:~/project/my_rules.rule --stdout | head -n 50
Sie werden Wörter wie "password0", "password1", ..., "password00", "password01" usw. sehen. Der Befehl head -n 50 begrenzt die Ausgabe auf die ersten 50 Zeilen, da die vollständige Ausgabe sehr lang wäre.
Password
SECRET
LABEX
TEST
password
PASSWORD
secret
SECRET
labex
LABEX
test
TEST
Password
Secret
Labex
Test
password0
password1
password2
password3
password4
password5
password6
password7
password8
password9
secret0
secret1
secret2
secret3
secret4
secret5
secret6
secret7
secret8
secret9
labex0
labex1
labex2
labex3
labex4
labex5
labex6
labex7
labex8
labex9
test0
test1
test2
test3
test4
test5
Dies zeigt, wie effektiv Variationen mit angehängten Zahlen generiert werden können, was für das Knacken gängiger Passwortmuster entscheidend ist.
Mehrere Regeln für komplexe Transformationen kombinieren
In diesem Schritt lernen Sie, wie Sie mehrere Regelbefehle kombinieren, um komplexere Passworttransformationen zu erstellen. JtR ermöglicht es Ihnen, Regelbefehle auf einer einzigen Zeile zu verketten und sie sequenziell auf jedes Wort anzuwenden.
Erstellen wir eine Regel, die den ersten Buchstaben großschreibt und dann eine einzelne Ziffer anhängt.
Öffnen Sie Ihre Datei my_rules.rule erneut:
nano ~/project/my_rules.rule
Fügen Sie die folgende Regel am Ende der Datei hinzu. Diese Regel ca[0-9] bedeutet:
c: Den ersten Buchstaben großschreiben.a[0-9]: Eine einzelne Ziffer (0-9) anhängen.
ca[0-9]
Speichern Sie die Datei (Ctrl+O, Enter) und beenden Sie nano (Ctrl+X).
Wenden Sie nun diese aktualisierten Regeln auf Ihre wordlist.txt an und beobachten Sie die Ausgabe. Auch hier verwenden wir head, um die Ausgabe zu begrenzen.
john --wordlist=~/project/wordlist.txt --rules=file:~/project/my_rules.rule --stdout | head -n 50
Sie sollten Variationen wie "Password0", "Password1", "Secret0", "Secret1" usw. sehen.
Password
SECRET
LABEX
TEST
password
PASSWORD
secret
SECRET
labex
LABEX
test
TEST
Password
Secret
Labex
Test
password0
password1
password2
password3
password4
password5
password6
password7
password8
password9
secret0
secret1
secret2
secret3
secret4
secret5
secret6
secret7
secret8
secret9
labex0
labex1
labex2
labex3
labex4
labex5
labex6
labexex7
labex8
labex9
test0
test1
test2
test3
test4
test5
Password0
Password1
Password2
Password3
Password4
Password5
Password6
Password7
Password8
Password9
Dies demonstriert die Leistungsfähigkeit der Regelkombination. Sie können sehr spezifische und effektive Regelsets erstellen, indem Sie Befehle verketten. Zum Beispiel würde s@a!ca[0-9] das Zeichen '@' durch '!' ersetzen, den ersten Buchstaben großschreiben und dann eine Ziffer anhängen.
Benutzerdefinierte Regeln auf einer Wortliste testen
In diesem letzten Schritt verwenden Sie Ihre benutzerdefinierten Regeln, um zu versuchen, einen Dummy-Hash zu knacken. Dies simuliert ein reales Passwort-Knack-Szenario.
Erinnern Sie sich, dass im Setup ein Hash für das Wort "password" erstellt und in ~/project/hashes.txt gespeichert wurde. Der Hash ist user1:5f4dcc3b5aa765d61d8327deb882cf99 (MD5-Hash von "password").
Stellen Sie zunächst sicher, dass Ihre Datei my_rules.rule eine Regel enthält, die "password" oder eine Variation davon generiert, die mit dem Hash übereinstimmt. Für dieses Beispiel gehen wir davon aus, dass der Hash für das ursprüngliche Wort "password" ist. Wenn Sie einen Hash für "Password0" hätten, wäre Ihre Regel ca[0-9] nützlich.
Für diese Demonstration verwenden wir die ursprüngliche wordlist.txt und Ihre my_rules.rule, um zu versuchen, den Hash zu knacken.
Führen Sie John the Ripper mit Ihrer Hash-Datei, Wortliste und benutzerdefinierten Regeln aus:
john ~/project/hashes.txt --wordlist=~/project/wordlist.txt --rules=file:~/project/my_rules.rule
John the Ripper beginnt mit der Verarbeitung der Wortliste, wendet Ihre Regeln an und vergleicht die generierten Wörter mit dem Hash. Wenn er eine Übereinstimmung findet, wird das geknackte Passwort angezeigt.
Sie sollten eine Ausgabe ähnlich der folgenden sehen, die anzeigt, dass das Passwort geknackt wurde:
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ [MD5 SSSP])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100% (ETA: 00:00:00)
Session completed.
Um das geknackte Passwort erneut anzuzeigen, können Sie die Option --show verwenden:
john --show ~/project/hashes.txt
Dieser Befehl zeigt alle Passwörter an, die JtR erfolgreich geknackt und in seiner Pot-Datei gespeichert hat.
user1:password
1 password hash cracked, 0 left
Dieser letzte Schritt demonstriert die praktische Anwendung benutzerdefinierter Regeln beim Knacken von Passwörtern. Durch intelligentes Erstellen von Regeln können Sie die Effektivität Ihrer Wörterbuchangriffe gegen verschiedene Passwortmuster erheblich verbessern.
Zusammenfassung
In diesem Lab haben Sie erfolgreich gelernt, wie Sie die leistungsstarke Regel-Engine von John the Ripper für fortgeschrittenes Passwort-Cracking nutzen können. Sie haben mit dem Verständnis der grundlegenden Syntax von JtR-Regeln begonnen, einschließlich Befehlen für Großschreibung und Umschaltung der Groß-/Kleinschreibung. Anschließend haben Sie Ihre eigene benutzerdefinierte Regeldatei erstellt und Regeln zum Anhängen von Zahlen hinzugefügt, eine gängige Passwortvariation. Schließlich haben Sie mehrere Regelbefehle kombiniert, um komplexere Transformationen zu erstellen, und Ihre benutzerdefinierten Regeln angewendet, um einen Dummy-Hash zu knacken, was ein reales Szenario simuliert. Diese praktische Erfahrung hat Sie mit dem Wissen ausgestattet, anspruchsvolle Regelwerke zu definieren und anzuwenden, wodurch Ihre Fähigkeit, Passwörter zu knacken, die nicht direkt in einer Standard-Wortliste vorhanden sind, erheblich verbessert wird.


