Introduction
Dans ce laboratoire, vous apprendrez comment les attaquants compromettent les systèmes d'authentification Web vulnérables. Vous analyserez des requêtes de connexion HTTP POST standard et configurerez l'outil de force brute Hydra pour effectuer des attaques par dictionnaire automatisées contre le formulaire de connexion d'un portail Web afin de récupérer des identifiants valides.
Les attaques par force brute consistent à soumettre systématiquement de nombreux mots de passe ou phrases secrètes dans l'espoir de finir par deviner le bon. Lorsqu'ils ciblent des applications Web, les attaquants se concentrent souvent sur les formulaires de connexion qui utilisent la méthode HTTP POST pour transmettre les identifiants des utilisateurs. Comprendre le fonctionnement de ces attaques est crucial pour sécuriser les applications Web et mettre en œuvre des mécanismes appropriés de limitation de débit (rate limiting) et de verrouillage de compte.
Il s'agit fondamentalement d'un problème économique lié à l'authentification. Si l'application permet aux attaquants de faire de nombreuses tentatives à moindre coût, la récupération d'identifiants faibles ou réutilisés devient une menace réaliste.
Analyser les paramètres de la requête de connexion
Dans cette étape, vous analyserez l'application Web cible pour comprendre comment elle traite les requêtes de connexion. Avant de lancer une attaque par force brute, vous devez identifier l'URL cible, la méthode HTTP utilisée, les noms des champs de saisie et le message renvoyé lors d'une tentative de connexion infructueuse.
Cette étape de reconnaissance est essentielle, car des outils comme Hydra ne sont efficaces que si le modèle de requête que vous leur fournissez est précis. Si vous interprétez mal le formulaire, la logique de l'attaque sera erronée dès le départ.
Un serveur Web local a été démarré pour vous sur le port 8080. Tout d'abord, examinons le code source HTML de la page de connexion pour identifier les paramètres du formulaire. Vous pouvez utiliser la commande curl pour récupérer le contenu de la page Web.
curl -s http://127.0.0.1:8080/
La sortie affichera un formulaire HTML simple. Notez l'attribut action="/login", qui nous indique où les données du formulaire sont envoyées. L'attribut method="POST" indique que les données sont transmises via une requête HTTP POST. Enfin, observez les attributs name des champs de saisie : username et password.
Ensuite, vous devez simuler une tentative de connexion infructueuse pour voir comment le serveur réagit. Il s'agit d'une étape critique, car les outils de force brute doivent savoir à quoi ressemble un "échec" afin de pouvoir identifier un "succès" lorsque ce message d'erreur est absent.
Utilisez curl pour envoyer une requête POST avec des identifiants fictifs. L'option -X POST spécifie la méthode HTTP, et l'option -d vous permet d'envoyer les données du formulaire.
curl -X POST -d "username=testuser&password=wrongpass" http://127.0.0.1:8080/login
Vous devriez obtenir la sortie suivante :
Invalid credentials. Please try again.
Cette chaîne spécifique, Invalid credentials, est le message d'échec. Vous utiliserez cette phrase exacte plus tard pour configurer l'outil de force brute.
Sélectionner les listes de mots (wordlists)
Dans cette étape, vous préparerez les dictionnaires (listes de mots) qui seront utilisés pour l'attaque par force brute. Une attaque par dictionnaire repose sur une liste prédéfinie d'identifiants et de mots de passe potentiels.
Les attaques par dictionnaire sont plus rapides qu'une recherche exhaustive à l'aveugle car elles exploitent la prévisibilité humaine. Les utilisateurs ne choisissent pas leurs mots de passe de manière uniforme et aléatoire.
Au lieu d'essayer toutes les combinaisons de caractères possibles, les attaquants utilisent des listes contenant des noms d'utilisateur courants (comme admin, root, user) et des mots de passe fréquemment utilisés (comme 123456, password, qwerty).
Vous allez créer deux fichiers texte simples dans votre répertoire de travail actuel (~/project). Le premier fichier contiendra une liste d'identifiants potentiels. Utilisez la commande echo pour écrire les noms dans un fichier appelé users.txt.
echo "root" > users.txt
echo "admin" >> users.txt
echo "test" >> users.txt
L'opérateur > crée le fichier et écrit la première ligne, tandis que l'opérateur >> ajoute les lignes suivantes au fichier existant.
Ensuite, créez un fichier appelé passwords.txt contenant une liste de mots de passe potentiels.
echo "password123" > passwords.txt
echo "admin123" >> passwords.txt
echo "secret123" >> passwords.txt
echo "123456" >> passwords.txt
Vous pouvez vérifier le contenu de vos nouvelles listes de mots à l'aide de la commande cat.
cat users.txt
cat passwords.txt
Dans un scénario réel, les testeurs d'intrusion utilisent des listes de mots massives et accessibles publiquement comme rockyou.txt, qui contient des millions de mots de passe compromis. Pour ce laboratoire pédagogique, ces petites listes personnalisées suffiront.
Configurer Hydra pour le formulaire HTTP POST
Dans cette étape, vous apprendrez à structurer la commande pour Hydra, un puissant outil de craquage d'authentification réseau. Hydra prend en charge de nombreux protocoles, notamment HTTP, FTP, SSH, et bien d'autres.
Pour attaquer un formulaire de connexion Web, Hydra utilise un module spécifique appelé http-post-form. Ce module nécessite une chaîne de caractères formatée avec précision pour comprendre comment interagir avec l'application Web cible.
La syntaxe du module http-post-form se présente comme suit : "<chemin>:<paramètres du formulaire>:<chaîne d'échec>"
Décomposons comment cela s'applique aux informations que vous avez recueillies à l'étape 1. Le premier élément est le chemin, qui correspond à l'URL où le formulaire est soumis ; dans notre cas, il s'agit de /login. Ensuite, viennent les paramètres du formulaire, représentant les données envoyées dans la requête POST. Vous avez identifié les champs username et password. Hydra utilise des espaces réservés spéciaux ^USER^ et ^PASS^ pour injecter les mots de vos listes, la chaîne de paramètres devient donc username=^USER^&password=^PASS^. Enfin, la chaîne d'échec est le texte qui apparaît sur la page lorsqu'une connexion échoue, que vous avez identifié comme Invalid credentials.
En combinant ces trois parties avec des deux-points, la chaîne de configuration du module devient : "/login:username=^USER^&password=^PASS^:Invalid credentials"
Avant de lancer l'attaque réelle, vous pouvez explorer l'aide intégrée d'Hydra pour le module http-post-form afin de mieux comprendre ses capacités. Exécutez la commande suivante pour afficher l'aide spécifique au module :
hydra -U http-post-form
Cette commande affiche des instructions détaillées et des exemples sur la façon de formater la chaîne du module, ce qui constitue une excellente référence lorsque vous rencontrerez des formulaires de connexion plus complexes à l'avenir.
Exécuter l'attaque par force brute
Dans cette étape, vous combinerez tout ce que vous avez appris pour exécuter l'attaque par dictionnaire automatisée contre le serveur Web local.
Vous utiliserez la commande hydra avec plusieurs options :
-L users.txt: Spécifie le fichier contenant la liste des noms d'utilisateur.-P passwords.txt: Spécifie le fichier contenant la liste des mots de passe.-s 8080: Spécifie le port cible.127.0.0.1: L'adresse IP du serveur cible.http-post-form: Le module de protocole à utiliser."/login:username=^USER^&password=^PASS^:Invalid credentials": La chaîne de configuration du module que vous avez construite à l'étape précédente.
Exécutez la commande suivante dans votre terminal pour lancer l'attaque par force brute :
hydra -L users.txt -P passwords.txt -s 8080 127.0.0.1 http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"
Hydra commencera à tester chaque combinaison de noms d'utilisateur et de mots de passe à partir de vos listes. Comme les listes sont courtes et que le serveur est local, l'attaque se terminera très rapidement.
Vous devriez voir une sortie similaire à celle-ci :
Hydra v9.2 (c) 2021 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-10-25 10:00:00
[DATA] max 12 tasks per 1 server, overall 12 tasks, 12 login tries (l:3/p:4), ~1 tries per task
[DATA] attacking http-post-form://127.0.0.1:8080/login:username=^USER^&password=^PASS^:Invalid credentials
[8080][http-post-form] host: 127.0.0.1 login: admin password: secret123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-10-25 10:00:01
Remarquez la ligne indiquant le succès : [8080][http-post-form] host: 127.0.0.1 login: admin password: secret123. Hydra a réussi à identifier que la combinaison du nom d'utilisateur admin et du mot de passe secret123 ne renvoyait pas la chaîne "Invalid credentials", ce qui signifie que la connexion a été établie avec succès.
Résumé
Dans ce laboratoire, vous avez appris avec succès comment analyser et attaquer un système d'authentification Web vulnérable. Vous avez commencé par inspecter un formulaire de connexion HTTP POST pour identifier le chemin cible, les paramètres d'entrée et les messages d'échec. Vous avez ensuite créé des listes de mots personnalisées pour une attaque par dictionnaire. Enfin, vous avez configuré et exécuté l'outil de force brute Hydra pour automatiser les tentatives de connexion et récupérer avec succès les identifiants valides.
La compréhension de ces techniques souligne l'importance de mettre en œuvre des mesures de sécurité robustes, telles que le verrouillage des comptes, les CAPTCHA et l'authentification multifacteur (MFA), afin de protéger les applications Web contre les attaques par force brute automatisées.


