Häufige John the Ripper Probleme beheben

Kali LinuxBeginner
Jetzt üben

Einleitung

John the Ripper (JtR) ist ein leistungsstarkes und weit verbreitetes Open-Source-Tool zum Knacken von Passwörtern. Obwohl es unglaublich effektiv ist, können Benutzer, insbesondere Anfänger, auf häufige Probleme stoßen, die ihren Fortschritt behindern. Diese Probleme können von kryptischen Fehlermeldungen bis hin zu Leistungseinbußen reichen.

In diesem Lab lernen Sie, wie Sie einige der häufigsten Probleme bei der Verwendung von John the Ripper beheben. Wir werden Fehler wie "No hashes loaded" (Keine Hashes geladen) behandeln, ungültige Hash-Formate bearbeiten, Leistungsprobleme angehen, beschädigte Sitzungsdateien handhaben und lernen, wo Sie Hilfe finden, wenn Sie nicht weiterkommen. Am Ende dieses Labs werden Sie besser gerüstet sein, um JtR-Probleme effizient zu diagnostizieren und zu lösen.

Fehler "No hashes loaded" beheben

In diesem Schritt untersuchen wir einen der häufigsten Fehler in John the Ripper: No password hashes loaded (Keine Passwort-Hashes geladen). Dieser Fehler tritt typischerweise aus zwei Hauptgründen auf: John hat bereits alle Hashes in der angegebenen Datei geknackt, oder die Datei liegt nicht in einem Format vor, das John verstehen kann.

Zuerst führen wir John auf einer gültigen Hash-Datei aus. Das Setup-Skript hat bereits eine Datei namens shadow.txt in Ihrem aktuellen Verzeichnis (~/project) erstellt, die den Passwort-Hash eines Benutzers in einem von John erkannten Format enthält.

Versuchen wir, ihn mit einer einfachen Wortliste zu knacken.

john --wordlist=pass.list shadow.txt

Sie sollten eine Ausgabe sehen, die anzeigt, dass John einen Hash geladen hat und versucht, ihn zu knacken. Das Passwort sollte schnell gefunden werden.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (dummyuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Nachdem das Passwort geknackt wurde, speichert John es in einer Datei namens john.pot. Versuchen wir, denselben Befehl erneut auszuführen.

john --wordlist=pass.list shadow.txt

Dieses Mal sehen Sie den Fehler.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

Das liegt daran, dass John die Datei john.pot vor dem Start überprüft und alle bereits geknackten Hashes ignoriert. Sie können den Inhalt der Datei john.pot anzeigen, um dies zu bestätigen.

cat ~/.john/john.pot

Die Ausgabe zeigt den Hash und das geknackte Passwort.

$1$notarealhash$b5gQ1P2kPiyP2t.OqI0kS1:password123

Ein weiterer Grund für diesen Fehler ist ein ungültiges Dateiformat. Erstellen wir eine Datei, die keine Hashes enthält.

echo "this is just a text file" > plain.txt

Versuchen Sie nun, John darauf auszuführen.

john plain.txt

Sie sehen denselben Fehler "No password hashes loaded", da John in der Datei keine Daten finden konnte, die wie ein Passwort-Hash aussehen. Stellen Sie immer sicher, dass Ihre Zieldatei Hashes in einem unterstützten Format enthält.

Fehler "Invalid hash type" beheben

In diesem Schritt befassen wir uns mit Problemen im Zusammenhang mit Hash-Typen. Manchmal kann John den Hash-Typ nicht automatisch erkennen, oder ein Benutzer gibt den falschen Typ über das Flag --format an, was zu Fehlern oder fehlgeschlagenen Knackversuchen führt.

Zuerst sehen wir, was passiert, wenn John auf eine Datei mit einer fehlerhaften Hash-Zeichenkette stößt. Zu diesem Zweck haben wir eine Datei namens invalid_hashes.txt.

john invalid_hashes.txt

John analysiert die Datei und meldet, dass keine gültigen Hashes geladen werden konnten, ähnlich wie beim Fehler im vorherigen Schritt.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

Nun verwenden wir eine Datei mit einem gültigen Hash, geben aber das falsche Format an. Unsere Datei hashes_md5.txt enthält einen Standard raw-MD5-Hash, aber wir teilen John mit, dass es sich um einen NT-Hash handelt.

john --wordlist=pass.list --format=nt hashes_md5.txt

John gibt eine Warnung oder einen Fehler aus, da die Hash-Daten nicht mit dem angegebenen Format übereinstimmen.

Warning: invalid ciphertext ignored: user1:5d41402abc4b2a76b9719d911017c592
No password hashes loaded (see FAQ)

Um dies zu beheben, müssen Sie das korrekte Hash-Format angeben. Wenn Sie wissen, dass das Format raw-MD5 ist, können Sie es direkt angeben. Dies ist oft schneller, als John die automatische Erkennung zu überlassen.

Führen wir den Befehl mit dem korrekten Format aus.

john --wordlist=pass.list --format=raw-md5 hashes_md5.txt

Dieses Mal ist der Befehl erfolgreich und knackt das Passwort.

Using default input encoding: UTF-8
Loaded 1 password hash (raw-MD5 [MD5 128/128 SSE2-16])
Cost 1 (iteration count) is 1 for all loaded hashes
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (user1)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 1234Kp/s 1234Kc/s 1234KC/s 123..labex
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Wenn Sie sich über den Hash-Typ nicht sicher sind, können Sie das Flag --format weglassen und John versuchen lassen, ihn automatisch zu erkennen. Für mehrdeutige oder nicht standardmäßige Hashes ist die Angabe des Formats jedoch der beste Weg, um den Erfolg sicherzustellen.

Leistungshindernisse beheben

In diesem Schritt untersuchen wir, wie Leistungsprobleme identifiziert und behoben werden können. Das Knacken von Passwörtern kann eine sehr ressourcenintensive Aufgabe sein, und eine langsame Leistung kann sie unpraktikabel machen.

Eine Schlüsselmetrik für die Leistung in John the Ripper ist "Kandidaten pro Sekunde" (c/s). Sie können einen Benchmark ausführen, um zu sehen, wie gut Ihr System mit verschiedenen Hashing-Algorithmen funktioniert.

john --test

Dieser Befehl führt eine Reihe von Benchmarks aus. Achten Sie in der Ausgabe auf die c/s-Raten für verschiedene Algorithmen.

Benchmarking: descrypt, traditional crypt(3) [DES 128/128 SSE2-16]... DONE
Many salts:	1234K c/s real, 1234K c/s virtual
Only one salt:	1111K c/s real, 1111K c/s virtual

... (viele andere Algorithmen) ...

Benchmarking: raw-MD5 [MD5 128/128 SSE2-16]... DONE
Raw:	45678K c/s real, 45678K c/s virtual

Eine der effektivsten Methoden zur Verbesserung der Leistung auf einem Multi-Core-System ist die Nutzung paralleler Verarbeitung. John kann dies mit der Option --fork=N tun, wobei N die Anzahl der zu startenden Prozesse ist.

Bevor wir dies testen, löschen wir die Datei john.pot, damit wir den Hash aus Schritt 1 erneut knacken können.

rm ~/.john/john.pot

Führen wir nun eine Single-Core-Knack-Sitzung auf shadow.txt aus. Während sie läuft, drücken Sie eine beliebige Taste (z. B. Enter), um den Status anzuzeigen. Beachten Sie die c/s-Rate.

john --wordlist=pass.list shadow.txt

Drücken Sie nach einem Moment Enter. Sie sehen eine Statuszeile. Drücken Sie dann Ctrl+C, um sie zu stoppen.

Versuchen wir es nun erneut mit zwei parallelen Prozessen.

john --fork=2 --wordlist=pass.list shadow.txt

Dieses Mal wird John zwei CPU-Kerne nutzen, um die Aufgabe zu bearbeiten. Wenn Sie den Status überprüfen, sollte die Gesamt-c/s-Rate deutlich höher sein, fast doppelt so hoch wie die Single-Core-Rate. Dies kann die für eine Knack-Sitzung erforderliche Zeit drastisch verkürzen.

Weitere Tipps zur Leistungsoptimierung sind:

  • Verwendung gezielter Wortlisten: Eine kleinere, relevantere Wortliste ist schneller als eine riesige, generische.
  • Angabe des Formats: Wie in Schritt 2 gezeigt, vermeidet die Verwendung von --format den Mehraufwand der automatischen Erkennung.

Beschädigte Sitzungsdateien behandeln

In diesem Schritt lernen wir, wie man mit einer beschädigten Sitzungsdatei umgeht. John the Ripper speichert seinen Fortschritt automatisch in einer Sitzungsdatei (mit der Erweiterung .rec), die sich im Verzeichnis ~/.john/ befindet. Dies ermöglicht es Ihnen, lang laufende Knack-Sitzungen zu pausieren und fortzusetzen. Wenn diese Datei jedoch beschädigt wird, können Sie Ihre Sitzung nicht wiederherstellen.

Beginnen wir eine neue Sitzung. Wir nennen sie my_session.

john --session=my_session --wordlist=pass.list corrupt_me.txt

Lassen Sie den Befehl einige Sekunden laufen und drücken Sie dann Ctrl+C, um ihn ordnungsgemäß zu beenden. John speichert seinen Fortschritt.

Session aborted

Sie können die erstellte Sitzungsdatei sehen.

ls ~/.john/
john.log  john.pot  my_session.rec

Simulieren wir nun eine beschädigte Datei, indem wir einige Müll-Daten anhängen.

echo "THIS IS CORRUPTED DATA" >> ~/.john/my_session.rec

Da die Sitzungsdatei beschädigt ist, versuchen wir, unsere Arbeit fortzusetzen.

john --restore=my_session

John kann die Wiederherstellungsdatei nicht parsen und wird wahrscheinlich mit einer Fehlermeldung beendet. Der genaue Fehler kann variieren, aber er wird ein Problem mit der .rec-Datei anzeigen.

Error in recovery file: ~/.john/my_session.rec

Wenn dies geschieht, ist die einzige Lösung, die beschädigte Sitzungsdatei zu entfernen. Das bedeutet, dass Sie den Fortschritt für diese spezielle Sitzung verlieren und von vorne beginnen müssen. Alle Passwörter, die bereits erfolgreich geknackt wurden, sind jedoch sicher in der john.pot-Datei gespeichert.

Entfernen wir die fehlerhafte Datei.

rm ~/.john/my_session.rec

Nun können Sie die Sitzung erneut von Anfang an starten. Dies ist ein wichtiger Schritt zur Fehlerbehebung, um unerwartete Abstürze oder Systemabschaltungen während eines Knackversuchs zu überstehen.

Hilfe von der John the Ripper Community suchen

In diesem Schritt behandeln wir, was zu tun ist, wenn Sie alles versucht haben und immer noch nicht weiterkommen. Die John the Ripper Community ist eine ausgezeichnete Ressource, aber um effektive Hilfe zu erhalten, müssen Sie die richtigen Informationen bereitstellen.

Der primäre Ort für Community-Support ist die Mailingliste john-users. Bevor Sie posten, ist es eine gute Praxis, die Archive zu durchsuchen, um zu sehen, ob Ihre Frage bereits beantwortet wurde.

Wenn Sie um Hilfe bitten müssen, ist die Bereitstellung klarer und vollständiger Informationen entscheidend. Hier ist, was Sie immer in Ihre Anfrage aufnehmen sollten:

  1. John the Ripper Version: Verschiedene Versionen haben unterschiedliche Funktionen und Fehler.
  2. Der genaue Befehl: Der vollständige Befehl, den Sie zum Ausführen von John verwendet haben.
  3. Die vollständige Ausgabe: Die gesamte Ausgabe des Befehls, einschließlich aller Fehlermeldungen.
  4. Betriebssystem: Das von Ihnen verwendete Betriebssystem (z. B. Ubuntu 22.04, Windows 10).
  5. Hash-Beispiel: Ein Beispiel für den Hash, den Sie zu knacken versuchen (sofern er nicht sensibel ist).

Sie können Ihre John the Ripper-Version mit dem Flag --version abrufen. Führen wir es jetzt aus.

john --version

Die Ausgabe wird etwa so aussehen:

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]

Zu wissen, wie man diese Informationen sammelt, wird es für Community-Mitglieder viel einfacher machen, Ihr Problem zu verstehen und eine hilfreiche Lösung anzubieten. Denken Sie daran, höflich und geduldig zu sein, wenn Sie in Open-Source-Communities um Hilfe bitten.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit der Fehlerbehebung einiger der häufigsten Probleme mit John the Ripper gesammelt.

Sie haben gelernt, wie Sie:

  • Den Fehler No hashes loaded diagnostizieren, indem Sie die Datei john.pot auf bereits geknackte Passwörter überprüfen und das Eingabedateiformat verifizieren.
  • Probleme mit dem Hash-Typ lösen, indem Sie das Flag --format verwenden, um den korrekten Algorithmus anzugeben.
  • Leistungsengpässe beheben, indem Sie Benchmarks ausführen und die Option --fork für die parallele Verarbeitung verwenden.
  • Sich von einem fehlgeschlagenen Knackversuch erholen, indem Sie eine beschädigte Sitzungsdatei (.rec) entfernen.
  • Notwendige Informationen sammeln, wie z. B. die JtR-Version und die Befehlsausgabe, um effektiv Hilfe von der Community zu erhalten.

Mit diesen Fähigkeiten sind Sie nun besser darauf vorbereitet, John the Ripper effektiver einzusetzen und auftretende Probleme zu lösen.