Ajuster finement les délais d'attente des réponses d'Hydra

HydraHydraBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), nous allons explorer comment ajuster finement les délais d'attente des réponses d'Hydra lors de l'attaque de services dont les réponses peuvent être lentes ou peu fiables. Nous prendrons le protocole SMTP comme exemple.

Ce laboratoire consiste à configurer un simple serveur SMTP avec une réponse retardée en utilisant Python. Ensuite, nous exécuterons Hydra contre ce serveur avec le paramètre de délai d'attente par défaut, puis nous ajusterons le délai d'attente en utilisant l'option -w. Enfin, nous testerons l'option -c avec un seul thread pour observer son impact sur le processus d'attaque.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/target_service("Target Service Selection") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/timeout_setting("Timeout Adjustment") hydra/HydraGroup -.-> hydra/error_handling("Error Message Handling") hydra/HydraGroup -.-> hydra/troubleshooting("Basic Troubleshooting") subgraph Lab Skills hydra/single_username -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/single_password -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/target_ip -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/target_service -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/verbose_mode -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/timeout_setting -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/error_handling -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} hydra/troubleshooting -.-> lab-550768{{"Ajuster finement les délais d'attente des réponses d'Hydra"}} end

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

Dans cette étape, nous allons configurer un simple serveur SMTP avec une réponse retardée en utilisant Python. Cela nous permettra de simuler un serveur SMTP lent ou peu fiable, ce qui est utile pour tester la capacité d'Hydra à gérer de tels scénarios.

Tout d'abord, créons un script Python nommé delayed_smtp.py dans le répertoire ~/project. Ce script écoutera les connexions SMTP et introduira un délai avant de répondre.

nano ~/project/delayed_smtp.py

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

import smtpd
import asyncore
import time
import sys

class DelayedSMTPServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        print('Receiving message from:', peer)
        print('From:', mailfrom)
        print('To:', rcpttos)
        print('Message length:', len(data))
        print('Waiting for 5 seconds...')
        sys.stdout.flush()
        time.sleep(5)  ## Simulate a delay
        print('Done waiting!')
        sys.stdout.flush()
        return '250 Message accepted for delivery'

def run():
    port = 1025
    server = DelayedSMTPServer(('0.0.0.0', port), None)
    print(f"Starting SMTP server on port {port}")
    sys.stdout.flush()
    asyncore.loop()

if __name__ == '__main__':
    run()

Ce script définit un serveur SMTP personnalisé qui introduit un délai de 5 secondes avant d'acquitter la réception d'un e-mail. Il écoute sur le port 1025.

Enregistrez le fichier et quittez nano.

Maintenant, exécutons le script en arrière-plan. Nous utiliserons la commande nohup pour nous assurer que le script continue de s'exécuter même après avoir fermé le terminal. Nous redirigerons également la sortie vers un fichier nommé delayed_smtp.log afin de pouvoir surveiller son activité.

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

Cette commande lance le script delayed_smtp.py en arrière-plan. Vous pouvez vérifier le fichier delayed_smtp.log pour voir la sortie du serveur.

Pour vérifier que le serveur est en cours d'exécution, vous pouvez utiliser netstat ou ss pour vérifier si le port 1025 est en écoute.

netstat -tulnp | grep 1025

Vous devriez voir une sortie similaire à celle-ci :

tcp        0      0 0.0.0.0:1025            0.0.0.0:*               LISTEN      <PID>/python3

Cela confirme que le serveur SMTP est en cours d'exécution et écoute sur le port 1025. Notez que <PID> sera remplacé par l'identifiant de processus réel du script Python.

Maintenant que nous avons un serveur SMTP avec réponse retardée en cours d'exécution, nous pouvons l'utiliser pour tester les performances d'Hydra dans des conditions réseau défavorables.

Exécution avec le paramètre -w par défaut

Dans cette étape, nous allons exécuter Hydra contre le serveur SMTP avec réponse retardée que nous avons configuré à l'étape précédente, en utilisant le paramètre -w par défaut. L'option -w dans Hydra spécifie la valeur du délai d'attente (timeout), qui est le temps maximum que Hydra attendra une réponse du service cible avant de considérer la tentative comme un échec. La valeur par défaut de -w est de 10 secondes.

Tout d'abord, nous avons besoin d'une liste d'utilisateurs et de mots de passe. Créons une simple liste d'utilisateurs nommée users.txt et une liste de mots de passe nommée passwords.txt dans le répertoire ~/project.

nano ~/project/users.txt

Ajoutez les utilisateurs suivants au fichier users.txt :

testuser
admin
user

Enregistrez le fichier et quittez nano.

Ensuite, créez la liste de mots de passe :

nano ~/project/passwords.txt

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

password
123456
test

Enregistrez le fichier et quittez nano.

Maintenant, nous allons exécuter Hydra contre le serveur SMTP en utilisant le paramètre -w par défaut. Nous ciblerons le serveur SMTP en cours d'exécution sur localhost (127.0.0.1) au port 1025. Nous utiliserons le module smtp, la liste d'utilisateurs users.txt et la liste de mots de passe passwords.txt.

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

Décortiquons cette commande :

  • hydra : La commande Hydra.
  • -L ~/project/users.txt : Spécifie le fichier de la liste d'utilisateurs.
  • -P ~/project/passwords.txt : Spécifie le fichier de la liste de mots de passe.
  • -vV : Active le mode verbeux, affichant à la fois les tentatives de connexion valides et invalides.
  • -t 1 : Définit le nombre de threads à 1. Nous utilisons un seul thread pour cette étape afin de garder la sortie claire.
  • 127.0.0.1 : L'adresse IP cible (localhost).
  • smtp : Le module de service à utiliser (SMTP).
  • -s 1025 : Spécifie le numéro de port (1025).

Étant donné que notre serveur SMTP a un délai de 5 secondes et que le paramètre -w par défaut est de 10 secondes, Hydra devrait être en mesure de tester avec succès les identifiants. Vous devriez voir Hydra tenter de se connecter avec chaque combinaison d'utilisateur et de mot de passe. L'option -vV affichera à la fois les tentatives réussies et les tentatives échouées.

La sortie montrera Hydra essayant différentes combinaisons d'utilisateur/mot de passe. Étant donné que nous utilisons un seul thread (-t 1), les tentatives seront séquentielles.

Définir le délai d'attente à 10 secondes avec -w

Dans cette étape, nous allons définir explicitement le délai d'attente à 10 secondes en utilisant l'option -w et exécuter Hydra contre notre serveur SMTP avec réponse retardée. Cela correspond à la valeur par défaut, mais nous la définissons explicitement pour montrer comment utiliser cette option.

Nous utiliserons les mêmes listes d'utilisateurs et de mots de passe (users.txt et passwords.txt) que nous avons créées à l'étape précédente.

Maintenant, exécutons à nouveau Hydra, en spécifiant cette fois l'option -w 10 :

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

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

  • hydra : La commande Hydra.
  • -L ~/project/users.txt : Spécifie le fichier de la liste d'utilisateurs.
  • -P ~/project/passwords.txt : Spécifie le fichier de la liste de mots de passe.
  • -vV : Active le mode verbeux, affichant à la fois les tentatives de connexion valides et invalides.
  • -t 1 : Définit le nombre de threads à 1.
  • -w 10 : Spécifie le délai d'attente à 10 secondes.
  • 127.0.0.1 : L'adresse IP cible (localhost).
  • smtp : Le module de service à utiliser (SMTP).
  • -s 1025 : Spécifie le numéro de port (1025).

Étant donné que le délai d'attente est défini à 10 secondes et que notre serveur SMTP a un délai de 5 secondes, Hydra devrait tester avec succès les identifiants. La sortie sera similaire à celle de l'étape précédente, montrant Hydra tenter de se connecter avec chaque combinaison d'utilisateur et de mot de passe.

Tester l'option -c avec un seul thread

Dans cette étape, nous allons utiliser l'option -c pour spécifier directement sur la ligne de commande une combinaison unique d'utilisateur et de mot de passe, au lieu d'utiliser des fichiers. Nous maintiendrons également le nombre de threads à 1 (-t 1) pour plus de clarté. Cela est utile pour tester rapidement des identifiants spécifiques.

Nous continuerons à utiliser le serveur SMTP avec réponse retardée que nous avons configuré à la première étape.

Maintenant, exécutons Hydra avec l'option -c :

hydra -t 1 -c testuser:password -vV 127.0.0.1 smtp -s 1025

Décortiquons cette commande :

  • hydra : La commande Hydra.
  • -t 1 : Définit le nombre de threads à 1.
  • -c testuser:password : Spécifie directement sur la ligne de commande l'utilisateur testuser et le mot de passe password.
  • -vV : Active le mode verbeux, affichant à la fois les tentatives de connexion valides et invalides.
  • 127.0.0.1 : L'adresse IP cible (localhost).
  • smtp : Le module de service à utiliser (SMTP).
  • -s 1025 : Spécifie le numéro de port (1025).

Dans ce cas, Hydra tentera seulement de se connecter avec l'utilisateur testuser et le mot de passe password. Si cette combinaison est valide, Hydra signalera une connexion réussie. Sinon, il signalera un échec.

La sortie montrera Hydra essayant la combinaison testuser:password.

Résumé

Dans ce laboratoire (lab), nous commençons par configurer un serveur SMTP lent simulé en utilisant un script Python nommé delayed_smtp.py. Ce script introduit un délai de 5 secondes avant d'acquitter la réception d'un e-mail, imitant ainsi un serveur peu fiable. Le script écoute les connexions sur le port 1025 et enregistre son activité dans le fichier delayed_smtp.log.

Le script delayed_smtp.py est ensuite exécuté en arrière-plan à l'aide de nohup, garantissant qu'il continue de fonctionner même après la fermeture du terminal. Cette configuration nous permet de tester la capacité d'Hydra à gérer les réponses retardées d'un serveur SMTP.