Entdecken Sie die modulenspezifischen Optionen von Hydra

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 verfügbaren HTTP POST-Optionen in Hydra untersuchen, wobei wir uns darauf konzentrieren, wie man effektiv auf Dienste abzielen kann, die HTTP POST für die Authentifizierung verwenden. Wir werden lernen, wie man Benutzernamen und Passwörter angibt, sowie die URL, an die die POST-Anfrage gesendet werden soll.

Dieses Lab wird Sie durch das Überprüfen der HTTP POST-Optionen mit der -U-Flagge, das Einrichten eines HTTP POST-Formulars, das Ausführen von Hydra mit spezifischen -m-Optionen und die Validierung des POST-Angriffs führen. Sie werden lernen, wie Sie Hydra verwenden können, um Anmeldeinformationen per Brute-Force zu ermitteln, wenn Sie auf Dienste abzielen, die HTTP POST für die Authentifizierung verwenden.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/http_form("HTTP Form Attack") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") subgraph Lab Skills hydra/single_username -.-> lab-550767{{"Entdecken Sie die modulenspezifischen Optionen von Hydra"}} hydra/target_ip -.-> lab-550767{{"Entdecken Sie die modulenspezifischen Optionen von Hydra"}} hydra/http_form -.-> lab-550767{{"Entdecken Sie die modulenspezifischen Optionen von Hydra"}} hydra/success_detection -.-> lab-550767{{"Entdecken Sie die modulenspezifischen Optionen von Hydra"}} end

Überprüfen der HTTP POST-Optionen mit -U

In diesem Schritt werden wir die verfügbaren HTTP POST-Optionen in Hydra mithilfe der -U-Flagge untersuchen. Die -U-Flagge wird verwendet, um einen Benutzernamen bei der Durchführung einer POST-Anfrage anzugeben. Dies ist besonders nützlich, wenn der Ziel-Dienst einen Benutzernamen als Teil der POST-Daten senden muss.

Bevor wir uns in das praktische Beispiel stürzen, lassen Sie uns das Grundkonzept von HTTP POST-Anfragen verstehen. HTTP POST ist eine Methode, die verwendet wird, um Daten an einen Server zu senden, um eine Ressource zu erstellen oder zu aktualisieren. Im Gegensatz zu GET-Anfragen tragen POST-Anfragen die Daten im Anfragekörper, was sie geeignet macht, um größere Datenmengen zu senden, wie z.B. Formularübermittlungen.

Hydra ist ein leistungsstarkes Tool zum Brute-Force von Anmeldeinformationen. Wenn man auf Dienste abzielt, die HTTP POST für die Authentifizierung verwenden, müssen wir Hydra mit den erforderlichen Informationen versorgen, einschließlich der Benutzernamen- und Passwortfelder sowie der URL, an die die POST-Anfrage gesendet werden soll.

Die -U-Option in Hydra ermöglicht es Ihnen, einen einzelnen Benutzernamen für alle Anmeldeversuche anzugeben. Dies ist nützlich, wenn Sie bereits den Benutzernamen kennen und nur das Passwort per Brute-Force ermitteln müssen.

Lassen Sie uns sehen, wie man die -U-Option anhand eines einfachen Beispiels verwendet. Nehmen wir an, wir möchten eine Webanwendung angreifen, die HTTP POST für die Anmeldung verwendet, und wir wissen, dass der Benutzername testuser ist. Wir können den folgenden Hydra-Befehl verwenden:

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

In diesem Befehl:

  • hydra: Der Befehl, um Hydra aufzurufen.
  • -l testuser: Gibt den Benutzernamen als testuser an. Beachten Sie, dass wir hier -l anstelle von -U verwenden. -l gibt einen einzelnen Benutzernamen an, während -U eine Datei mit einer Liste von Benutzernamen angibt.
  • -P ~/project/password.txt: Gibt den Pfad zur Passwortlisten-Datei an. Stellen Sie sicher, dass Sie eine password.txt-Datei in Ihrem ~/project-Verzeichnis haben. Sie können eine erstellen, indem Sie nano verwenden:
nano ~/project/password.txt

Fügen Sie einige häufige Passwörter zur Datei hinzu, ein Passwort pro Zeile, beispielsweise:

password
123456
qwerty

Speichern Sie die Datei und verlassen Sie nano.

  • <target_ip>: Ersetzen Sie dies durch die IP-Adresse des Zielservers. Für dieses Lab müssen Sie dies durch die tatsächliche IP-Adresse des Servers ersetzen, den Sie angreifen. Wir gehen für Demonstrationszwecke davon aus, dass die Ziel-IP 127.0.0.1 ist.
  • http-post-form: Gibt an, dass wir das HTTP POST-Formular-Modul verwenden.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Dies ist der wichtigste Teil. Es sagt Hydra, wie die POST-Anfrage konstruiert werden soll.
    • /login.php: Die URL, an die die POST-Anfrage gesendet werden soll.
    • username=^USER^&password=^PASS^: Die POST-Daten. ^USER^ und ^PASS^ sind Platzhalter, die Hydra jeweils mit dem Benutzernamen und dem Passwort ersetzen wird.
    • F=Invalid username or password: Dies sagt Hydra, nach welchem String in der Antwort gesucht werden soll, um zu bestimmen, ob der Anmeldeversuch fehlgeschlagen ist. Wenn Hydra diesen String findet, weiß es, dass der Anmeldeversuch nicht erfolgreich war.

Jetzt lassen Sie uns den Befehl mit der Beispiel-IP-Adresse ausführen:

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

Dieser Befehl wird versuchen, das Passwort für das testuser-Konto per Brute-Force zu ermitteln, indem er die Passwörter in der password.txt-Datei verwendet. Hydra wird HTTP POST-Anfragen an die /login.php-URL senden, wobei die Benutzernamen- und Passwortfelder entsprechend festgelegt sind. Wenn Hydra ein gültiges Passwort findet, wird es es auf dem Bildschirm anzeigen.

Dieses Beispiel zeigt die grundlegende Verwendung der -l-Option mit dem http-post-form-Modul. In den folgenden Schritten werden wir fortgeschrittenere Optionen und Techniken zum Angriff auf HTTP POST-Formulare mit Hydra untersuchen.

Einrichten eines HTTP POST-Formulars

In diesem Schritt werden wir ein einfaches HTTP POST-Formular einrichten, das wir als Ziel für unsere Hydra-Angriffe verwenden können. Wir werden ein einfaches HTML-Formular und ein PHP-Skript erstellen, um die Formularübermittlung zu verarbeiten. Dies wird es uns ermöglichen, zu verstehen, wie Hydra mit HTTP POST-Formularen interagiert und wie man den richtigen Hydra-Befehl erstellt.

Zunächst erstellen wir das HTML-Formular. Wir erstellen eine Datei namens login.html im Verzeichnis ~/project.

nano ~/project/login.html

Fügen Sie jetzt den folgenden HTML-Code in die Datei ein:

<!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 erstellt ein einfaches Anmeldeformular mit zwei Eingabefeldern: username und password. Das Formular verwendet die POST-Methode und sendet die Daten an login.php.

Speichern Sie die Datei und verlassen Sie nano.

Als Nächstes müssen wir das login.php-Skript erstellen, um die Formularübermittlung zu verarbeiten. Erstellen Sie eine Datei namens login.php im Verzeichnis ~/project:

nano ~/project/login.php

Fügen Sie jetzt den folgenden PHP-Code in die Datei ein:

<?php
$username = $_POST['username'];
$password = $_POST['password'];

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

Dieses PHP-Skript ruft den Benutzernamen und das Passwort aus den POST-Daten ab und überprüft, ob sie mit den hartcodierten Werten testuser und password übereinstimmen. Wenn die Anmeldeinformationen korrekt sind, gibt es "Login successful!" aus; andernfalls gibt es "Invalid username or password" aus.

Speichern Sie die Datei und verlassen Sie nano.

Jetzt haben Sie ein einfaches HTTP POST-Formular eingerichtet. Um es zu testen, benötigen Sie normalerweise einen Webserver (wie Apache oder Nginx), der diese Dateien ausliefert. Da wir uns auf Hydra konzentrieren und die LabEx-Umgebung keinen vorkonfigurierten Webserver enthält, gehen wir davon aus, dass Sie eine Möglichkeit haben, auf diese Dateien über einen Webserver zuzugreifen. Beispielsweise könnten Sie, wenn Sie lokal einen Webserver ausführen und das Verzeichnis ~/project ausliefern, das Formular im Webbrowser über http://localhost/login.html aufrufen.

Im nächsten Schritt werden wir Hydra verwenden, um dieses Formular anzugreifen. Wir werden die -m-Option verwenden, um die POST-Daten anzugeben, und die -F-Option, um die Fehlermeldung zu identifizieren.

Ausführen mit der -m-Option

In diesem Schritt werden wir die -m-Option in Hydra verwenden, um die HTTP POST-Daten direkt anzugeben. Dies ist eine Alternative zur Verwendung des http-post-form-Moduls und gibt uns mehr Kontrolle über die Struktur der POST-Anfrage.

Die -m-Option ermöglicht es Ihnen, den gesamten POST-Anfragekörper zu definieren. Sie müssen die Platzhalter für Benutzername und Passwort (^USER^ und ^PASS^) innerhalb der POST-Daten angeben.

Wir verwenden das login.php-Formular, das wir im vorherigen Schritt erstellt haben, als Ziel. Wir werden die -m-Option verwenden, um die POST-Daten als username=^USER^&password=^PASS^ anzugeben. Wir werden auch die -l-Option verwenden, um einen einzelnen Benutzernamen (testuser) anzugeben, und die -P-Option, um die Passwortlisten-Datei (~/project/password.txt) anzugeben.

Hier ist der Hydra-Befehl, den wir verwenden werden:

hydra -l testuser -P ~/project/password.txt "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" < target_ip > http-post

In diesem Befehl:

  • hydra: Der Befehl, um Hydra aufzurufen.
  • -l testuser: Gibt den Benutzernamen als testuser an.
  • -P ~/project/password.txt: Gibt den Pfad zur Passwortlisten-Datei an.
  • <target_ip>: Ersetzen Sie dies durch die IP-Adresse des Zielservers. Wie zuvor gehen wir für Demonstrationszwecke davon aus, dass die Ziel-IP 127.0.0.1 ist.
  • http-post: Gibt an, dass wir das HTTP POST-Modul verwenden.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Dies gibt die URL, die POST-Daten und die Fehlermeldung an.
    • /login.php: Die URL, an die die POST-Anfrage gesendet werden soll.
    • username=^USER^&password=^PASS^: Die POST-Daten. ^USER^ und ^PASS^ sind Platzhalter, die Hydra jeweils mit dem Benutzernamen und dem Passwort ersetzen wird.
    • F=Invalid username or password: Dies sagt Hydra, nach welchem String in der Antwort gesucht werden soll, um zu bestimmen, ob der Anmeldeversuch fehlgeschlagen ist.

Jetzt lassen Sie uns den Befehl mit der Beispiel-IP-Adresse ausführen:

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

Dieser Befehl wird versuchen, das Passwort für das testuser-Konto per Brute-Force zu ermitteln, indem er die Passwörter in der password.txt-Datei verwendet. Hydra wird HTTP POST-Anfragen an die /login.php-URL mit den angegebenen POST-Daten senden. Wenn Hydra ein gültiges Passwort findet, wird es es auf dem Bildschirm anzeigen.

Der Hauptunterschied zwischen diesem Befehl und dem aus Schritt 1 ist die Verwendung von http-post anstelle von http-post-form. Das http-post-Modul erfordert, dass Sie die gesamte POST-Datenzeichenfolge mit der -m-Option angeben (die hier in der URL-Zeichenfolge eingebettet ist), während http-post-form die POST-Daten automatisch basierend auf den Formularfeldern konstruiert.

Dieses Beispiel zeigt, wie man die -m-Option verwendet, um die POST-Daten direkt anzugeben. Im nächsten Schritt werden wir den POST-Angriff validieren und sehen, wie man einen erfolgreichen Login erfassen kann.

Validierung eines POST-Angriffs

In diesem Schritt werden wir den POST-Angriff validieren, indem wir sicherstellen, dass Hydra das richtige Passwort erfolgreich identifiziert. Um dies effektiv zu erreichen, werden wir unsere password.txt-Datei ändern, um das richtige Passwort einzuschließen, damit Hydra es findet. Wir werden auch die Ausgabe analysieren, um den erfolgreichen Login zu bestätigen.

Zunächst ändern wir die Datei ~/project/password.txt, um das richtige Passwort einzuschließen, das laut unserem login.php-Skript password ist.

nano ~/project/password.txt

Fügen Sie das Passwort password zur Datei hinzu. Es ist eine gute Praxis, es nahe am Anfang zu platzieren, um schnellere Ergebnisse zu erzielen. Die Datei sollte nun in etwa so aussehen:

password
123456
qwerty

Speichern Sie die Datei und verlassen Sie nano.

Jetzt führen Sie den Hydra-Befehl erneut aus, indem Sie denselben Befehl wie im vorherigen Schritt verwenden:

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

Diesmal sollte Hydra schnell das richtige Passwort finden und es in der Ausgabe anzeigen. Die Ausgabe sollte in etwa so aussehen:

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra starting at 2024-10-27 14:30:00
[DATA] 1 task, 1 server, 13 login tries (l:1/p:13), ~1 try per task
[DATA] attacking service http-post on 127.0.0.1
[2;32][http-post] host: 127.0.0.1   login: testuser   password: password
Hydra is finishing at 2024-10-27 14:30:05

Die Zeile [http-post] host: 127.0.0.1 login: testuser password: password zeigt an, dass Hydra erfolgreich das Passwort password für den Benutzernamen testuser gefunden hat.

Wenn Sie diese Ausgabe nicht sehen, überprüfen Sie Folgendes noch einmal:

  • Stellen Sie sicher, dass die password.txt-Datei das richtige Passwort (password) enthält.
  • Stellen Sie sicher, dass das login.php-Skript korrekt konfiguriert ist, um nach dem Benutzernamen testuser und dem Passwort password zu suchen.
  • Stellen Sie sicher, dass der Hydra-Befehl korrekt formatiert ist, insbesondere die URL, die POST-Daten und die Fehlermeldung.

Durch das erfolgreiche Ausführen des Hydra-Befehls und das Beobachten der Ausgabe haben Sie den POST-Angriff validiert und bestätigt, dass Hydra die Anmeldeinformationen für ein HTTP POST-Formular per Brute-Force erfolgreich ermitteln kann.

Dies schließt das Lab zum Angriff auf HTTP POST-Formulare mit Hydra ab. Sie haben gelernt, wie Sie ein einfaches HTTP POST-Formular einrichten, wie Sie die -m-Option verwenden, um die POST-Daten anzugeben, und wie Sie den Angriff validieren, indem Sie sicherstellen, dass Hydra das richtige Passwort findet.

Zusammenfassung

In diesem Lab haben wir die HTTP POST-Optionen in Hydra untersucht, wobei wir uns auf die Brute-Force-Angriffe auf Anmeldeinformationen konzentriert haben, wenn eine Webanwendung die HTTP POST-Methode zur Authentifizierung verwendet. Wir haben gelernt, wie man die -l-Option nutzt, um einen einzelnen Benutzernamen für alle Anmeldeversuche anzugeben, und wie man Hydra mit den erforderlichen Informationen versorgt, einschließlich der Benutzernamen- und Passwortfelder sowie der URL, an die die POST-Anfrage gesendet werden soll.

Wir haben auch das grundlegende Konzept von HTTP POST-Anfragen wiederholt und verstanden, dass POST-Anfragen Daten im Anfragekörper übertragen, was sie geeignet macht, größere Datenmengen wie Formularübermittlungen zu senden. Das Lab hat die Wichtigkeit betont, Hydra die richtigen Parameter für einen erfolgreichen Brute-Force-Angriff zu geben, einschließlich der Ziel-URL, des Benutzernamenfelds, des Passwortfelds und einer Fehlermeldung, um fehlgeschlagene Anmeldeversuche zu identifizieren.