Hashes aus einer Linux Shadow-Datei extrahieren und knacken

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Labor lernen Sie den grundlegenden Prozess der Linux-Passwortsicherheitsprüfung kennen. Sie werden untersuchen, wie Linux Benutzerpasswortinformationen speichert, diese Informationen extrahieren und dann versuchen, die Passwörter mittels eines Wörterbuchangriffs zu knacken. Dieser Prozess ist für Penetrationstester und Systemadministratoren unerlässlich, um schwache Passwörter innerhalb eines Systems zu identifizieren und zu beheben.

Sie werden mit zwei kritischen Dateien arbeiten: /etc/passwd, die Benutzerkontoinformationen speichert, und /etc/shadow, die die gehashten Passwörter sicher speichert. Sie werden Standard-Linux-Befehlszeilentools und spezialisierte Software wie unshadow (aus der John the Ripper-Suite) und Hashcat verwenden, um den Knackprozess durchzuführen.

Am Ende dieses Labors werden Sie praktische Erfahrungen gesammelt haben mit:

  • Verständnis des Formats der /etc/shadow-Datei.
  • Kombinieren von Benutzer- und Passwortdaten in ein knackbareres Format.
  • Identifizieren von Passwort-Hash-Typen.
  • Verwenden von Hashcat für einen Wörterbuchangriff.

Das Format der /etc/shadow-Datei verstehen

In diesem Schritt untersuchen Sie die Datei /etc/shadow. Diese Datei speichert die tatsächlichen Passwort-Hashes für Benutzer in einem Linux-System und ist aus Sicherheitsgründen nur für den Root-Benutzer lesbar. Das Verständnis ihrer Struktur ist der erste Schritt zur Extraktion der Hashes.

Verwenden Sie zunächst sudo, um die notwendigen Berechtigungen zum Anzeigen des Inhalts der /etc/shadow-Datei zu erhalten.

sudo cat /etc/shadow

Sie sehen eine Ausgabe mit mehreren Zeilen, die jeweils einem Benutzerkonto entsprechen. Betrachten wir den Eintrag für den von uns erstellten testuser. Er wird ähnlich wie folgt aussehen (das Salt und der Hash werden unterschiedlich sein):

root:*:19327:0:99999:7:::
daemon:*:19327:0:99999:7:::
...
testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:19422:0:99999:7:::

Jede Zeile ist eine Reihe von durch Doppelpunkte getrennten Feldern. Für dieses Labor sind wir an den ersten beiden interessiert:

  1. Benutzername: testuser
  2. Gehashter Passwort: $6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1

Die Dollarzeichen ($) im Hash-Feld sind bedeutsam. Die Zahl zwischen den ersten beiden $-Zeichen gibt den Hashing-Algorithmus an. In diesem Fall bedeutet $6$ , dass das Passwort mit dem sha512crypt-Algorithmus gehasht wurde.

Das unshadow-Tool zur Kombination von passwd- und shadow-Dateien verwenden

In diesem Schritt verwenden Sie das Dienstprogramm unshadow, um eine einzelne Datei zu erstellen, die für Passwort-Cracking-Tools wie Hashcat geeignet ist. Cracking-Tools benötigen sowohl den Benutzernamen aus /etc/passwd als auch den Hash aus /etc/shadow in einem bestimmten Format. Das unshadow-Tool, das Teil der John the Ripper-Suite ist, automatisiert diesen Kombinationsprozess.

Sie werden nun unshadow ausführen, wobei Sie /etc/passwd und /etc/shadow als Eingabe bereitstellen, und die Ausgabe in eine neue Datei namens hashes.txt in Ihrem ~/project-Verzeichnis umleiten.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

sudo unshadow /etc/passwd /etc/shadow > ~/project/hashes.txt

Dieser Befehl liest beide Systemdateien, fasst die relevanten Informationen zusammen und speichert sie in ~/project/hashes.txt.

Sehen wir uns nun den Inhalt der neu erstellten Datei an, um das Ergebnis zu sehen.

cat ~/project/hashes.txt

Die Ausgabe zeigt eine Liste von Benutzern und ihren entsprechenden Hashes im Format an, das Cracking-Tools erwarten. Die Zeile für testuser wird wie folgt aussehen:

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:1001:1001::/home/testuser:/bin/bash

Diese Datei ist nun bereit für die Verwendung mit Hashcat.

Den Hash-Typ identifizieren (z. B. sha512crypt)

In diesem Schritt bestätigen Sie den Typ des für die Benutzernamen verwendeten Hashes. Dies ist ein entscheidender Schritt, da Sie Hashcat genau mitteilen müssen, welchen Hashing-Algorithmus Sie für den Cracking-Versuch verwenden möchten. Ein falscher Algorithmus wird immer fehlschlagen.

Wie wir in Schritt 1 beobachtet haben, verrät das Format des Hash-Strings selbst den Algorithmus. Untersuchen wir die Datei hashes.txt erneut.

cat ~/project/hashes.txt

Konzentrieren Sie sich auf den Hash-String für testuser:

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:...

Der Hash beginnt mit $6$. Dies ist ein Standardidentifikator für einen bestimmten Hash-Typ. Hier ist eine kurze Referenz für gängige Linux-Hash-Identifikatoren:

  • $1$ = md5crypt (MD5)
  • $2a$ oder $2y$ = bcrypt (Blowfish)
  • $5$ = sha256crypt (SHA-256)
  • $6$ = sha512crypt (SHA-512)

Basierend auf dem Präfix $6$ können wir den Hash-Typ sicher als sha512crypt identifizieren. Dies sind die Informationen, die wir für den nächsten Schritt benötigen.

Den entsprechenden Hashcat-Modus auswählen

In diesem Schritt finden Sie die richtige Modusnummer, die Hashcat zur Identifizierung des sha512crypt-Algorithmus verwendet. Hashcat unterstützt Hunderte verschiedener Hash-Typen, und jedem ist eine eindeutige Modusnummer zugewiesen.

Um den Modus für sha512crypt zu finden, können Sie die Hilfeinformationen von Hashcat mit grep durchsuchen. Dies ist eine effiziente Methode, um den benötigten Modus zu finden, ohne das gesamte Hilfemenü lesen zu müssen.

Führen Sie den folgenden Befehl aus, um nach sha512crypt zu suchen:

hashcat --help | grep -i sha512crypt

Das Flag -i in grep macht die Suche unempfindlich gegenüber Groß- und Kleinschreibung, was eine gute Praxis ist. Die Ausgabe zeigt Ihnen die übereinstimmende Zeile aus dem Hilfemenü:

...
1800 | sha512crypt, SHA512(Unix)                  | Operating System
...

Aus dieser Ausgabe können Sie ersehen, dass die Modusnummer für sha512crypt 1800 ist. Sie werden diese Modusnummer im letzten Schritt verwenden, um Hashcat mitzuteilen, wie die Hashes in Ihrer hashes.txt-Datei interpretiert werden sollen.

Einen Wörterbuchangriff auf die Linux-Hashes starten

In diesem letzten Schritt starten Sie einen Wörterbuchangriff auf die erfassten Hashes mit Hashcat. Ein Wörterbuchangriff funktioniert, indem eine Liste potenzieller Passwörter (ein "Wörterbuch" oder eine "Wortliste") verwendet, jedes davon mit demselben Algorithmus wie der Ziel-Hash gehasht und die Ergebnisse verglichen werden. Wenn eine Übereinstimmung gefunden wird, wurde das Passwort geknackt.

Sie verwenden die Wortliste rockyou.txt, die während der Laboreinrichtung in Ihr Verzeichnis ~/project heruntergeladen wurde. Dies ist eine sehr gängige Wortliste, die für die Passwortprüfung verwendet wird.

Konstruieren Sie nun den vollständigen Hashcat-Befehl mit allen gesammelten Informationen:

  • Modus (-m): 1800 für sha512crypt.
  • Hash-Datei: ~/project/hashes.txt.
  • Wortliste: ~/project/rockyou.txt.
  • Option (--force): Diese wird hinzugefügt, um potenzielle Fehler bei der Ausführung von Hashcat in einer virtualisierten Umgebung oder mit bestimmten Treibern zu vermeiden.

Führen Sie den Befehl aus, um den Angriff zu starten:

hashcat -m 1800 --force ~/project/hashes.txt ~/project/rockyou.txt

Hashcat wird initialisiert und die Cracking-Sitzung beginnen. Da das Passwort password123 in der Liste rockyou.txt enthalten ist, sollte der Vorgang sehr schnell gehen.

...
Session..........: hashcat
Status...........: Running
Hash.Name........: sha512crypt, SHA512(Unix)
Hash.Target......: testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn...
...
Approaching final keyspace - workload adjusted.

Session..........: hashcat
Status...........: Cracked
...

Sobald Hashcat den Status Cracked oder Exhausted anzeigt, ist der Angriff abgeschlossen. Um das geknackte Passwort anzuzeigen, können Sie die Option --show mit demselben Befehl verwenden.

hashcat -m 1800 --force ~/project/hashes.txt --show

Die Ausgabe zeigt deutlich den geknackten Hash zusammen mit seinem entsprechenden Klartext-Passwort an.

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:password123

Sie haben das Passwort für testuser erfolgreich geknackt!

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs! Sie haben erfolgreich einen klassischen Workflow zur Passwortprüfung auf einem Linux-System durchgeführt.

In diesem Lab haben Sie gelernt, wie Sie:

  • Die Struktur der Datei /etc/shadow lesen und verstehen, die die Passwort-Hashes von Benutzern speichert.
  • Das Tool unshadow verwenden, um Benutzer- und Hash-Daten aus /etc/passwd und /etc/shadow in einer einzigen Datei zu kombinieren.
  • Den Passwort-Hashing-Algorithmus (sha512crypt) durch Inspektion des Hash-Formats identifizieren.
  • Den entsprechenden Modus (1800) in Hashcat für den identifizierten Hash-Typ finden.
  • Einen Wörterbuchangriff mit Hashcat, einer leistungsstarken Wortliste und den extrahierten Hashes starten.
  • Das erfolgreich geknackte Passwort anzeigen.

Diese Übung verdeutlicht die Bedeutung der Verwendung starker, komplexer und einzigartiger Passwörter, die nicht in gängigen Wortlisten vorkommen. Systemadministratoren können dieselben Techniken nutzen, um proaktiv schwache Passwörter in ihren Umgebungen zu finden und zu beheben.