Attaquer des services activés en SSL avec 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 attaquer des services activés pour SSL à l'aide de Hydra. Le laboratoire se concentre sur le test des capacités de Hydra à craquer les mots de passe sur des services sécurisés avec SSL/TLS.

Tout d'abord, nous allons configurer un serveur HTTPS local en utilisant Python et openssl pour générer un certificat auto-signé et une clé, simulant ainsi un environnement sécurisé. Ensuite, nous allons exécuter Hydra avec l'option -S pour activer le support SSL et tenter de craquer le mot de passe. Nous testerons également les protocoles SSL plus anciens en utilisant l'option -O. Enfin, nous confirmerons le succès de l'attaque SSL.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/installation("Installation and Setup") 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/success_detection("Login Success Detection") subgraph Lab Skills hydra/installation -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/single_username -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/single_password -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/target_ip -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/target_service -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/verbose_mode -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} hydra/success_detection -.-> lab-550762{{"Attaquer des services activés en SSL avec Hydra"}} end

Configurer un serveur HTTPS local

Dans cette étape, nous allons configurer un simple serveur HTTPS en utilisant le module intégré http.server de Python avec SSL/TLS activé. Cela nous permettra de simuler un environnement de serveur sécurisé pour tester les capacités SSL de Hydra.

Tout d'abord, nous devons générer un certificat auto-signé et une clé. Ce certificat sera utilisé pour chiffrer la communication entre le client (Hydra) et le serveur. Ouvrez votre terminal et accédez au répertoire ~/project :

cd ~/project

Maintenant, utilisez la commande openssl pour générer le certificat et la clé :

openssl req -new -x509 -keyout key.pem -out cert.pem -days 365 -nodes

Vous serez invité à entrer certaines informations sur le certificat. Vous pouvez laisser la plupart des champs vides en appuyant sur Entrée. Un nom commun (Common Name) est requis, vous pouvez entrer localhost.

Generating a RSA private key
+++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:

Cette commande crée deux fichiers : key.pem (la clé privée) et cert.pem (le certificat).

Maintenant, créons un script Python pour notre serveur HTTPS. Nous utiliserons l'éditeur de texte nano pour créer et éditer le script :

nano https_server.py

Copiez et collez le code suivant dans l'éditeur :

import http.server
import ssl
import os

## Create the HTTP server
httpd = http.server.HTTPServer(('127.0.0.1', 443), http.server.SimpleHTTPRequestHandler)

## Create SSL context
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')

## Wrap the socket with SSL
httpd.socket = ssl_context.wrap_socket(httpd.socket, server_side=True)

print("Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...")
httpd.serve_forever()

Pour enregistrer le fichier dans nano :

  1. Appuyez sur Ctrl + X pour quitter
  2. Appuyez sur Y pour confirmer l'enregistrement
  3. Appuyez sur Enter pour confirmer le nom de fichier

Maintenant, vous pouvez exécuter le serveur HTTPS en utilisant :

python3 https_server.py

Vous devriez voir une sortie similaire à :

Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...

Laissez cette fenêtre de terminal ouverte. C'est votre serveur HTTPS. Dans les étapes suivantes, nous utiliserons Hydra pour tenter de craquer l'authentification.

IMPORTANT : N'oubliez pas de laisser la fenêtre de terminal originale avec le serveur HTTPS en cours d'exécution. Ne la fermez pas, car nous en aurons besoin pour les étapes suivantes.

Exécuter Hydra avec l'option -S pour SSL

Dans cette étape, nous allons utiliser Hydra pour effectuer une attaque de force brute contre le serveur HTTPS que nous avons configuré à l'étape précédente. L'option -S indique à Hydra d'utiliser SSL/TLS lors de la connexion au serveur cible.

Tout d'abord, créons une simple liste d'utilisateurs et de mots de passe. Créez un fichier nommé users.txt dans le répertoire ~/project avec le contenu suivant :

test

Ensuite, créez un fichier nommé passwords.txt dans le répertoire ~/project avec le contenu suivant :

password
test
123456

Vous pouvez utiliser echo pour créer et éditer ces fichiers :

echo "test" > ~/project/users.txt
echo "password" > ~/project/passwords.txt
echo "test" >> ~/project/users.txt
echo "123456" >> ~/project/passwords.txt

Maintenant, nous pouvons exécuter Hydra avec l'option -S pour cibler notre serveur HTTPS. Ouvrez une nouvelle fenêtre de terminal (laissez le serveur HTTPS en cours d'exécution dans l'autre fenêtre) et accédez au répertoire ~/project :

cd ~/project

Exécutez la commande Hydra suivante :

hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -vV

Décortiquons cette commande :

  • hydra : L'outil en ligne de commande Hydra.
  • -l test : Spécifie le nom d'utilisateur à utiliser. Dans ce cas, nous utilisons le nom d'utilisateur test.
  • -P passwords.txt : Spécifie le fichier de liste de mots de passe. Nous utilisons le fichier passwords.txt que nous avons créé.
  • 127.0.0.1 : L'adresse IP cible. Il s'agit de l'adresse de bouclage, qui fait référence à notre machine locale.
  • https-get / : Spécifie le service à attaquer (HTTPS) et le chemin à demander (/). https-get est un module qui effectue des requêtes HTTP GET via SSL/TLS.
  • -S : Indique à Hydra d'utiliser SSL/TLS lors de la connexion au serveur cible. Cela est crucial pour attaquer les services HTTPS.
  • -vV : Active le mode verbeux, qui affiche les tentatives de connexion et les identifiants trouvés.

Hydra va maintenant tenter de forcer la connexion au serveur HTTPS en utilisant la liste d'utilisateurs et de mots de passe fournie. Il essaiera chaque mot de passe du fichier passwords.txt avec le nom d'utilisateur test.

Vous devriez voir une sortie similaire à la suivante (la sortie exacte peut varier) :

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:10:55
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1   login: test   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1   login: test   password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:10:56
hydra ssl attack

Si l'attaque est réussie, Hydra affichera le nom d'utilisateur et le mot de passe corrects. Dans cet exemple, le nom d'utilisateur est test et le mot de passe est password.

Tester les anciennes versions SSL avec l'option -O

Dans cette étape, nous allons explorer comment utiliser l'option -O de Hydra pour tester les anciennes versions de protocoles SSL/TLS potentiellement vulnérables. L'option -O force Hydra à utiliser les anciennes versions de SSL, qui peuvent être sensibles à diverses attaques telles que POODLE ou BEAST.

Avant de continuer, il est important de comprendre que l'utilisation des anciens protocoles SSL/TLS est généralement déconseillée en raison des vulnérabilités de sécurité. Cette étape a un but éducatif pour démontrer comment Hydra peut être utilisé pour identifier les systèmes qui prennent toujours en charge ces protocoles obsolètes.

Pour utiliser l'option -O, nous l'ajoutons simplement à notre commande Hydra précédente. Assurez-vous que le serveur HTTPS de l'Étape 1 est toujours en cours d'exécution. Ouvrez une nouvelle fenêtre de terminal (laissez le serveur HTTPS en cours d'exécution dans l'autre fenêtre) et accédez au répertoire ~/project :

cd ~/project

Maintenant, exécutez la commande Hydra suivante :

hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -O -vV

La seule différence entre cette commande et celle de l'Étape 2 est l'ajout de l'option -O.

  • -O : Force Hydra à utiliser les anciennes versions de SSL.

Hydra va maintenant tenter de forcer la connexion au serveur HTTPS en utilisant les anciens protocoles SSL/TLS. La sortie sera similaire à celle de l'étape précédente, mais vous pourriez voir des avertissements ou des erreurs liés aux anciennes versions de SSL.

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-04-02 14:13:19
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1   login: test   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1   login: test   password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:13:19

Si l'attaque est réussie, Hydra affichera le nom d'utilisateur et le mot de passe corrects, tout comme dans l'étape précédente. Le point clé ici est que l'option -O nous a permis de tester la compatibilité du serveur avec les anciens protocoles SSL/TLS.

Il est possible que le serveur refuse la connexion s'il ne prend pas en charge les anciens protocoles. Dans ce cas, Hydra peut ne pas trouver le mot de passe. Cependant, le but de cette étape est de démontrer l'utilisation de l'option -O, et non nécessairement de garantir une connexion réussie.

Confirmer le succès de l'attaque SSL

Dans cette étape, nous allons confirmer le succès de notre attaque Hydra en tentant d'accéder au serveur HTTPS en utilisant les identifiants que nous avons découverts. Cela démontrera que Hydra a effectivement réussi à forcer l'accès au serveur.

Tout d'abord, assurez-vous que le serveur HTTPS de l'Étape 1 est toujours en cours d'exécution.

Nous allons utiliser la commande curl pour accéder au serveur et vérifier que nous pouvons nous authentifier avec le bon nom d'utilisateur et le bon mot de passe.

Ouvrez une nouvelle fenêtre de terminal (laissez le serveur HTTPS en cours d'exécution dans l'autre fenêtre) et accédez au répertoire ~/project :

cd ~/project

Maintenant, exécutez la commande curl suivante :

curl -k -u test:password https://127.0.0.1

Décortiquons cette commande :

  • curl : L'outil en ligne de commande pour transférer des données via des URLs.
  • -k : Permet à curl de poursuivre et de fonctionner même pour les connexions à des serveurs considérés autrement comme non sécurisés. Étant donné que nous utilisons un certificat auto-signé, curl refusera normalement de se connecter.
  • -u test:password : Spécifie le nom d'utilisateur et le mot de passe à utiliser pour l'authentification. Nous utilisons les identifiants test:password que nous avons découverts dans les étapes précédentes.
  • https://127.0.0.1 : L'URL du serveur HTTPS.

Si l'authentification réussit, curl affichera le contenu du répertoire racine du serveur. Étant donné que nous utilisons le module http.server de Python, il affichera probablement une liste des fichiers du répertoire ~/project.

Vous devriez voir une sortie similaire à la suivante (la sortie exacte peut varier en fonction des fichiers dans votre répertoire ~/project) :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Directory listing for /</title>
  </head>
  <body>
    <h1>Directory listing for /</h1>
    <hr />
    <ul>
      <li><a href="cert.pem">cert.pem</a></li>
      <li><a href="https_server.py">https_server.py</a></li>
      <li><a href="key.pem">key.pem</a></li>
      <li><a href="passwords.txt">passwords.txt</a></li>
      <li><a href="server.pem">server.pem</a></li>
      <li><a href="users.txt">users.txt</a></li>
    </ul>
    <hr />
  </body>
</html>

Cela confirme que nous avons pu nous authentifier avec succès au serveur HTTPS en utilisant les identifiants découverts par Hydra. Cela démontre l'efficacité de Hydra pour forcer des mots de passe faibles, même sur des connexions SSL/TLS.

Si vous voyez un message d'erreur au lieu de la liste des fichiers, vérifiez que le serveur HTTPS est toujours en cours d'exécution et que vous utilisez le bon nom d'utilisateur et le bon mot de passe.

Résumé

Dans ce laboratoire, nous avons appris à attaquer des services activés en SSL à l'aide de Hydra. La première étape consistait à configurer un serveur HTTPS local en utilisant le module http.server de Python et à générer un certificat auto-signé et une clé avec openssl pour simuler un environnement sécurisé.

Nous avons ensuite exploré les capacités de Hydra en l'exécutant avec l'option -S pour activer les connexions SSL et l'option -O pour tester les anciens protocoles SSL. Enfin, nous avons confirmé le succès de l'attaque SSL, démontrant la capacité de Hydra à forcer des identifiants sur des connexions SSL/TLS.