Boucles de mots de passe dans les attaques Hydra

HydraBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez comment Hydra parcourt les noms d'utilisateur et les mots de passe lors d'une attaque SSH. Vous créerez des listes de noms d'utilisateur et de mots de passe, puis vous exécuterez une attaque SSH par défaut pour observer le comportement par défaut d'Hydra.

Tout d'abord, vous préparerez les fichiers usernames.txt et passwords.txt contenant respectivement des listes de noms d'utilisateur et de mots de passe. Ensuite, vous exécuterez une attaque SSH Hydra de base en utilisant ces listes pour démontrer comment Hydra tente différentes combinaisons. Enfin, vous explorerez l'impact de l'option -u sur l'ordre dans lequel Hydra tente les combinaisons de noms d'utilisateur et de mots de passe.

Préparation des listes de noms d'utilisateur et de mots de passe

Dans cette étape, vous allez créer deux fichiers essentiels : une liste de noms d'utilisateur et une liste de mots de passe. Ces listes seront utilisées par Hydra pour tenter des connexions SSH. La création de ces listes vous permet de tester systématiquement différentes combinaisons de noms d'utilisateur et de mots de passe contre votre cible.

Tout d'abord, ouvrez votre terminal. Vous êtes actuellement dans le répertoire /home/labex/project (également accessible comme ~/project). Vous allez créer les fichiers dans ce répertoire.

Utilisez l'éditeur de texte nano pour créer un fichier nommé usernames.txt :

nano ~/project/usernames.txt

Maintenant, ajoutez les noms d'utilisateur suivants au fichier. Ce ne sont que des exemples ; vous pouvez les personnaliser selon vos besoins.

root
admin
test
user
ubuntu

Après avoir ajouté le contenu, enregistrez le fichier en appuyant sur Ctrl + O, puis sur Entrée pour confirmer le nom de fichier, et enfin sur Ctrl + X pour quitter nano.

Ensuite, vous allez créer la liste de mots de passe. Encore une fois, utilisez nano pour créer un fichier nommé passwords.txt :

nano ~/project/passwords.txt

Ajoutez les mots de passe suivants au fichier. N'oubliez pas que ce ne sont que des exemples.

password
123456
qwerty
secret
ubuntu

Enregistrez le fichier en appuyant sur Ctrl + O, puis sur Entrée pour confirmer le nom de fichier, et enfin sur Ctrl + X pour quitter nano.

Pour vérifier que les fichiers ont été créés correctement, vous pouvez utiliser la commande cat pour afficher leur contenu.

Affichez le contenu de usernames.txt :

cat ~/project/usernames.txt

Vous devriez voir une sortie similaire à ceci :

root
admin
test
user
ubuntu

De même, affichez le contenu de passwords.txt :

cat ~/project/passwords.txt

Vous devriez voir une sortie similaire à ceci :

password
123456
qwerty
secret
ubuntu

Ces fichiers, usernames.txt et passwords.txt, sont maintenant prêts à être utilisés avec Hydra dans les étapes suivantes.

Exécuter l'attaque SSH par défaut

Dans cette étape, vous exécuterez une attaque SSH de base à l'aide d'Hydra avec les listes de noms d'utilisateur et de mots de passe que vous avez créées à l'étape précédente. Cela permettra de démontrer le comportement par défaut d'Hydra, qui parcourt les noms d'utilisateur et les mots de passe.

La syntaxe de base de la commande Hydra est :

hydra [options] <target> <service> [options additionnelles]
  • hydra : La commande pour invoquer l'outil Hydra.
  • [options] : Diverses options pour personnaliser l'attaque, telles que la spécification des listes de noms d'utilisateur et de mots de passe.
  • <target> : L'adresse IP ou le nom d'hôte du serveur SSH cible. Pour ce laboratoire, vous utiliserez 127.0.0.1 (localhost) comme cible.
  • <service> : Le service à attaquer (par exemple, ssh, ftp, http). Dans ce cas, c'est ssh.
  • [options additionnelles] : Options spécifiques au service.

Maintenant, exécutez l'attaque SSH par défaut. Vous utiliserez l'option -L pour spécifier la liste de noms d'utilisateur, l'option -P pour spécifier la liste de mots de passe et l'option -V pour afficher une sortie détaillée montrant chaque tentative.

hydra -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh

Cette commande indique à Hydra de :

  • -V : Activer le mode détaillé pour afficher chaque tentative de connexion.
  • -L ~/project/usernames.txt : Utiliser le fichier usernames.txt dans le répertoire ~/project comme liste de noms d'utilisateur.
  • -P ~/project/passwords.txt : Utiliser le fichier passwords.txt dans le répertoire ~/project comme liste de mots de passe.
  • 127.0.0.1 : Cibler le service SSH exécuté sur le serveur local.
  • ssh : Spécifier que vous attaquez le service SSH.

Exécutez la commande dans votre terminal. Hydra tentera maintenant de se connecter au service SSH sur 127.0.0.1 en utilisant chaque nom d'utilisateur dans usernames.txt et chaque mot de passe dans passwords.txt. Par défaut, Hydra parcourt d'abord les noms d'utilisateur, en essayant chaque mot de passe pour un seul nom d'utilisateur avant de passer au nom d'utilisateur suivant.

La sortie affichera les tentatives effectuées. Vous verrez des informations détaillées sur chaque tentative de connexion. Étant donné que vous utilisez des mots de passe faibles et que vous ciblez le serveur local, il est possible qu'une connexion réussisse, mais la plupart des tentatives échoueront.

La sortie sera similaire à ceci (la sortie exacte peut varier) :

Hydra vX.X (c) XXXX by van Hauser/THC & David Maciejak - Veuillez ne pas utiliser dans les organisations militaires ou de services secrets, ou à des fins illégales (ceci n'est pas contraignant, ces *** ignorent les lois et l'éthique de toute façon).

Hydra (https://github.com/vanhauser-thc/thc-hydra) démarré le YYYY-MM-DD HH:MM:SS
[DATA] max X tâches par X serveur, X tâches au total, X tentatives de connexion (l :X/p :X), ~X tentative par tâche
[DATA] attaque ssh://127.0.0.1:22/
[VERBOSE] Résolution des adresses... [VERBOSE] résolution terminée
[ATTEMPT] cible 127.0.0.1 - connexion "root" - mot de passe "password" - X sur X [enfant X] (X/X)
[ATTEMPT] cible 127.0.0.1 - connexion "root" - mot de passe "123456" - X sur X [enfant X] (X/X)
[ATTEMPT] cible 127.0.0.1 - connexion "root" - mot de passe "qwerty" - X sur X [enfant X] (X/X)
[ATTEMPT] cible 127.0.0.1 - connexion "root" - mot de passe "secret" - X sur X [enfant X] (X/X)
[ATTEMPT] cible 127.0.0.1 - connexion "root" - mot de passe "ubuntu" - X sur X [enfant X] (X/X)
[ATTEMPT] cible 127.0.0.1 - connexion "admin" - mot de passe "password" - X sur X [enfant X] (X/X)
...

Remarquez comment Hydra essaie tous les mots de passe pour l'utilisateur "root" d'abord, puis passe à "admin", et ainsi de suite. Ceci est le comportement par défaut.

Exécuter avec -u pour boucler les mots de passe en premier

Dans cette étape, vous utiliserez l'option -u avec Hydra pour modifier l'ordre dans lequel il effectue les tentatives de connexion. Par défaut, Hydra parcourt d'abord les noms d'utilisateur, essayant tous les mots de passe pour chaque nom d'utilisateur avant de passer au suivant. L'option -u inverse ce comportement, faisant en sorte qu'Hydra parcourt d'abord les mots de passe, essayant chaque mot de passe pour tous les noms d'utilisateur avant de passer au mot de passe suivant.

Cela peut être utile dans les situations où vous soupçonnez qu'un mot de passe commun est utilisé sur plusieurs comptes.

Pour utiliser l'option -u, il suffit de l'ajouter à votre commande Hydra précédente. Vous utiliserez également l'option -V à nouveau pour voir les tentatives détaillées.

hydra -u -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh

Cette commande indique à Hydra de :

  • -u : Boucler les mots de passe en premier.
  • -V : Activer le mode détaillé pour afficher chaque tentative de connexion.
  • -L ~/project/usernames.txt : Utiliser le fichier usernames.txt dans le répertoire ~/project comme liste de noms d'utilisateur.
  • -P ~/project/passwords.txt : Utiliser le fichier passwords.txt dans le répertoire ~/project comme liste de mots de passe.
  • 127.0.0.1 : Cibler le service SSH exécuté sur le serveur local.
  • ssh : Spécifier que vous attaquez le service SSH.

Exécutez la commande dans votre terminal. Hydra tentera maintenant de se connecter au service SSH sur 127.0.0.1. Cette fois, il essaiera le premier mot de passe dans passwords.txt avec chaque nom d'utilisateur dans usernames.txt avant de passer au mot de passe suivant.

Observez la sortie. Vous remarquerez que l'ordre des tentatives est différent de l'étape précédente. Hydra essaiera maintenant le même mot de passe sur plusieurs noms d'utilisateur consécutivement.

La sortie sera similaire à ceci (la sortie exacte peut varier) :

Hydra vX.X (c) 2021 by van Hauser/THC & David Maciejak - Veuillez ne pas utiliser dans les organisations militaires ou de services secrets, ou à des fins illégales (ceci n'est pas contraignant, ces *** ignorent les lois et l'éthique de toute façon).

Hydra (https://github.com/vanhauser-thc/thc-hydra) démarré le YYYY-MM-DD HH:MM:SS
[DATA] max X tâches par X serveur, X tâches au total, X tentatives de connexion (l:X/p:X), ~X tentative par tâche
[DATA] attaque ssh://127.0.0.1:22/
[VERBOSE] Résolution des adresses... [VERBOSE] résolution terminée
[ATTEMPT] cible 127.0.0.1 - login "root" - pass "password" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "admin" - pass "password" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "test" - pass "password" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "user" - pass "password" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "ubuntu" - pass "password" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "root" - pass "123456" - X sur X [child X] (X/X)
[ATTEMPT] cible 127.0.0.1 - login "admin" - pass "123456" - X sur X [child X] (X/X)
...

Remarquez comment Hydra essaie maintenant le "mot de passe" avec tous les noms d'utilisateur en premier, puis passe à "123456" pour tous les noms d'utilisateur, et ainsi de suite. Ceci est le comportement lorsqu'on utilise l'option -u.

En comparant la sortie de cette commande avec la sortie de la commande de l'étape précédente, vous pouvez clairement voir la différence dans l'ordre des tentatives de connexion. Cela peut être utile pour comprendre le fonctionnement d'Hydra et pour choisir la stratégie d'attaque la plus efficace pour une situation donnée.

Analyser les schémas d'attaque et les performances

Dans cette étape, vous analyserez les différences pratiques entre les deux méthodes d'attaque et comprendrez quand chaque approche peut être plus efficace. Vous explorerez également comment optimiser les attaques Hydra en fonction de différents scénarios.

Comprendre la différence stratégique

Le choix entre le mode par défaut et le mode -u peut avoir un impact significatif sur l'efficacité de l'attaque :

  • Mode par défaut (nom d'utilisateur en premier) : Plus efficace lorsque vous soupçonnez que des utilisateurs spécifiques ont des mots de passe faibles.
  • Mode mot de passe en premier (-u) : Plus efficace lorsque vous soupçonnez que des mots de passe communs sont utilisés sur plusieurs comptes.

Démontrons cela avec une approche plus ciblée. Tout d'abord, créez un test plus restreint et plus ciblé pour voir clairement la différence :

echo -e "admin\ntest" > ~/project/small_users.txt
echo -e "password\n123456" > ~/project/small_passwords.txt

Exécutez maintenant les deux attaques avec une sortie limitée pour voir clairement le modèle :

Attaque par défaut (nom d'utilisateur en premier) :

hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh

L'option -t 1 limite Hydra à utiliser une seule tâche à la fois, ce qui rend la séquence plus facile à suivre.

Attaque mot de passe en premier :

hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh

Analyse des performances

Analysons maintenant le temps d'exécution et l'efficacité. Créez un test de temps simple :

echo "Testing default mode timing..."
time hydra -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
echo "Testing -u mode timing..."
time hydra -u -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1

Scénarios d'application réels

Comprendre quand utiliser chaque mode :

  1. Utilisez le mode par défaut lorsque :

    • Vous disposez d'informations sur des comptes spécifiques à haute valeur.
    • Vous souhaitez rapidement tester si les comptes administrateurs ont des mots de passe faibles.
    • Vous ciblez un petit nombre d'utilisateurs privilégiés.
  2. Utilisez le mode -u lorsque :

    • Vous soupçonnez une réutilisation de mots de passe sur plusieurs comptes.
    • Vous disposez d'une liste de mots de passe courants provenant de violations précédentes.
    • Vous souhaitez trouver tout compte avec un mot de passe faible commun.

Vérifier les modèles d'attaque

Pour voir clairement la différence dans les modèles d'attaque, créons une démonstration simple :

echo "=== Modèle de mode par défaut ==="
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
echo "=== Modèle de mode mot de passe en premier ==="
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4

Cela vous montrera clairement :

  • Mode par défaut : admin/password, admin/123456, test/password, test/123456
  • Mode mot de passe en premier : admin/password, test/password, admin/123456, test/123456

La différence devient cruciale lorsqu'il s'agit de politiques de verrouillage de compte ou lorsqu'il s'agit d'éviter la détection en répartissant les tentatives sur plusieurs comptes.

Résumé

Dans ce laboratoire, vous avez appris à préparer les fichiers nécessaires à une attaque SSH avec Hydra en créant des listes de noms d'utilisateur et de mots de passe dans le répertoire ~/project. Vous avez exécuté des attaques SSH à l'aide d'Hydra avec une sortie détaillée pour observer les tentatives d'attaque détaillées et comprendre le comportement d'itération d'Hydra.

Vous avez exploré la différence cruciale entre le mode par défaut d'Hydra (itération nom d'utilisateur en premier) et l'option -u (itération mot de passe en premier). Grâce à la pratique, vous avez découvert :

  • Mode par défaut : Essaie tous les mots de passe pour chaque nom d'utilisateur avant de passer au nom d'utilisateur suivant - idéal pour cibler des comptes spécifiques à haute valeur.
  • Mode mot de passe en premier (-u) : Essaie chaque mot de passe avec tous les noms d'utilisateur avant de passer au mot de passe suivant - plus adapté pour trouver des comptes avec des mots de passe faibles communs.

Vous avez également appris les considérations pratiques pour choisir entre ces modes, y compris les implications en termes de performances et les scénarios réels où chaque approche est la plus efficace. Cette compréhension vous permet d'optimiser vos stratégies de tests de pénétration en fonction de l'environnement cible et des objectifs spécifiques.

Le laboratoire a démontré comment différents modèles d'attaque peuvent être cruciaux lorsqu'il s'agit de politiques de verrouillage de compte ou lorsqu'il s'agit d'éviter la détection en répartissant les tentatives de connexion sur plusieurs comptes.