Tenter une attaque sur un faux service
Dans cette étape, nous allons simuler une attaque sur un faux service en utilisant Hydra. Cela vous aidera à comprendre le fonctionnement de Hydra et à l'utiliser pour craquer des mots de passe. Nous commencerons par un scénario simple pour vous familiariser avec l'outil.
Tout d'abord, créons un simple "service" qui nécessite un nom d'utilisateur et un mot de passe. Nous utiliserons un simple script Python à cette fin.
Accédez à votre répertoire de projet :
cd ~/project
Créez un fichier nommé fake_service.py
:
nano fake_service.py
Collez le code Python suivant dans le fichier fake_service.py
:
#!/usr/bin/env python3
import socket
import sys
HOST = '127.0.0.1' ## Standard loopback interface address (localhost)
PORT = 65432 ## Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
username = conn.recv(1024).decode().strip()
password = conn.recv(1024).decode().strip()
if username == 'testuser' and password == 'password123':
conn.sendall(b"Login successful!")
else:
conn.sendall(b"Login failed.")
Enregistrez le fichier et quittez l'éditeur. Rendez le script exécutable :
chmod +x fake_service.py
Maintenant, exécutez le faux service en arrière-plan :
./fake_service.py &
Cela lance le script Python, qui écoute les connexions sur le port 65432. Le symbole &
met le processus en arrière-plan.
Ensuite, créons une liste de noms d'utilisateurs et de mots de passe pour Hydra. Créez un fichier nommé users.txt
:
nano users.txt
Ajoutez le nom d'utilisateur suivant au fichier :
testuser
Enregistrez le fichier et quittez l'éditeur.
Créez un fichier nommé passwords.txt
:
nano passwords.txt
Ajoutez les mots de passe suivants au fichier :
password
password123
wrongpassword
Enregistrez le fichier et quittez l'éditeur.
Maintenant, utilisons Hydra pour attaquer notre faux service. Nous utiliserons le module generic
car nous avons créé un service personnalisé.
hydra -l testuser -P passwords.txt 127.0.0.1 generic "USER <USER> PASS <PASS> RET Login successful!" -s 65432 -vV
Décortiquons cette commande :
hydra
: La commande Hydra.
-l testuser
: Spécifie le nom d'utilisateur à utiliser. Nous utilisons un seul nom d'utilisateur dans cet exemple.
-P passwords.txt
: Spécifie le fichier de liste de mots de passe.
127.0.0.1
: L'adresse IP cible (localhost dans ce cas).
generic
: Spécifie le module générique, qui nous permet de définir le protocole.
"USER <USER> PASS <PASS> RET Login successful!"
: C'est la définition du protocole. <USER>
et <PASS>
sont des espaces réservés que Hydra remplace par le nom d'utilisateur et le mot de passe de la liste. RET Login successful!
indique à Hydra de rechercher "Login successful!" dans la réponse pour déterminer une connexion réussie.
-s 65432
: Spécifie le numéro de port.
-vV
: Mode verbeux, qui affiche les tentatives en temps réel.
Vous devriez voir Hydra tester différents mots de passe. Après quelques secondes, il devrait trouver le bon mot de passe :
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!
Hydra starting at 2024-10-27 14:30:00
[DATA] 1 task/1 service (1 connection per task, 1 thread per task)
[DATA] attacking service 127.0.0.1 on port 65432
[DATA] testing user: 'testuser' password: 'password'
[DATA] testing user: 'testuser' password: 'password123'
[65432] [generic] host: 127.0.0.1 login: testuser password: password123
Hydra is finishing at 2024-10-27 14:30:02 after 00:00:02
1 task completed, 1 valid password found
Cette sortie montre que Hydra a trouvé avec succès le mot de passe password123
pour l'utilisateur testuser
.
Enfin, arrêtons le faux service. Tout d'abord, trouvez son identifiant de processus :
ps aux | grep fake_service.py
Vous verrez une ligne similaire à celle-ci :
labex 1234 0.1 0.2 12345 6789 pts/0 Sl 14:29 0:00 ./fake_service.py
Le deuxième nombre (1234 dans cet exemple) est l'identifiant de processus (PID). Remplacez 1234
par le PID réel de votre sortie.
Maintenant, tuez le processus :
kill 1234
Cela arrête le faux service.