Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Attacco brute force di un form con Hydra

Scopriamo come usare il programma Hydra per effettuare un attacco forza bruta di un web form di autenticazione.
Scopriamo come usare il programma Hydra per effettuare un attacco forza bruta di un web form di autenticazione.
Link copiato negli appunti

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.

Ti consigliamo anche