Fortgeschrittene John the Ripper Kommandozeilen-Optionen

Kali LinuxBeginner
Jetzt üben

Einleitung

John the Ripper ist ein schneller Passwort-Cracker, der für viele Varianten von Unix, macOS, Windows und DOS verfügbar ist. Sein Hauptzweck ist die Erkennung schwacher Unix-Passwörter. Neben mehreren crypt(3)-Passwort-Hash-Typen, die am häufigsten auf verschiedenen Unix-Systemen vorkommen, werden in der Community-erweiterten Version auch Kerberos AFS und Windows LM-Hashes sowie Hunderte anderer Hash- und Cipher-Typen unterstützt.

In diesem Lab tauchen Sie tiefer in die Fähigkeiten von John the Ripper ein, indem Sie einige seiner erweiterten Kommandozeilenoptionen erkunden. Das Verständnis dieser Optionen ermöglicht es Ihnen, Ihre Passwort-Cracking-Versuche fein abzustimmen, langlaufende Sitzungen zu verwalten und die Ausgabe zur weiteren Analyse umzuleiten. Sie lernen, wie Sie Hash-Formate angeben, benutzerdefinierte Regeln anwenden, Cracking-Sitzungen verwalten und die Option --stdout zum Generieren von Wortlisten verwenden.

Die Option --format im Detail erkunden

In diesem Schritt lernen Sie, wie Sie die Option --format in John the Ripper verwenden. Diese Option ist entscheidend, wenn Sie mit verschiedenen Arten von Passwort-Hashes arbeiten, da sie John mitteilt, welchen Hash-Typ es erwarten und wie es diesen verarbeiten soll. John the Ripper unterstützt eine breite Palette von Hash-Formaten, von traditionellen Unix crypt-Hashes bis hin zu modernen anwendungsspezifischen Hashes.

Zuerst listen wir die verfügbaren Hash-Formate auf, die John the Ripper unterstützt. Dies gibt Ihnen eine Vorstellung von der Vielseitigkeit des Tools.

john --list=formats

Sie sehen eine lange Liste von Formaten. Zum Beispiel crypt für traditionelle Unix-Hashes, raw-md5 für einfache MD5-Hashes, nt für Windows NT-Hashes und viele mehr.

Versuchen wir nun, ein Passwort aus unserer Datei passwords.txt zu knacken, wobei wir uns speziell auf ein bekanntes Format konzentrieren. Wir haben einen Benutzer user1 mit einem SHA512 crypt-Hash. Wir können John explizit anweisen, das Format sha512crypt zu verwenden.

john --format=sha512crypt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Wenn das Passwort für user1 (das in unserer Konfiguration password123 ist) in der Wortliste enthalten ist, wird John es knacken.

Als Nächstes versuchen wir, einen LM-Hash (user5) und einen NT-Hash (user6) aus der Datei passwords.txt zu knacken. John kann Formate oft automatisch erkennen, aber die explizite Angabe mit --format kann schneller und zuverlässiger sein, insbesondere bei gemischten Hash-Typen oder weniger gängigen Formaten.

john --format=lm /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
john --format=nt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Sie sehen möglicherweise eine Ausgabe ähnlich dieser, die den Cracking-Prozess anzeigt:

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100% (ETA: 10:00) 1.000g/s 1.000p/s 1.000c/s 1.000C/s password123
Session completed

Dieser Schritt demonstriert die Bedeutung der Option --format für effizientes und genaues Passwort-Cracking.

Die Option --rules mit benutzerdefinierten Regeln nutzen

In diesem Schritt erkunden Sie die Option --rules, die es John the Ripper ermöglicht, eine Reihe von vordefinierten oder benutzerdefinierten Regeln auf Wörter aus einer Wortliste anzuwenden. Regeln sind mächtige Transformationen, die auf Wörter angewendet werden können, wie z. B. das Anhängen von Zahlen, das Ändern der Groß-/Kleinschreibung oder das Duplizieren von Zeichen, wodurch die Wahrscheinlichkeit, Passwörter zu knacken, die Variationen gängiger Wörter sind, erheblich erhöht wird.

John wird mit mehreren integrierten Regelwerken geliefert, wie z. B. Wordlist (Standard), Single und Jumbo. Sie können die verfügbaren Regelwerke auflisten mit:

john --list=rules

Dieser Befehl gibt eine Liste von Regelwerken aus.

Nun verwenden wir eine benutzerdefinierte Regeldatei. Wir haben in der Einrichtung eine einfache benutzerdefinierte Regeldatei namens custom_rules.txt erstellt, die Regeln wie :$[0-9] (eine Ziffer anhängen) und Az (den ersten Buchstaben großschreiben) enthält.

Versuchen wir, user1 erneut zu knacken, aber diesmal unter Verwendung unserer benutzerdefinierten Regeln. Angenommen, das Passwort von user1 war Password123 (großes P, dann 123). Unsere Wortliste enthält nur password. Die Regel Az wird den ersten Buchstaben großschreiben und :$[0-9] wird eine Ziffer anhängen.

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt /home/labex/project/passwords.txt --format=sha512crypt

Dieser Befehl wendet die Regeln aus custom_rules.txt auf jedes Wort in wordlist.txt an, bevor er sie gegen die Hashes versucht. Zum Beispiel könnte password zu Password, password0, password1 usw. und dann zu Password0, Password1 usw. werden.

Sie können Regeln auch mit der Option --stdout (die wir im nächsten Schritt behandeln werden) kombinieren, um zu sehen, welche Wörter von Ihren Regeln generiert werden:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout

Dieser Befehl gibt alle Wörter, die durch Anwendung von custom_rules.txt auf wordlist.txt generiert wurden, auf Ihrem Terminal aus. Dies ist nützlich zum Debuggen Ihrer Regelwerke.

Die Option --rules ist ein leistungsstarkes Merkmal zur Erweiterung der Effektivität von Wortlistenangriffen durch die Generierung gängiger Passwortvariationen.

Die Optionen --session und --restore verstehen

In diesem Schritt lernen Sie die Optionen --session und --restore kennen, die für die Verwaltung langwieriger Passwort-Cracking-Aufgaben unerlässlich sind. Das Knacken komplexer Passwörter kann Stunden, Tage oder sogar Wochen dauern. Diese Optionen ermöglichen es Ihnen, den aktuellen Zustand einer Cracking-Sitzung zu speichern und sie später fortzusetzen, ohne den Fortschritt zu verlieren.

Wenn John the Ripper ausgeführt wird, erstellt es automatisch eine Sitzungsdatei (normalerweise john.rec im Ausführungsverzeichnis), um seinen Zustand zu speichern. Die Verwendung der Option --session ermöglicht es Ihnen jedoch, einen benutzerdefinierten Namen für diese Sitzungsdatei anzugeben, was nützlich ist, wenn Sie mehrere Cracking-Aufgaben gleichzeitig ausführen oder spezifische Sitzungsprotokolle aufbewahren möchten.

Beginnen wir eine Cracking-Sitzung für user1 und geben einen Sitzungsnamen an:

john --session=my_cracking_session /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

Lassen Sie das Cracking einige Sekunden laufen und drücken Sie dann Ctrl+C, um es zu unterbrechen. Sie sehen eine Meldung, die darauf hinweist, dass die Sitzung gespeichert wurde.

Listen Sie nun die Dateien in Ihrem aktuellen Verzeichnis auf, um die Sitzungsdatei zu sehen:

ls -l /home/labex/project/

Sie sollten eine Datei namens my_cracking_session.rec (oder ähnlich, abhängig von der Version und Konfiguration von John) sehen.

Um die unterbrochene Sitzung fortzusetzen, verwenden Sie die Option --restore mit dem Sitzungsnamen:

john --restore=my_cracking_session

John wird genau dort weitermachen, wo es aufgehört hat. Dies ist unglaublich nützlich für die Verwaltung von groß angelegten Cracking-Operationen oder wenn Ihr System neu gestartet werden muss.

Wenn Sie mit --session keinen Sitzungsnamen angeben, verwendet John eine Standard-Sitzungsdatei. Die Verwendung von --restore ohne Sitzungsnamen versucht, die Standardsitzung wiederherzustellen.

john --restore

Dieser Schritt hebt hervor, wie Sie Ihre Passwort-Cracking-Bemühungen effektiv verwalten und fortsetzen können, um sicherzustellen, dass kein Fortschritt verloren geht.

Experimentieren mit --stdout für die Ausgabeumleitung

In diesem Schritt lernen Sie die Option --stdout kennen, die äußerst nützlich ist, um Wortlisten zu generieren oder Regelwerke zu testen, ohne tatsächlich einen Cracking-Versuch durchzuführen. Wenn sie mit --stdout verwendet wird, gibt John the Ripper die generierten Kandidatenpasswörter an die Standardausgabe aus, die dann in eine Datei umgeleitet oder an ein anderes Werkzeug weitergeleitet werden können.

Dies ist besonders mächtig, wenn es mit Wortlisten und Regeln kombiniert wird. Sie können John verwenden, um hochgradig angepasste Wortlisten basierend auf vorhandenen und spezifischen Regeln zu erstellen.

Lassen Sie uns eine Wortliste generieren, indem wir unsere custom_rules.txt auf wordlist.txt anwenden und die Ausgabe in eine neue Datei namens generated_wordlist.txt umleiten:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout > /home/labex/project/generated_wordlist.txt

Überprüfen Sie nach Ausführung des Befehls den Inhalt der neu erstellten Datei:

cat /home/labex/project/generated_wordlist.txt

Sie sollten Wörter wie password, Password, password0, password1 usw. sehen, die von den Regeln generiert wurden.

Sie können --stdout auch verwenden, um Permutationen eines einzelnen Wortes zu generieren. Zum Beispiel, um Variationen des Wortes "test" zu generieren:

echo "test" | john --pipe --rules=/home/labex/project/custom_rules.txt --stdout

Hier leitet echo "test" | john --pipe das Wort "test" in die Standardeingabe von John weiter, und --pipe weist John an, von der Standardeingabe zu lesen. --stdout gibt dann die mit Regeln angewendeten Variationen aus.

Die Option --stdout ist ein vielseitiges Merkmal zur Vorverarbeitung von Wortlisten, zur Erstellung benutzerdefinierter Wörterbücher für andere Cracking-Werkzeuge oder einfach zum Verständnis, wie Ihre Regeln Wörter transformieren.

Weitere nützliche Kommandozeilen-Flags entdecken

In diesem letzten Schritt werden wir kurz einige weitere nützliche Kommandozeilen-Flags untersuchen, die Ihre Nutzung von John the Ripper verbessern können. Obwohl wir uns nicht im Detail mit jedem einzelnen befassen werden, kann das Wissen um ihre Existenz Ihnen in verschiedenen Szenarien helfen.

  1. --show: Diese Option zeigt die geknackten Passwörter aus einer früheren Sitzung an. Nach dem Knacken von Passwörtern speichert John sie in seiner john.pot-Datei. Sie können sie mit folgendem Befehl anzeigen:

    john --show /home/labex/project/passwords.txt

    Dies zeigt alle Passwörter an, die John erfolgreich aus der Datei passwords.txt geknackt hat.

  2. --incremental: Dies ist ein leistungsstarker Modus für Brute-Force-Angriffe. John generiert Passwörter basierend auf Zeichensätzen und Längen. Sie können einen Modus angeben (z. B. alnum, digits, all).

    ## Dieser Befehl wird lange laufen, daher demonstrieren wir nur seine Verwendung.
    ## Lassen Sie ihn NICHT zu lange laufen. Drücken Sie Ctrl+C, um ihn nach einigen Sekunden zu stoppen.
    john --incremental=digits /home/labex/project/passwords.txt --format=raw-md5

    Dieser Befehl versucht, Passwörter zu knacken, indem er Kombinationen von Ziffern generiert.

  3. --fork=<N>: Diese Option ermöglicht es John, mehrere CPU-Kerne oder Threads zum Knacken zu verwenden, wobei <N> die Anzahl der zu verwendenden Forks (Prozesse) ist. Dies kann das Knacken auf Multi-Core-Systemen erheblich beschleunigen.

    john --fork=2 /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

    Dies versucht, Passwörter mit 2 CPU-Kernen zu knacken.

  4. --mask: Diese Option ermöglicht es Ihnen, Masken-Angriffe durchzuführen, bei denen Sie ein bestimmtes Muster für das Passwort definieren. Zum Beispiel würde ?l?l?l?d?d alle 3-Buchstaben- und 2-Ziffern-Kombinationen ausprobieren.

    ## Dieser Befehl wird lange laufen, daher demonstrieren wir nur seine Verwendung.
    ## Lassen Sie ihn NICHT zu lange laufen. Drücken Sie Ctrl+C, um ihn nach einigen Sekunden zu stoppen.
    john --mask=?l?l?l?d?d /home/labex/project/passwords.txt --format=raw-md5

    Dieser Befehl versucht, Passwörter zu knacken, die der angegebenen Maske entsprechen.

Dies sind nur einige der vielen erweiterten Optionen, die in John the Ripper verfügbar sind. Die Erkundung der man john-Seite oder von john --help wird noch mehr Möglichkeiten für spezialisierte Passwort-Auditing- und Cracking-Aufgaben aufzeigen.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit mehreren erweiterten Kommandozeilenoptionen für John the Ripper gesammelt. Sie haben gelernt, wie Sie Hash-Formate präzise mit --format angeben, leistungsstarke Transformationen auf Wortlisten mit --rules und benutzerdefinierten Regeldateien anwenden und langlaufende Cracking-Sitzungen mit --session und --restore verwalten. Darüber hinaus haben Sie die Vielseitigkeit von --stdout zur Generierung benutzerdefinierter Wortlisten erkundet und kurz andere nützliche Flags wie --show, --incremental, --fork und --mask angesprochen.

Die Beherrschung dieser Optionen wird Ihre Fähigkeit, effektive Passwort-Audits und Cracking durchzuführen, erheblich verbessern und Sie im Umgang mit John the Ripper für verschiedene Sicherheitsaufgaben versierter machen. Erkunden Sie weiterhin die umfangreiche Dokumentation von John, um noch mehr fortgeschrittene Funktionen und Techniken zu entdecken.