Introduction
Dans ce laboratoire, nous allons voir comment interrompre rapidement une attaque Hydra en utilisant ses options de limitation du nombre de tentatives. Nous commencerons par configurer un serveur FTP avec vsftpd et par créer plusieurs comptes utilisateur, testuser1 et testuser2, chacun associé à son propre mot de passe. Cette configuration nous permettra de simuler une situation dans laquelle Hydra tente de compromettre plusieurs comptes simultanément.
Nous utiliserons ensuite l’option -f pour arrêter Hydra dès la première connexion réussie, puis l’option -F avec une liste de plusieurs hôtes. Enfin, nous comparerons le comportement de -f et de -F afin de comprendre comment ces options peuvent contribuer à limiter les attaques Hydra.
Configurer un serveur FTP avec plusieurs identifiants
Dans cette étape, nous allons configurer un serveur FTP avec plusieurs identifiants utilisateur. Cela nous permettra de tester la capacité de Hydra à tenter de compromettre plusieurs comptes simultanément. Nous utiliserons vsftpd (Very Secure FTP Daemon) comme serveur FTP.
Commençons par installer vsftpd. Ouvrez un terminal et exécutez la commande suivante :
sudo apt update
sudo apt install vsftpd -y
Nous devons ensuite configurer vsftpd. Commencez par créer une copie de sauvegarde du fichier de configuration d’origine. Il s’agit d’une bonne pratique avant toute modification d’un fichier de configuration système.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Modifions maintenant le fichier de configuration /etc/vsftpd.conf avec nano. Ce fichier contrôle le comportement du serveur FTP.
sudo nano /etc/vsftpd.conf
Dans l’éditeur nano, ajoutez ou modifiez les lignes suivantes. Ces paramètres désactivent l’accès anonyme, autorisent les connexions des utilisateurs locaux, permettent l’écriture et enferment les utilisateurs locaux dans leur répertoire personnel pour renforcer la sécurité.
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
Pour enregistrer le fichier dans nano, appuyez sur Ctrl + X, puis sur Y pour confirmer l’enregistrement, et enfin sur Enter pour confirmer le nom du fichier.
Après avoir enregistré le fichier, vérifiez que les modifications ont bien été appliquées à l’aide de la commande suivante :
sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"
Assurez-vous que la sortie affiche la même configuration que celle que nous avons ajoutée.
Créons maintenant plusieurs comptes utilisateur. Nous allons créer deux utilisateurs, testuser1 et testuser2, et leur attribuer un mot de passe. Hydra utilisera ces comptes pour tenter de se connecter.
Créez testuser1 avec un répertoire personnel :
sudo useradd -m testuser1
Définissez le mot de passe de testuser1 à l’aide d’une commande non interactive :
echo 'testuser1:password123' | sudo chpasswd
Créez testuser2 avec un répertoire personnel :
sudo useradd -m testuser2
Définissez le mot de passe de testuser2 à l’aide d’une commande non interactive :
echo 'testuser2:password456' | sudo chpasswd
Ces commandes sont non interactives : elles créent directement les utilisateurs sans demander de saisie, ce qui les rend plus fiables dans les environnements automatisés.
Nous devons maintenant corriger les permissions des répertoires personnels pour la configuration chroot. Lorsque chroot_local_user=YES est activé, le répertoire personnel de l’utilisateur ne doit pas être accessible en écriture par celui-ci, pour des raisons de sécurité :
sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2
Créez pour chaque utilisateur un sous-répertoire accessible en écriture, dans lequel il pourra téléverser des fichiers :
sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files
Redémarrez ensuite le service vsftpd afin d’appliquer les modifications de configuration et de prendre en compte les nouveaux utilisateurs.
sudo service vsftpd restart
Testons maintenant le serveur FTP pour vérifier qu’il fonctionne correctement et que les nouveaux utilisateurs peuvent se connecter. Vous pouvez utiliser le client en ligne de commande ftp. Comme le serveur s’exécute localement, nous pouvons nous connecter à localhost.
ftp localhost
Le système vous demandera un nom d’utilisateur. Saisissez testuser1, puis le mot de passe password123. Si la configuration est correcte, un message indiquant que vous êtes connecté devrait s’afficher.
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Vous pouvez saisir bye pour quitter le client FTP.
ftp> bye
221 Goodbye.
Préparons maintenant les fichiers qu’Hydra utilisera pour son attaque. Accédez à votre répertoire ~/project, qui constitue votre répertoire de travail par défaut.
cd ~/project
Créez un fichier nommé users.txt dans le répertoire ~/project. Il contiendra les noms d’utilisateur qu’Hydra tentera d’utiliser.
nano users.txt
Ajoutez les noms d’utilisateur suivants dans users.txt :
testuser1
testuser2
Enregistrez le fichier et quittez nano.
Créez ensuite un fichier nommé passwords.txt dans le répertoire ~/project. Il contiendra une liste de mots de passe, notamment les mots de passe corrects de nos utilisateurs de test ainsi que quelques mots de passe incorrects courants.
nano passwords.txt
Ajoutez les mots de passe suivants dans passwords.txt :
password123
password456
password
123456
qwerty
Enregistrez le fichier et quittez nano.
Nous disposons désormais d’un serveur FTP configuré avec plusieurs comptes utilisateur, ainsi que de listes de noms d’utilisateur et de mots de passe qu’Hydra peut utiliser pour tenter de compromettre ces comptes.
Exécuter Hydra avec -f pour s’arrêter après la première combinaison valide
Dans cette étape, nous allons utiliser l’option -f de Hydra. Cette option demande à Hydra de s’arrêter dès qu’il trouve la première combinaison valide nom d’utilisateur/mot de passe pour une cible unique. Elle est utile lorsque vous devez simplement trouver un compte valide sur un service donné et que vous ne souhaitez pas qu’Hydra continue à tester d’autres combinaisons après une connexion réussie.
Vérifiez que vous vous trouvez dans le répertoire ~/project.
cd ~/project
Exécutons maintenant Hydra contre notre serveur FTP en utilisant les listes de noms d’utilisateur et de mots de passe créées à l’étape précédente. Nous ajouterons l’option -f.
hydra -L users.txt -P passwords.txt localhost ftp -f
Décomposons cette commande :
hydra: l’outil en ligne de commande utilisé pour les attaques par force brute.-L users.txt: indique le fichier contenant la liste des noms d’utilisateur (users.txtdans le répertoire courant).-P passwords.txt: indique le fichier contenant la liste des mots de passe (passwords.txtdans le répertoire courant).localhost: l’adresse du serveur FTP cible.ftp: le protocole du service ciblé, ici FTP.-f: l’option essentielle qui demande à Hydra de s’arrêter après avoir trouvé la première combinaison valide nom d’utilisateur/mot de passe.
Observez la sortie dans votre terminal. Hydra tentera de se connecter en utilisant les noms d’utilisateur et les mots de passe des listes. Dès qu’il trouvera une combinaison valide, par exemple testuser1:password123, il affichera la connexion réussie puis arrêtera son exécution.
La sortie devrait ressembler à ceci :
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost login: testuser1 password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47
Remarquez qu’Hydra s’est arrêté immédiatement après avoir trouvé la première combinaison valide (testuser1:password123). Sans l’option -f, Hydra aurait continué à tester toutes les autres combinaisons du fichier passwords.txt pour testuser1, puis serait passé à testuser2 pour essayer également tous les mots de passe associés à cet utilisateur.
Cette option est particulièrement utile lorsque vous testez un service précis et que vous devez uniquement vérifier qu’au moins un compte est vulnérable, ce qui permet d’économiser beaucoup de temps et de ressources.
Tester -F avec une liste de plusieurs hôtes
Dans cette étape, nous allons étudier l’option -F de Hydra. Contrairement à -f, qui arrête l’exécution après la première combinaison d’identifiants valide pour un hôte unique, -F s’arrête dès qu’une première combinaison valide est trouvée parmi tous les hôtes d’une liste. Cette option est particulièrement utile lorsque vous ciblez plusieurs systèmes et que vous devez seulement identifier une entrée vulnérable parmi eux.
Pour illustrer ce comportement, nous allons simuler un scénario avec plusieurs hôtes. Comme nous ne disposons que d’une seule machine virtuelle, nous utiliserons plusieurs fois localhost dans la liste afin de représenter différentes cibles.
Commencez par vérifier que vous êtes dans le répertoire ~/project.
cd ~/project
Créons maintenant un fichier nommé hosts.txt dans votre répertoire ~/project. Il contiendra la liste des hôtes cibles.
nano hosts.txt
Ajoutez les lignes suivantes dans hosts.txt :
localhost
localhost
Enregistrez le fichier et quittez nano. En inscrivant deux fois localhost, nous demandons à Hydra de le traiter comme deux cibles distinctes, même si elles correspondent à la même machine.
Exécutons maintenant Hydra avec l’option -F en ciblant la liste d’hôtes indiquée dans hosts.txt.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Décomposons cette commande :
-L users.txt: indique le fichier contenant la liste des noms d’utilisateur.-P passwords.txt: indique le fichier contenant la liste des mots de passe.-M hosts.txt: il s’agit de la nouvelle option. Elle indique le fichier contenant la liste des hôtes cibles (hosts.txtdans le répertoire courant).ftp: le protocole du service ciblé.-F: l’option essentielle qui demande à Hydra de s’arrêter après la première connexion réussie parmi tous les hôtes de la liste.
Observez la sortie dans votre terminal. Hydra tentera de se connecter à chaque hôte du fichier hosts.txt en utilisant les noms d’utilisateur et les mots de passe des listes. Dès qu’une combinaison valide sera trouvée sur l’un des hôtes, Hydra affichera la connexion réussie puis cessera d’attaquer tous les hôtes répertoriés dans hosts.txt.
La sortie devrait ressembler à ceci :
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost login: testuser1 password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11
Même si le fichier hosts.txt contient deux entrées localhost, Hydra s’arrête après avoir trouvé la première connexion réussie sur la première instance de localhost. Il ne poursuit pas la recherche d’identifiants pour la seconde entrée, ce qui démontre l’effet de l’option -F.
L’option -F est très utile lorsque vous ciblez plusieurs systèmes et que la découverte d’un seul système vulnérable suffit à atteindre votre objectif. Elle permet de réduire considérablement le temps d’exécution et les ressources consommées en interrompant l’attaque dès qu’une vulnérabilité est détectée sur l’une des cibles listées.
Comparer le comportement de -f et de -F
Dans cette étape, nous allons comparer directement le comportement des options -f et -F afin de bien comprendre leurs différences. Nous utiliserons la même configuration que précédemment : un serveur FTP exécuté sur localhost, les fichiers users.txt et passwords.txt, ainsi que le fichier hosts.txt contenant deux entrées localhost.
Commençons par exécuter à nouveau la commande avec l’option -f. Cette commande cible un seul hôte (localhost) et s’arrête après avoir trouvé les premiers identifiants valides pour cet hôte précis.
hydra -L users.txt -P passwords.txt localhost ftp -f
Comme nous l’avons constaté à l’étape 2, Hydra trouvera testuser1:password123, puis s’arrêtera. Il ne tentera pas de trouver testuser2:password456 sur localhost.
Exécutons maintenant à nouveau la commande avec l’option -F. Cette commande cible une liste d’hôtes (hosts.txt) et s’arrête après avoir trouvé les premiers identifiants valides sur l’un des hôtes de cette liste.
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
Comme nous l’avons observé à l’étape 3, Hydra trouvera testuser1:password123 sur la première entrée localhost de hosts.txt, puis s’arrêtera. Il ne poursuivra pas la vérification de la seconde entrée localhost du fichier hosts.txt.
La différence fondamentale tient à la manière dont Hydra interprète la cible et détermine le moment où il doit s’arrêter :
-f(cible unique) : lorsque vous indiquez une seule cible, par exemplelocalhost,-fdemande à Hydra de s’arrêter dès qu’il trouve une combinaison valide nom d’utilisateur/mot de passe pour cette cible précise. Il ne poursuivra pas la recherche d’autres identifiants valides sur la même cible.-F(liste de plusieurs hôtes) : lorsque vous indiquez une liste de cibles avec-M,-Fdemande à Hydra de s’arrêter dès qu’il trouve une combinaison valide nom d’utilisateur/mot de passe sur l’un des hôtes de cette liste. Il ne poursuivra ni la recherche d’autres identifiants valides sur le même hôte, ni la vérification des hôtes suivants de la liste.
Pour mieux illustrer cette différence, prenons le cas hypothétique où vous analysez un réseau comprenant plusieurs serveurs FTP : ftp1.example.com, ftp2.example.com et ftp3.example.com.
Si vous utilisez
-fen ciblantftp1.example.com, Hydra trouvera les premiers identifiants valides surftp1.example.com, puis s’arrêtera. Si vous souhaitez ensuite vérifierftp2.example.com, vous devrez exécuter une nouvelle commande Hydra.Si vous placez les trois serveurs dans un fichier
hosts.txtet utilisez-F, Hydra commencera par vérifierftp1.example.com. S’il y trouve des identifiants valides, il interrompra immédiatement toute l’opération, sans même tenter de se connecter àftp2.example.comouftp3.example.com.
En résumé :
- Utilisez
-florsque vous vous concentrez sur une cible unique et souhaitez trouver au moins un identifiant valide pour celle-ci. - Utilisez
-Florsque vous analysez plusieurs cibles et souhaitez interrompre toute l’opération dès qu’un identifiant valide est trouvé sur l’une d’entre elles.
Le laboratoire est maintenant terminé. Vous avez configuré un serveur FTP, créé plusieurs comptes utilisateur et utilisé Hydra pour tester ces comptes, tout en explorant les options -f et -F qui permettent de contrôler le comportement de l’attaque.
Résumé
Dans ce laboratoire, vous avez appris à contrôler le comportement d’une attaque Hydra à l’aide des options -f et -F. Vous avez commencé par configurer un serveur FTP local avec vsftpd et par créer plusieurs comptes utilisateur (testuser1 et testuser2) afin de simuler un scénario réel. Vous avez également préparé les fichiers users.txt et passwords.txt qu’Hydra devait utiliser.
Vous avez ensuite utilisé l’option -f pour demander à Hydra de s’arrêter après la première combinaison valide nom d’utilisateur/mot de passe sur une cible unique, ce qui montre comment identifier efficacement un compte vulnérable. Vous avez ensuite étudié l’option -F avec une liste de plusieurs hôtes (hosts.txt) et appris qu’Hydra peut interrompre une attaque visant plusieurs cibles dès qu’un seul identifiant valide est trouvé sur l’un des hôtes répertoriés.
Enfin, vous avez comparé les comportements distincts de -f et de -F et compris leurs cas d’utilisation respectifs : -f pour s’arrêter après le premier succès sur une cible unique, et -F pour s’arrêter après le premier succès parmi plusieurs cibles. Ces connaissances sont essentielles pour optimiser les attaques par force brute et gérer efficacement les ressources.


