John the Ripper und benutzerdefinierte Zeichensätze

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie die erweiterten Fähigkeiten von John the Ripper erkunden, insbesondere wie Sie benutzerdefinierte Zeichensätze nutzen können. John the Ripper ist ein leistungsstarkes Open-Source-Tool zum Knacken von Passwörtern. Während es vordefinierte Zeichensätze mitbringt, kann die Definition eigener Zeichensätze die Effizienz beim Knacken erheblich verbessern, insbesondere bei der Arbeit mit spezifischen Passwortrichtlinien oder nicht standardmäßigen Zeichen. Sie lernen, wie Sie diese benutzerdefinierten Sätze für verschiedene Szenarien erstellen, anwenden und optimieren und gewinnen so ein tieferes Verständnis dafür, wie sie den Knackprozess beeinflussen.

Definieren eines benutzerdefinierten Zeichensatzes für den Inkrementalmodus

In diesem Schritt lernen Sie, wie Sie einen benutzerdefinierten Zeichensatz für den Inkrementalmodus von John the Ripper definieren. Der Inkrementalmodus ist eine leistungsstarke Knackmethode, die alle möglichen Zeichenkombinationen bis zu einer bestimmten Länge ausprobiert. Standardmäßig verwendet John einen großen Zeichensatz, was ineffizient sein kann, wenn Sie wissen, dass das Passwort einen begrenzten Zeichensatz verwendet (z. B. nur Kleinbuchstaben und Ziffern).

Zuerst erstellen wir einen einfachen Passwort-Hash, den wir mit einem benutzerdefinierten Zeichensatz zu knacken versuchen werden. Wir erstellen einen Hash für das Passwort abc und speichern ihn in einer Datei namens hash_to_crack.txt.

echo "user1:\$6\$salt1\$y.g.a.hash.for.abc" > ~/project/hash_to_crack.txt

Nun definieren wir einen benutzerdefinierten Zeichensatz, der nur Kleinbuchstaben enthält. Wir speichern diese Definition in einer Datei namens custom.chr im Verzeichnis ~/project. Diese Datei teilt John the Ripper mit, welche Zeichen beim Knacken verwendet werden sollen.

nano ~/project/custom.chr

Fügen Sie den folgenden Inhalt zur Datei custom.chr hinzu:

[CharSet]
charset = abcdefghijklmnopqrstuvwxyz

Speichern Sie die Datei, indem Sie Strg+X, dann Y und Enter drücken.

Nun verwenden wir John the Ripper mit diesem benutzerdefinierten Zeichensatz im Inkrementalmodus, um die Datei hash_to_crack.txt zu knacken. Die Option --incremental weist John an, den Inkrementalmodus zu verwenden, und --external=custom.chr gibt unseren benutzerdefinierten Zeichensatz an.

john --format=sha512crypt --incremental=custom --external=~/project/custom.chr ~/project/hash_to_crack.txt

Sie sollten sehen, wie John versucht, den Hash zu knacken. Sobald er das Passwort gefunden hat, wird es angezeigt.

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
abc              (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100.0g/s 100p/s 100c/s 100C/s abc
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Um das geknackte Passwort anzuzeigen, verwenden Sie die Option --show:

john --show ~/project/hash_to_crack.txt
user1:abc

1 password hash cracked, 0 left

Dies zeigt, wie ein benutzerdefinierter Zeichensatz verwendet werden kann, um den Suchraum einzugrenzen und den Knackprozess effizienter zu gestalten, wenn Sie Kenntnisse über die Zusammensetzung des Passworts haben.

Anwenden benutzerdefinierter Zeichensätze auf spezifische Szenarien

In diesem Schritt wenden Sie benutzerdefinierte Zeichensätze auf spezifischere Szenarien an und demonstrieren deren Flexibilität. Wir erstellen einen neuen Hash und einen verfeinerten benutzerdefinierten Zeichensatz.

Nehmen wir an, wir haben ein Passwort, das nur aus Ziffern besteht, zum Beispiel 1234. Zuerst erstellen wir einen Hash für dieses Passwort.

echo "user2:\$6\$salt2\$y.g.a.hash.for.1234" > ~/project/numeric_hash.txt

Nun definieren wir einen benutzerdefinierten Zeichensatz, der nur Ziffern (0-9) enthält. Wir nennen diese Datei digits.chr.

nano ~/project/digits.chr

Fügen Sie den folgenden Inhalt zu digits.chr hinzu:

[CharSet]
charset = 0123456789

Speichern Sie die Datei (Strg+X, Y, Enter).

Als Nächstes verwenden wir John the Ripper mit diesem neuen Zeichensatz, um die Datei numeric_hash.txt zu knacken.

john --format=sha512crypt --incremental=digits --external=~/project/digits.chr ~/project/numeric_hash.txt

Sie sollten sehen, wie John das Passwort 1234 schnell knackt.

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
1234             (user2)
1g 0:00:00:00 DONE (2023-10-27 10:05) 100.0g/s 100p/s 100c/s 100C/s 1234
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Um das geknackte Passwort zu bestätigen:

john --show ~/project/numeric_hash.txt
user2:1234

1 password hash cracked, 0 left

Dieses Szenario verdeutlicht, wie benutzerdefinierte Zeichensätze äußerst effektiv sein können, wenn Sie präzise Informationen über die Zeichenzusammensetzung des Passworts haben, wodurch die Knackzeit im Vergleich zur Verwendung eines allgemeinen Zeichensatzes erheblich verkürzt wird.

Auswirkungen der Größe des Zeichensatzes verstehen

In diesem Schritt beobachten Sie die Auswirkungen der Größe des Zeichensatzes auf den Knackprozess. Ein größerer Zeichensatz bedeutet mehr mögliche Kombinationen, was zu längeren Knackzeiten führt.

Erstellen wir einen neuen Hash für ein Passwort, das sowohl Kleinbuchstaben als auch Ziffern verwendet, z. B. a1b2.

echo "user3:\$6\$salt3\$y.g.a.hash.for.a1b2" > ~/project/alphanum_hash.txt

Nun definieren wir einen benutzerdefinierten Zeichensatz, der sowohl Kleinbuchstaben als auch Ziffern enthält. Wir nennen diese Datei alphanum.chr.

nano ~/project/alphanum.chr

Fügen Sie den folgenden Inhalt zu alphanum.chr hinzu:

[CharSet]
charset = abcdefghijklmnopqrstuvwxyz0123456789

Speichern Sie die Datei (Strg+X, Y, Enter).

Nun verwenden wir John the Ripper mit diesem kombinierten Zeichensatz.

john --format=sha512crypt --incremental=alphanum --external=~/project/alphanum.chr ~/project/alphanum_hash.txt

Sie werden feststellen, dass das Knacken von a1b2 mit diesem größeren Zeichensatz etwas länger dauern kann als das Knacken von abc oder 1234 mit ihren jeweiligen kleineren Sätzen, obwohl die Passwortlänge ähnlich ist. Dies liegt daran, dass der Suchraum (die Anzahl der möglichen Kombinationen) erheblich größer ist.

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
a1b2             (user3)
1g 0:00:00:00 DONE (2023-10-27 10:10) 100.0g/s 100p/s 100c/s 100C/s a1b2
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Um das geknackte Passwort zu bestätigen:

john --show ~/project/alphanum_hash.txt
user3:a1b2

1 password hash cracked, 0 left

Dieser Schritt veranschaulicht den direkten Zusammenhang zwischen der Größe Ihres Zeichensatzes und der für das Knacken erforderlichen Zeit. Die Optimierung Ihres Zeichensatzes, indem Sie ihn basierend auf den verfügbaren Informationen so klein und spezifisch wie möglich gestalten, ist entscheidend für effizientes Passwortknacken.

Optimierung von benutzerdefinierten Zeichensatzdefinitionen

In diesem Schritt lernen Sie, wie Sie benutzerdefinierte Zeichensatzdefinitionen weiter optimieren können, indem Sie verschiedene Zeichentypen kombinieren und die integrierten Zeichenklassen von John verwenden. John the Ripper ermöglicht es Ihnen, Zeichensätze mithilfe vordefinierter Klassen wie ?l für Kleinbuchstaben, ?u für Großbuchstaben, ?d für Ziffern und ?s für Symbole zu definieren.

Erstellen wir einen Hash für ein Passwort wie Pass123!.

echo "user4:\$6\$salt4\$y.g.a.hash.for.Pass123!" > ~/project/complex_hash.txt

Anstatt alle Zeichen aufzulisten, können wir die Zeichenklassen von John verwenden. Erstellen wir eine Datei namens complex.chr, die diese Klassen kombiniert.

nano ~/project/complex.chr

Fügen Sie den folgenden Inhalt zu complex.chr hinzu:

[CharSet]
charset = ?l?u?d?s

Speichern Sie die Datei (Strg+X, Y, Enter).

Hier steht ?l für Kleinbuchstaben, ?u für Großbuchstaben, ?d für Ziffern und ?s für Symbole. Dies ist eine prägnantere Methode, um einen breiten Zeichensatz zu definieren.

Nun verwenden wir John the Ripper mit diesem optimierten Zeichensatz.

john --format=sha512crypt --incremental=complex --external=~/project/complex.chr ~/project/complex_hash.txt

John wird nun versuchen, das Passwort mithilfe aller Kombinationen von Kleinbuchstaben, Großbuchstaben, Ziffern und Symbolen zu knacken.

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
Pass123!         (user4)
1g 0:00:00:00 DONE (2023-10-27 10:15) 100.0g/s 100p/s 100c/s 100C/s Pass123!
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Um das geknackte Passwort zu bestätigen:

john --show ~/project/complex_hash.txt
user4:Pass123!

1 password hash cracked, 0 left

Diese Methode ist effizient für die Definition gängiger Zeichensätze, ohne jedes Zeichen manuell auflisten zu müssen. Sie bietet eine gute Balance zwischen Spezifität und einfacher Definition für typische Passwortzusammensetzungen.

Erstellen von Zeichensätzen für Nicht-Englische Passwörter

In diesem Schritt lernen Sie, wie Sie benutzerdefinierte Zeichensätze für nicht-englische Passwörter erstellen, die oft Sonderzeichen enthalten, die in Standard-Englisch-Zeichensätzen nicht vorkommen. Dies ist entscheidend für das Knacken von Passwörtern in verschiedenen Sprachen.

Nehmen wir an, wir haben ein Passwort, das einen gängigen deutschen Umlaut enthält, z. B. schön. Zuerst erstellen wir einen Hash für dieses Passwort.

echo "user5:\$6\$salt5\$y.g.a.hash.for.schön" > ~/project/german_hash.txt

Nun müssen wir einen benutzerdefinierten Zeichensatz definieren, der die spezifischen nicht-englischen Zeichen enthält. Für schön benötigen wir ö.

nano ~/project/german.chr

Fügen Sie den folgenden Inhalt zu german.chr hinzu. Stellen Sie sicher, dass das Zeichen ö enthalten ist.

[CharSet]
charset = abcdefghijklmnopqrstuvwxyzäöüß

Speichern Sie die Datei (Strg+X, Y, Enter).

Nun verwenden wir John the Ripper mit diesem benutzerdefinierten Zeichensatz. Es ist wichtig, die Kodierung anzugeben, wenn die Zeichen keine Standard-ASCII-Zeichen sind. John verarbeitet UTF-8 in der Regel gut, aber eine explizite Kodierung kann manchmal notwendig sein.

john --format=sha512crypt --incremental=german --external=~/project/german.chr --input-encoding=UTF-8 ~/project/german_hash.txt

John wird nun versuchen, das Passwort zu knacken, einschließlich der speziellen deutschen Zeichen.

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Will run till completion
Press 'q' or Ctrl-C to abort, almost any other key for status
schön            (user5)
1g 0:00:00:00 DONE (2023-10-27 10:20) 100.0g/s 100p/s 100c/s 100C/s schön
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Um das geknackte Passwort zu bestätigen:

john --show ~/project/german_hash.txt
user5:schön

1 password hash cracked, 0 left

Dieser Schritt zeigt die Bedeutung der Einbeziehung spezifischer nicht-englischer Zeichen in Ihre benutzerdefinierten Zeichensätze bei der Bearbeitung internationaler Passwörter. Ohne diese Zeichen könnte John the Ripper solche Passwörter im inkrementellen Modus nicht knacken.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit der Definition und Nutzung benutzerdefinierter Zeichensätze mit John the Ripper gesammelt. Sie haben gelernt, wie Sie spezifische Zeichensatzdateien (.chr) erstellen, diese im inkrementellen Knackmodus anwenden und den erheblichen Einfluss der Größe des Zeichensatzes auf die Effizienz des Knackens verstehen. Darüber hinaus haben Sie untersucht, wie Sie Zeichensatzdefinitionen mithilfe der integrierten Zeichenklassen von John optimieren und wie Sie nicht-englische Passwörter durch Einbeziehung von Sonderzeichen behandeln. Die Beherrschung benutzerdefinierter Zeichensätze ist eine entscheidende Fähigkeit für effizientes und gezieltes Passwortknacken, die es Ihnen ermöglicht, den Suchraum einzugrenzen und den Prozess basierend auf bekannten Passwortmerkmalen zu beschleunigen.