Optimiser les délais de réponse d'Hydra

HydraBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à affiner les temps d'attente des réponses d'Hydra lors d'attaques sur des services aux réponses potentiellement lentes ou peu fiables. Nous utiliserons SMTP comme exemple pour démontrer ces concepts.

Vous commencerez par configurer un serveur SMTP simple avec une réponse simulée retardée à l'aide de Python. Cela vous permettra de simuler un environnement réseau lent ou peu fiable. Ensuite, vous exécuterez Hydra contre ce serveur, d'abord avec ses paramètres d'attente par défaut, puis en ajustant le temps d'attente à l'aide de l'option -w pour observer son impact. Enfin, vous explorerez les options -l et -p pour spécifier directement des identifiants uniques et les tester avec un seul thread.

Configuration d'un serveur SMTP avec réponse retardée

Dans cette étape, vous configurerez un serveur SMTP simple à l'aide de Python. Ce serveur introduira un délai dans ses réponses, simulant un service lent ou peu fiable. Cette configuration est essentielle pour comprendre comment les paramètres de temps d'attente d'Hydra affectent ses performances.

Tout d'abord, vous devez créer un script Python nommé delayed_smtp.py dans votre répertoire ~/project. Ce script agira comme votre serveur SMTP.

Ouvrez l'éditeur de texte nano pour créer ce fichier :

nano ~/project/delayed_smtp.py

Maintenant, copiez et collez le code Python suivant dans le fichier delayed_smtp.py :

import socket
import time
import threading

def handle_client(client_socket):
    try:
        ## Envoi de la salutation
        client_socket.send(b"220 localhost ESMTP\r\n")

        while True:
            data = client_socket.recv(1024).decode('utf-8').strip()
            if not data:
                break

            if data.upper().startswith('EHLO') or data.upper().startswith('HELO'):
                client_socket.send(b"250-localhost\r\n250-AUTH LOGIN\r\n250 OK\r\n")

            elif data.upper().startswith('AUTH LOGIN'):
                client_socket.send(b"334 VXNlcm5hbWU6\r\n")  ## Nom d'utilisateur :
                client_socket.recv(1024)  ## Réception du nom d'utilisateur

                ## Ajout d'un délai de 5 secondes
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## Mot de passe :
                client_socket.recv(1024)  ## Réception du mot de passe
                client_socket.send(b"235 Authentication successful\r\n")

            elif data.upper().startswith('QUIT'):
                client_socket.send(b"221 Bye\r\n")
                break
            else:
                client_socket.send(b"250 OK\r\n")

    except:
        pass
    finally:
        client_socket.close()

def run_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(('127.0.0.1', 1025))
    server.listen(5)
    print("Serveur SMTP démarré sur le port 1025")

    while True:
        try:
            client, addr = server.accept()
            thread = threading.Thread(target=handle_client, args=(client,))
            thread.daemon = True
            thread.start()
        except:
            break

if __name__ == '__main__':
    run_server()

Ce script Python simplifié crée un serveur SMTP de base qui écoute sur le port 1025. Le serveur prend en charge l'authentification SMTP en utilisant la méthode LOGIN, ce que Hydra attend. La fonctionnalité clé est la ligne time.sleep(5) dans le gestionnaire d'authentification, qui introduit un délai de 5 secondes pendant le processus d'authentification pour simuler une réponse réseau lente.

Après avoir collé le code, enregistrez le fichier et quittez nano en appuyant sur Ctrl + X, puis Y, puis Entrée.

Ensuite, vous devez exécuter ce script Python en arrière-plan. L'utilisation de nohup garantit que le script continue de s'exécuter même si vous fermez votre session de terminal. Vous redirigez également sa sortie vers un fichier journal nommé delayed_smtp.log à des fins de surveillance.

Exécutez la commande suivante dans votre terminal :

nohup python3 ~/project/delayed_smtp.py > ~/project/delayed_smtp.log 2>&1 &

Cette commande démarre le serveur SMTP. Le & à la fin envoie le processus en arrière-plan, vous permettant de continuer à utiliser votre terminal.

Pour confirmer que le serveur SMTP est en cours d'exécution et écoute sur le port 1025, vous pouvez utiliser la commande ss. La commande ss est un utilitaire pour enquêter sur les sockets.

ss -tulnp | grep 1025

Vous devriez voir une sortie similaire à ceci, indiquant que le serveur écoute sur le port 1025 :

tcp   LISTEN 0      4096   0.0.0.0:1025      0.0.0.0:*    users:(("python3",pid=XXXX,fd=X))

Le pid=XXXX affichera l'ID de processus réel de votre script Python. Cela confirme que votre serveur SMTP avec délai est maintenant actif et prêt pour les tests.

Cette sortie confirme que le serveur SMTP Python fonctionne correctement et écoute sur le port 1025. L'état LISTEN indique que le serveur est prêt à accepter les connexions, et le nom de processus python3 confirme que notre script est en cours d'exécution. Le délai de 5 secondes intégré dans ce serveur nous aidera à comprendre comment les paramètres de temps d'attente d'Hydra affectent les performances des attaques.

Serveur SMTP avec délai en cours d'exécution sur le port 1025

Exécuter Hydra avec le délai d'attente par défaut

Dans cette étape, vous exécuterez Hydra contre le serveur SMTP avec délai que vous avez configuré. Vous utiliserez le temps d'attente par défaut d'Hydra, qui est de 10 secondes. Cela permettra de démontrer le comportement d'Hydra lorsque le service cible présente un délai de réponse compris dans la limite de délai par défaut d'Hydra.

Tout d'abord, vous devez créer une liste d'utilisateurs et une liste de mots de passe pour Hydra. Ces fichiers seront situés dans votre répertoire ~/project.

Créez le fichier users.txt :

nano ~/project/users.txt

Ajoutez les noms d'utilisateur suivants au fichier users.txt :

testuser
admin
user

Enregistrez le fichier et quittez nano (Ctrl + X, Y, Entrée).

Ensuite, créez le fichier passwords.txt :

nano ~/project/passwords.txt

Ajoutez les mots de passe suivants au fichier passwords.txt :

password
123456
test

Enregistrez le fichier et quittez nano (Ctrl + X, Y, Entrée).

Maintenant, vous exécuterez Hydra. Vous ciblerez le serveur SMTP exécuté sur localhost (127.0.0.1) sur le port 1025. Vous utiliserez le module smtp, votre liste users.txt et votre liste passwords.txt. L'option -t 1 garantit qu'Hydra utilise un seul thread, ce qui facilite le suivi des résultats.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025

Décomposons la commande :

  • hydra : La commande pour invoquer l'outil Hydra.
  • -L ~/project/users.txt : Spécifie le chemin vers le fichier contenant la liste des noms d'utilisateur.
  • -P ~/project/passwords.txt : Spécifie le chemin vers le fichier contenant la liste des mots de passe.
  • -vV : Active le mode verbeux, qui affiche des informations détaillées sur les tentatives de connexion, y compris les réussites et les échecs.
  • -t 1 : Définit le nombre de tâches parallèles (threads) à 1. Ceci est utile pour observer chaque tentative séquentiellement.
  • 127.0.0.1 : L'adresse IP cible, qui est votre machine locale.
  • smtp : Le module de service que Hydra doit utiliser pour l'attaque, dans ce cas, SMTP.
  • -s 1025 : Spécifie le numéro de port du service cible, qui est 1025 pour votre serveur SMTP avec délai.

Puisque votre serveur SMTP a un délai de 5 secondes et que le temps d'attente par défaut d'Hydra est de 10 secondes, Hydra devrait réussir chaque tentative sans dépasser le délai. Vous verrez une sortie similaire à la suivante, montrant Hydra essayant chaque combinaison de nom d'utilisateur et de mot de passe :

labex:project/ $ hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025
Hydra v9.2 (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 2025-05-29 13:47:03
[INFO] plusieurs fournisseurs ont mis en œuvre une protection contre le piratage, vérifiez d'abord avec une petite liste de mots - et restez légal !
[DATA] max 1 tâche par 1 serveur, au total 1 tâche, 9 essais de connexion (l:3/p:3), ~9 essais par tâche
[DATA] attaque smtp://127.0.0.1:1025/
[VERBOSE] Résolution des adresses... [VERBOSE] résolution terminée
[ATTEMPT] cible 127.0.0.1 - connexion "testuser" - mot de passe "password" - 1 sur 9 [enfant 0] (0/0)
[VERBOSE] utilisation du mécanisme d'authentification SMTP LOGIN
[1025][smtp] hôte : 127.0.0.1  login : testuser  mot de passe : password
... (autres tentatives)
[STATUS] attaque terminée pour 127.0.0.1 (attente de la fin des tests des enfants)
1 sur 1 cible terminée avec succès, 3 mots de passe valides trouvés
Hydra (https://github.com/vanhauser-thc/thc-hydra) terminé le 2025-05-29 13:47:20

Cette sortie démontre Hydra fonctionnant avec son temps d'attente par défaut de 10 secondes contre un serveur avec des délais de 5 secondes. Notez que toutes les tentatives sont réussies sans dépassement de délai, ce qui montre que le temps d'attente par défaut est suffisant dans ce scénario. La ligne [DATA] indique 9 tentatives au total (3 utilisateurs × 3 mots de passe), et chaque connexion réussie est marquée par [1025][smtp], indiquant le port et le type de service.

Ajuster le délai d'attente avec -w

Dans cette étape, vous définirez explicitement le temps d'attente d'Hydra à l'aide de l'option -w. Bien que le temps d'attente par défaut (10 secondes) soit suffisant pour notre délai de 5 secondes, il est crucial de comprendre et de contrôler ce paramètre pour adapter Hydra à divers conditions réseau et comportements de serveur.

Vous utiliserez les mêmes listes de noms d'utilisateur et de mots de passe (users.txt et passwords.txt) que celles créées à l'étape précédente.

Maintenant, exécutez à nouveau Hydra, en ajoutant cette fois explicitement l'option -w. Cette commande se comportera de manière identique à la précédente, car 10 secondes est le temps d'attente par défaut d'Hydra, mais elle démontre comment utiliser l'option.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 -w 10 127.0.0.1 smtp -s 1025

Voici la décomposition de la commande, avec la différence clé mise en évidence :

  • hydra : La commande Hydra.
  • -L ~/project/users.txt : Spécifie le fichier de liste de noms d'utilisateur.
  • -P ~/project/passwords.txt : Spécifie le fichier de liste de mots de passe.
  • -vV : Active le mode verbeux.
  • -t 1 : Définit le nombre de threads à 1.
  • -w 10 : Définit explicitement le temps d'attente (timeout) à 10 secondes. Cela signifie qu'Hydra attendra jusqu'à 10 secondes une réponse du service cible avant de considérer la tentative comme un échec.
  • 127.0.0.1 : L'adresse IP cible.
  • smtp : Le module de service.
  • -s 1025 : Spécifie le numéro de port.

La sortie sera similaire à l'étape précédente, car le temps d'attente de 10 secondes est suffisant pour le délai de 5 secondes de votre serveur SMTP. Cette étape sert principalement à illustrer l'utilisation de l'option -w.

Hydra v9.2 (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 2025-05-29 14:02:49
[INFO] plusieurs fournisseurs ont mis en œuvre une protection contre le piratage, vérifiez d'abord avec une petite liste de mots - et restez légal !
[DATA] max 1 tâche par 1 serveur, au total 1 tâche, 9 essais de connexion (l:3/p:3), ~9 essais par tâche
[DATA] attaque smtp://127.0.0.1:1025/
[VERBOSE] Résolution des adresses... [VERBOSE] résolution terminée
[ATTEMPT] cible 127.0.0.1 - connexion "testuser" - mot de passe "password" - 1 sur 9 [enfant 0] (0/0)
[VERBOSE] utilisation du mécanisme d'authentification SMTP LOGIN
[1025][smtp] hôte : 127.0.0.1  login : testuser  mot de passe : password
... (autres tentatives)
[STATUS] attaque terminée pour 127.0.0.1 (attente de la fin des tests des enfants)
1 sur 1 cible terminée avec succès, 3 mots de passe valides trouvés
Hydra (https://github.com/vanhauser-thc/thc-hydra) terminé le 2025-05-29 14:03:05

Cette sortie démontre l'utilisation explicite de -w 10 pour définir le temps d'attente à 10 secondes, produisant des résultats identiques à la configuration par défaut. L'attaque s'est terminée avec succès, trouvant les 3 mots de passe valides dans le délai de 16 secondes (de 14h02min49s à 14h03min05s). Cette étape montre comment contrôler explicitement les paramètres de délai, ce qui devient essentiel lorsque l'on traite des serveurs dont les temps de réponse sont plus longs que la limite par défaut de 10 secondes.

Tester un seul identifiant avec les options -l et -p

Dans cette étape, vous apprendrez à utiliser les options -l et -p d'Hydra pour tester une seule combinaison d'identifiant et de mot de passe. Cette approche vous permet de spécifier directement une seule paire d'identifiants sur la ligne de commande, au lieu d'utiliser des fichiers séparés. Ceci est particulièrement utile pour tester rapidement une paire d'identifiants spécifique sans créer ni modifier de fichiers.

Vous continuerez à utiliser le serveur SMTP avec délai que vous avez configuré à la première étape.

Exécutez la commande Hydra suivante, en utilisant l'option -l pour spécifier le nom d'utilisateur et l'option -p pour spécifier le mot de passe :

hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025

Décomposons cette commande :

  • hydra : La commande Hydra.
  • -t 1 : Définit le nombre de threads à 1, assurant une tentative claire et séquentielle.
  • -l testuser : Spécifie le nom d'utilisateur à tester. L'option -l (L minuscule) est utilisée pour un seul nom d'utilisateur.
  • -p password : Spécifie le mot de passe à tester. L'option -p est utilisée pour un seul mot de passe.
  • -vV : Active le mode verbeux.
  • 127.0.0.1 : L'adresse IP cible.
  • smtp : Le module de service.
  • -s 1025 : Spécifie le numéro de port.

Dans ce scénario, Hydra tentera uniquement de se connecter avec la seule paire d'identifiants testuser:password. Puisque notre serveur SMTP accepte n'importe quels identifiants à des fins de démonstration, Hydra signalera une connexion réussie.

Vous verrez une sortie similaire à ceci :

labex:project/ $ hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025
Hydra v9.2 (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 2025-05-29 13:50:25
[INFO] plusieurs fournisseurs ont mis en œuvre une protection contre le piratage, vérifiez d'abord avec une petite liste de mots - et restez légal !
[DATA] max 1 tâche par 1 serveur, au total 1 tâche, 1 essai de connexion (l:1/p:1), ~1 essai par tâche
[DATA] attaque smtp://127.0.0.1:1025/
[VERBOSE] Résolution des adresses... [VERBOSE] résolution terminée
[ATTEMPT] cible 127.0.0.1 - login "testuser" - pass "password" - 1 sur 1 [enfant 0] (0/0)
[VERBOSE] utilisation du mécanisme d'authentification SMTP LOGIN
[1025][smtp] hôte : 127.0.0.1  login : testuser  mot de passe : password
[STATUS] attaque terminée pour 127.0.0.1 (attente de la fin des tests des enfants)
1 sur 1 cible terminée avec succès, 1 mot de passe valide trouvé
Hydra (https://github.com/vanhauser-thc/thc-hydra) terminé le 2025-05-29 13:50:30

Cette sortie démontre le test d'une seule paire d'identifiants à l'aide des options -l et -p au lieu de fichiers de liste de mots. Notez que la ligne [DATA] indique maintenant 1 essai de connexion (l:1/p:1), indiquant qu'un seul nom d'utilisateur et un seul mot de passe sont testés. Cette approche est efficace pour les tests ciblés lorsque vous avez des identifiants spécifiques à vérifier, et elle est beaucoup plus rapide car il n'y a qu'une seule tentative au lieu de neuf.

Résumé

Dans ce laboratoire, vous avez appris à affiner le comportement d'Hydra face à des services aux réponses lentes ou peu fiables.

Vous avez commencé par configurer un serveur SMTP simulé lent à l'aide d'un script Python, introduisant un délai de 5 secondes dans ses réponses. Cela vous a permis de créer un environnement contrôlé pour tester les paramètres de délai d'attente d'Hydra. Vous avez ensuite exécuté Hydra contre ce serveur, d'abord en observant son comportement par défaut, puis en ajustant explicitement le temps d'attente à l'aide de l'option -w. Enfin, vous avez exploré les options -l et -p pour spécifier des identifiants uniques directement sur la ligne de commande, ce qui est utile pour des tests ciblés rapides.

Ce laboratoire vous a fourni une expérience pratique dans la configuration d'Hydra pour diverses conditions réseau, améliorant ainsi votre capacité à effectuer des attaques par force brute efficaces.