Enregistrement des résultats d'attaque Hydra

HydraBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à enregistrer les résultats d'une attaque Hydra. Hydra, un outil puissant de cassage de mot de passe, sera utilisé pour tester la sécurité d'un formulaire de connexion HTTP simulé. Vous commencerez par exécuter une attaque HTTP de base contre un serveur web cible, en utilisant des listes de noms d'utilisateur et de mots de passe.

Ce laboratoire vous guidera ensuite à travers l'enregistrement des résultats de l'attaque en utilisant l'option -o et en les affichant au format JSON avec l'option -b. Enfin, vous comparerez les sorties texte et JSON pour comprendre les différentes manières dont Hydra peut présenter ses résultats.

Configuration du service cible et des listes d'utilisateurs/mots de passe

Dans cette étape, vous allez configurer un service de connexion HTTP simulé et créer les listes nécessaires des noms d'utilisateur et mots de passe pour Hydra. Cela fournira un environnement contrôlé pour pratiquer l'enregistrement des sorties d'Hydra.

Tout d'abord, accédez à votre répertoire de projet :

cd ~/project

Ensuite, vous allez créer un script Python simple qui simule un service de connexion HTTP. Ce script écoutera sur le port 80 et répondra aux requêtes POST vers /login.php. Il considérera admin comme le nom d'utilisateur correct et password comme le mot de passe correct.

Créez le fichier login.py à l'aide de nano :

nano login.py

Collez le code Python suivant dans l'éditeur nano :

from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
import os

class LoginHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        if self.path == '/login.php':
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length).decode('utf-8')
            parsed_data = urllib.parse.parse_qs(post_data)

            username = parsed_data.get('username', [''])[0]
            password = parsed_data.get('password', [''])[0]

            if username == 'admin' and password == 'password':
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(b"Login successful!")
            else:
                self.send_response(401)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(b"Nom d'utilisateur ou mot de passe invalide")
        else:
            self.send_response(404)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b"Non trouvé")

def run(server_class=HTTPServer, handler_class=LoginHandler, port=80):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f"Démarrage du serveur httpd sur le port {port}")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, puis Entrée.

Maintenant, exécutez le serveur HTTP Python en arrière-plan. Cela simulera le service cible pour Hydra.

nohup python3 login.py > /dev/null 2>&1 &

La commande nohup permet au processus de continuer à s'exécuter même après la fermeture du terminal, et > /dev/null 2>&1 & redirige toutes les sorties vers /dev/null et exécute le processus en arrière-plan.

Ensuite, vous allez créer les listes de noms d'utilisateur et de mots de passe que Hydra utilisera pour son attaque.

Créez un fichier nommé users.txt dans le répertoire ~/project :

nano users.txt

Ajoutez les noms d'utilisateur suivants au fichier :

admin
user
test

Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, puis Entrée.

Enfin, créez un fichier nommé passwords.txt dans le répertoire ~/project :

nano passwords.txt

Ajoutez les mots de passe suivants au fichier :

password
123456
test

Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, puis Entrée.

Vous avez maintenant correctement configuré le service HTTP cible et préparé les listes de noms d'utilisateur et de mots de passe.

Exécuter une attaque HTTP de base

Dans cette étape, vous allez effectuer une attaque HTTP de base à l'aide d'Hydra contre le service de connexion simulé que vous avez configuré. Cela permettra de démontrer comment Hydra tente de déchiffrer les identifiants sans enregistrer la sortie dans un fichier.

Hydra est un outil puissant pour le cassage de mots de passe et peut être utilisé pour tester la sécurité de divers services, y compris HTTP. Dans ce scénario, vous ciblerez un simple formulaire de connexion HTTP.

Vous utiliserez le module http-post-form d'Hydra, conçu pour attaquer les formulaires Web qui utilisent la méthode HTTP POST pour la soumission. Le service cible est exécuté sur 127.0.0.1 sur le port 80, et le formulaire de connexion se trouve à l'adresse /login.php.

Exécutez la commande Hydra suivante dans votre terminal :

hydra -L ~/project/users.txt -P ~/project/passwords.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

Décomposons cette commande :

  • hydra : La commande pour invoquer l'outil Hydra.
  • -L ~/project/users.txt : Spécifie le chemin du fichier de liste des noms d'utilisateur. Hydra itérera sur chaque nom d'utilisateur de ce fichier.
  • -P ~/project/passwords.txt : Spécifie le chemin du fichier de liste des mots de passe. Hydra essaiera chaque mot de passe de ce fichier pour chaque nom d'utilisateur.
  • 127.0.0.1 : L'adresse IP cible du serveur HTTP simulé.
  • http-post-form : Il s'agit du module utilisé par Hydra pour attaquer les formulaires HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:Invalid username or password" : Cette partie cruciale définit la manière dont Hydra interagit avec le formulaire :
    • /login.php : Le chemin de la page de connexion sur le serveur cible.
    • username=^USER^&password=^PASS^ : Définit les paramètres envoyés dans la requête POST. ^USER^ et ^PASS^ sont des espaces réservés que Hydra remplace par les valeurs des listes de noms d'utilisateur et de mots de passe.
    • Invalid username or password : Il s'agit du message d'erreur que Hydra recherche dans la réponse du serveur pour déterminer si une tentative de connexion a échoué. Si cette chaîne n'est pas trouvée, Hydra considère la tentative de connexion comme réussie.

Après l'exécution de la commande, Hydra affichera sa progression et toute tentative de connexion réussie directement dans votre terminal.

Exemple de sortie (si réussite) :

Hydra vX.X (c) XXXX by van Hauser/THC - Utilisez librement, mais uniquement à des fins légales.

Hydra démarre...

[DATA] X tâche, X serveurs, X tentatives de connexion (l :X/p :X), ~X tentative par serveur
[DATA] attaque du service http-post-form sur le port 80
[ATTACK] attaque de 127.0.0.1:80/login.php
[80][http-post-form] hôte : 127.0.0.1   connexion : admin   mot de passe : password

Cette sortie indique qu'Hydra a trouvé avec succès la combinaison de nom d'utilisateur admin et de mot de passe password. Si aucune connexion réussie n'est trouvée, Hydra s'achèvera sans afficher d'informations d'identification de connexion réussies.

Enregistrer les résultats avec l'option -o

Dans cette étape, vous apprendrez à enregistrer les résultats d'une attaque Hydra dans un fichier à l'aide de l'option -o. Ceci est utile pour analyser les résultats ultérieurement ou à des fins de rapport, car il stocke les identifiants déchiffrés dans un fichier persistant.

L'option -o vous permet de spécifier un fichier de sortie où Hydra stockera les identifiants déchiffrés. Si Hydra trouve une combinaison de nom d'utilisateur et de mot de passe valide, elle sera écrite dans le fichier spécifié dans un format simple et lisible par l'homme.

Vous continuerez avec le même scénario : le serveur Web simulé exécuté sur 127.0.0.1 sur le port 80 avec un formulaire de connexion à l'adresse /login.php, et les fichiers users.txt et passwords.txt que vous avez créés précédemment.

Pour enregistrer les résultats dans un fichier nommé hydra.log dans le répertoire ~/project, exécutez la commande suivante :

hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.log 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

La seule différence par rapport à la commande précédente est l'ajout de l'option -o ~/project/hydra.log. Cela indique à Hydra d'enregistrer les résultats dans le fichier hydra.log au lieu de les afficher uniquement dans le terminal.

Après l'exécution de la commande, Hydra tentera de se connecter en utilisant chaque combinaison de nom d'utilisateur et de mot de passe. Si une connexion réussie est trouvée, le nom d'utilisateur et le mot de passe seront écrits dans le fichier hydra.log.

Pour afficher le contenu du fichier hydra.log, utilisez la commande cat :

cat ~/project/hydra.log

Exemple de sortie (si réussite) :

Si Hydra trouve la combinaison admin:password, le fichier hydra.log contiendra une ligne similaire à ceci :

127.0.0.1 http-post-form: admin:password

Si aucune connexion réussie n'est trouvée, le fichier hydra.log sera vide.

Il est important de noter que l'option -o écrasera le fichier de sortie s'il existe déjà. Si vous souhaitez ajouter les résultats à un fichier existant, vous utiliserez l'option -O (O majuscule) à la place. Cependant, pour ce laboratoire, l'option -o est suffisante.

Sortie au format JSON avec l'option -b

Dans cette étape, vous explorerez comment afficher les résultats d'une attaque Hydra au format JSON à l'aide de l'option -b. JSON (JavaScript Object Notation) est un format d'échange de données léger, facile à lire et à écrire pour les humains, et facile à analyser et à générer pour les machines. Ce format est particulièrement utile lorsque vous devez traiter les résultats de manière programmatique, par exemple, lors de l'intégration de la sortie d'Hydra dans d'autres outils ou scripts.

L'option -b, lorsqu'elle est combinée avec l'option -o, indique à Hydra d'enregistrer la sortie au format spécifié dans le fichier. L'option -b nécessite un paramètre de format : text (par défaut), json ou jsonv1.

Vous continuerez avec le même scénario : le serveur Web simulé exécuté sur 127.0.0.1 sur le port 80 avec un formulaire de connexion à l'adresse /login.php, et les fichiers users.txt et passwords.txt.

Pour enregistrer les résultats au format JSON dans un fichier nommé hydra.json dans le répertoire ~/project, exécutez la commande suivante :

hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.json -b json 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"

Dans cette commande, vous avez ajouté l'option -b json ainsi que l'option -o ~/project/hydra.json. Cela indique à Hydra d'enregistrer la sortie au format JSON dans le fichier hydra.json.

Après l'exécution de la commande, Hydra tentera de se connecter en utilisant chaque combinaison de nom d'utilisateur et de mot de passe. Si une connexion réussie est trouvée, le nom d'utilisateur et le mot de passe seront écrits dans le fichier hydra.json au format JSON.

Pour afficher le contenu du fichier hydra.json, utilisez la commande cat :

cat ~/project/hydra.json

Exemple de sortie (si réussite) :

Si Hydra trouve la combinaison admin:password, le fichier hydra.json contiendra un objet JSON similaire à ceci :

{
  "generator": {
    "software": "Hydra",
    "version": "v9.2",
    "built": "2025-05-30 08:10:07",
    "server": "127.0.0.1",
    "service": "http-post-form",
    "jsonoutputversion": "1.00",
    "commandline": "hydra -L users.txt -P passwords.txt -o hydra.json -b json 127.0.0.1 http-post-form /login.php:username=^USER^&password=^PASS^:Invalid username or password"
  },
  "results": [
    {
      "port": 80,
      "service": "http-post-form",
      "host": "127.0.0.1",
      "login": "admin",
      "password": "password"
    }
  ],
  "success": true,
  "errormessages": [],
  "quantityfound": 1
}

Si aucune connexion réussie n'est trouvée, le fichier hydra.json contiendra un tableau JSON vide :

[]

Ce format JSON vous permet d'analyser facilement les résultats à l'aide de langages de script comme Python ou JavaScript pour une analyse ou une automatisation plus poussées.

Résumé

Dans ce laboratoire, vous avez appris à effectuer une attaque HTTP de base à l'aide d'Hydra, un puissant outil de cassage de mots de passe. Vous avez configuré un service de connexion HTTP simulé et créé des listes de noms d'utilisateur et de mots de passe. Vous avez ensuite utilisé Hydra pour tenter de cracker le formulaire de connexion HTTP simulé sur 127.0.0.1.

Vous avez exploré comment enregistrer la sortie d'Hydra dans un fichier à l'aide de l'option -o, créant un fichier hydra.log lisible par l'homme. De plus, vous avez appris à afficher les résultats au format JSON à l'aide de l'option -b, générant un fichier hydra.json lisible par machine. Ce laboratoire a démontré la flexibilité d'Hydra pour présenter ses résultats, permettant à la fois une revue rapide et un traitement programmatique des résultats d'attaque.