Explorer les options spécifiques aux modules d'Hydra

HydraHydraBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), nous allons explorer les options HTTP POST disponibles dans Hydra, en nous concentrant sur la manière de cibler efficacement les services qui utilisent HTTP POST pour l'authentification. Nous apprendrons à spécifier les noms d'utilisateur et les mots de passe, ainsi que l'URL à laquelle la requête POST doit être envoyée.

Ce laboratoire vous guidera tout au long de la revue des options HTTP POST avec le drapeau -U, de la configuration d'un formulaire HTTP POST, de l'exécution de Hydra avec des options -m spécifiques et de la validation de l'attaque POST. Vous apprendrez à utiliser Hydra pour forcer des identifiants de connexion (brute-force login credentials) lorsque vous ciblez des services qui utilisent HTTP POST pour l'authentification.


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{{"Explorer les options spécifiques aux modules d'Hydra"}} hydra/target_ip -.-> lab-550767{{"Explorer les options spécifiques aux modules d'Hydra"}} hydra/http_form -.-> lab-550767{{"Explorer les options spécifiques aux modules d'Hydra"}} hydra/success_detection -.-> lab-550767{{"Explorer les options spécifiques aux modules d'Hydra"}} end

Revue des options HTTP POST avec -U

Dans cette étape, nous allons explorer les options HTTP POST disponibles dans Hydra en utilisant le drapeau -U. Le drapeau -U est utilisé pour spécifier un nom d'utilisateur lors de l'envoi d'une requête POST. Cela est particulièrement utile lorsque le service cible nécessite qu'un nom d'utilisateur soit envoyé dans le cadre des données POST.

Avant de plonger dans l'exemple pratique, comprenons le concept de base des requêtes HTTP POST. HTTP POST est une méthode utilisée pour envoyer des données à un serveur afin de créer ou de mettre à jour une ressource. Contrairement aux requêtes GET, les requêtes POST transportent les données dans le corps de la requête, ce qui les rend adaptées pour envoyer de plus grandes quantités de données, telles que les soumissions de formulaires.

Hydra est un outil puissant pour forcer des identifiants de connexion (brute-force login credentials). Lorsque nous ciblons des services qui utilisent HTTP POST pour l'authentification, nous devons fournir à Hydra les informations nécessaires, y compris les champs de nom d'utilisateur et de mot de passe, ainsi que l'URL à laquelle la requête POST doit être envoyée.

L'option -U dans Hydra vous permet de spécifier un seul nom d'utilisateur à utiliser pour toutes les tentatives de connexion. Cela est utile lorsque vous connaissez déjà le nom d'utilisateur et que vous n'avez qu'à forcer le mot de passe.

Voyons comment utiliser l'option -U avec un exemple simple. Supposons que nous voulions attaquer une application web qui utilise HTTP POST pour la connexion, et que nous sachions que le nom d'utilisateur est testuser. Nous pouvons utiliser la commande Hydra suivante :

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

Dans cette commande :

  • hydra : La commande pour invoquer Hydra.
  • -l testuser : Spécifie le nom d'utilisateur comme testuser. Notez que nous utilisons -l au lieu de -U ici. -l spécifie un seul nom d'utilisateur, tandis que -U spécifie un fichier contenant une liste de noms d'utilisateurs.
  • -P ~/project/password.txt : Spécifie le chemin vers le fichier de liste de mots de passe. Assurez-vous d'avoir un fichier password.txt dans votre répertoire ~/project. Vous pouvez en créer un en utilisant nano :
nano ~/project/password.txt

Ajoutez quelques mots de passe courants au fichier, un mot de passe par ligne, par exemple :

password
123456
qwerty

Enregistrez le fichier et quittez nano.

  • <target_ip> : Remplacez ceci par l'adresse IP du serveur cible. Pour ce laboratoire (lab), vous devrez le remplacer par l'adresse IP réelle du serveur que vous attaquez. Nous supposerons que l'adresse IP cible est 127.0.0.1 à des fins de démonstration.
  • http-post-form : Spécifie que nous utilisons le module de formulaire HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" : C'est la partie la plus importante. Elle indique à Hydra comment construire la requête POST.
    • /login.php : L'URL à laquelle la requête POST doit être envoyée.
    • username=^USER^&password=^PASS^ : Les données POST. ^USER^ et ^PASS^ sont des espaces réservés que Hydra remplacera respectivement par le nom d'utilisateur et le mot de passe.
    • F=Invalid username or password : Cela indique à Hydra quelle chaîne de caractères rechercher dans la réponse pour déterminer si la tentative de connexion a échoué. Si Hydra trouve cette chaîne, il sait que la tentative de connexion a été infructueuse.

Maintenant, exécutons la commande avec l'adresse IP d'exemple :

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"

Cette commande tentera de forcer le mot de passe du compte testuser en utilisant les mots de passe du fichier password.txt. Hydra enverra des requêtes HTTP POST à l'URL /login.php avec les champs de nom d'utilisateur et de mot de passe configurés en conséquence. Si Hydra trouve un mot de passe valide, il l'affichera à l'écran.

Cet exemple démontre l'utilisation de base de l'option -l avec le module http-post-form. Dans les étapes suivantes, nous explorerons des options et des techniques plus avancées pour attaquer les formulaires HTTP POST avec Hydra.

Configuration d'un formulaire HTTP POST

Dans cette étape, nous allons configurer un simple formulaire HTTP POST que nous pourrons utiliser comme cible pour nos attaques Hydra. Nous allons créer un formulaire HTML de base et un script PHP pour gérer la soumission du formulaire. Cela nous permettra de comprendre comment Hydra interagit avec les formulaires HTTP POST et comment élaborer la bonne commande Hydra.

Tout d'abord, créons le formulaire HTML. Nous allons créer un fichier nommé login.html dans le répertoire ~/project.

nano ~/project/login.html

Maintenant, collez le code HTML suivant dans le fichier :

<!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>

Ce code HTML crée un simple formulaire de connexion avec deux champs de saisie : username et password. Le formulaire utilise la méthode POST et envoie les données à login.php.

Enregistrez le fichier et quittez nano.

Ensuite, nous devons créer le script login.php pour gérer la soumission du formulaire. Créez un fichier nommé login.php dans le répertoire ~/project :

nano ~/project/login.php

Maintenant, collez le code PHP suivant dans le fichier :

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

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

Ce script PHP récupère le nom d'utilisateur et le mot de passe des données POST et vérifie s'ils correspondent aux valeurs codées en dur testuser et password. Si les identifiants sont corrects, il affiche "Login successful!" ; sinon, il affiche "Invalid username or password".

Enregistrez le fichier et quittez nano.

Maintenant, vous avez configuré un formulaire HTTP POST de base. Pour le tester, vous aurez généralement besoin d'un serveur web (comme Apache ou Nginx) en cours d'exécution et servant ces fichiers. Comme nous nous concentrons sur Hydra et que l'environnement LabEx ne comprend pas de serveur web pré-configuré, nous allons procéder en supposant que vous avez un moyen d'accéder à ces fichiers via un serveur web. Par exemple, si vous exécutiez un serveur web localement et que vous serviez le répertoire ~/project, vous pourriez accéder au formulaire en naviguant vers http://localhost/login.html dans votre navigateur web.

Dans l'étape suivante, nous allons utiliser Hydra pour attaquer ce formulaire. Nous utiliserons l'option -m pour spécifier les données POST et l'option -F pour identifier le message d'échec.

Exécution avec les options -m

Dans cette étape, nous allons utiliser l'option -m dans Hydra pour spécifier directement les données HTTP POST. C'est une alternative à l'utilisation du module http-post-form, et cela nous donne plus de contrôle sur la structure de la requête POST.

L'option -m vous permet de définir tout le corps de la requête POST. Vous devez spécifier les espaces réservés pour le nom d'utilisateur et le mot de passe (^USER^ et ^PASS^) dans les données POST.

Utilisons le formulaire login.php que nous avons créé à l'étape précédente comme cible. Nous allons utiliser l'option -m pour spécifier les données POST sous la forme username=^USER^&password=^PASS^. Nous allons également utiliser l'option -l pour spécifier un seul nom d'utilisateur (testuser) et l'option -P pour spécifier le fichier de liste de mots de passe (~/project/password.txt).

Voici la commande Hydra que nous allons utiliser :

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

Dans cette commande :

  • hydra : La commande pour invoquer Hydra.
  • -l testuser : Spécifie le nom d'utilisateur comme testuser.
  • -P ~/project/password.txt : Spécifie le chemin vers le fichier de liste de mots de passe.
  • <target_ip> : Remplacez ceci par l'adresse IP du serveur cible. Comme précédemment, nous supposerons que l'adresse IP cible est 127.0.0.1 à des fins de démonstration.
  • http-post : Spécifie que nous utilisons le module HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" : Cela spécifie l'URL, les données POST et la chaîne d'échec.
    • /login.php : L'URL à laquelle la requête POST doit être envoyée.
    • username=^USER^&password=^PASS^ : Les données POST. ^USER^ et ^PASS^ sont des espaces réservés que Hydra remplacera respectivement par le nom d'utilisateur et le mot de passe.
    • F=Invalid username or password : Cela indique à Hydra quelle chaîne de caractères rechercher dans la réponse pour déterminer si la tentative de connexion a échoué.

Maintenant, exécutons la commande avec l'adresse IP d'exemple :

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

Cette commande tentera de forcer le mot de passe du compte testuser en utilisant les mots de passe du fichier password.txt. Hydra enverra des requêtes HTTP POST à l'URL /login.php avec les données POST spécifiées. Si Hydra trouve un mot de passe valide, il l'affichera à l'écran.

La principale différence entre cette commande et celle de l'Étape 1 est l'utilisation de http-post au lieu de http-post-form. Le module http-post vous oblige à spécifier toute la chaîne de données POST en utilisant l'option -m (qui est intégrée dans la chaîne d'URL ici), tandis que http-post-form construit automatiquement les données POST en fonction des champs du formulaire.

Cet exemple montre comment utiliser l'option -m pour spécifier directement les données POST. Dans l'étape suivante, nous allons valider l'attaque POST et voir comment capturer une connexion réussie.

Validation de l'attaque POST

Dans cette étape, nous allons valider l'attaque POST en nous assurant qu'Hydra identifie correctement le mot de passe. Pour ce faire efficacement, nous allons modifier notre fichier password.txt pour inclure le mot de passe correct, afin que Hydra le trouve. Nous allons également analyser la sortie pour confirmer la connexion réussie.

Tout d'abord, modifions le fichier ~/project/password.txt pour inclure le mot de passe correct, qui est password selon notre script login.php.

nano ~/project/password.txt

Ajoutez le mot de passe password au fichier. Il est recommandé de le placer près du début pour obtenir des résultats plus rapidement. Le fichier devrait maintenant ressembler à ceci :

password
123456
qwerty

Enregistrez le fichier et quittez nano.

Maintenant, exécutez à nouveau la commande Hydra, en utilisant la même commande que dans l'étape précédente :

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

Cette fois, Hydra devrait rapidement trouver le mot de passe correct et l'afficher dans la sortie. La sortie devrait ressembler à ceci :

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

La ligne [http-post] host: 127.0.0.1 login: testuser password: password indique qu'Hydra a réussi à trouver le mot de passe password pour le nom d'utilisateur testuser.

Si vous ne voyez pas cette sortie, vérifiez les points suivants :

  • Assurez-vous que le fichier password.txt contient le mot de passe correct (password).
  • Assurez-vous que le script login.php est correctement configuré pour vérifier le nom d'utilisateur testuser et le mot de passe password.
  • Assurez-vous que la commande Hydra est correctement formatée, en particulier l'URL, les données POST et la chaîne d'échec.

En exécutant avec succès la commande Hydra et en observant la sortie, vous avez validé l'attaque POST et confirmé qu'Hydra peut forcer avec succès les identifiants de connexion sur un formulaire HTTP POST.

Ceci termine le laboratoire sur l'attaque de formulaires HTTP POST avec Hydra. Vous avez appris à configurer un simple formulaire HTTP POST, à utiliser l'option -m pour spécifier les données POST et à valider l'attaque en vous assurant qu'Hydra trouve le mot de passe correct.

Résumé

Dans ce laboratoire, nous avons exploré les options HTTP POST dans Hydra, en nous concentrant sur la manière de forcer les identifiants de connexion lorsqu'une application web utilise HTTP POST pour l'authentification. Nous avons appris à utiliser l'option -l pour spécifier un seul nom d'utilisateur pour toutes les tentatives de connexion, ainsi que comment fournir à Hydra les informations nécessaires, notamment les champs de nom d'utilisateur et de mot de passe, ainsi que l'URL à laquelle la requête POST doit être envoyée.

Nous avons également passé en revue le concept de base des requêtes HTTP POST, en comprenant que les requêtes POST transportent des données dans le corps de la requête, ce qui les rend adaptées pour envoyer de plus grandes quantités de données, telles que les soumissions de formulaires. Le laboratoire a souligné l'importance de fournir les paramètres corrects à Hydra pour un forçage réussi, y compris l'URL cible, le champ de nom d'utilisateur, le champ de mot de passe et un message d'échec pour identifier les tentatives de connexion infructueuses.