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

WEB-наводнение

Александр Любимов aka Sashiks

Хакер, номер #081, стр. 081-070-4


$opera=LWP::UserAgent->new();

$req=new HTTP::Request(POST=>"http://www.linuxsucks.org/login.html?xlogin=$user&xpassword=$pass");

$response=$opera->request($req);Я подразумеваю, что юзер зареган, и логин с пассом валидны. После этого нам должны выдаться куки. Но как их сохранить для дальнейшего использования? Для этого нам нужно подключить модуль use HTT::Cookies. Вот основные методы для объектов:

$cookie_jar=HTTP::Cookies->new(); #мы создаем псевдо БД, где будут храниться печенья. Кода сессия заканчиваеться, БД опустошаеться.

$cookie_jar->extract_cookies($response); #Из полученного браузером ответа (см.выше) мы извлекаем кукис и кладем его в нашу БД

$cookie_jar->add_cookie_header($request); #Присоединяем наш файл cookie к запросу $request (об этом далее).

То есть после авторизации приходит ответ сервера, в котором мы получаем Cookies. Эту куку бережно сохраняем в $cookie_jar, ведь она нам позже пригодится (к слову, нам ее нужно цеплять к каждому запросу). А сейчас нам надо получить hrml-код страницы с формой для ответа. Допустим, если ты хочешь наводнить топик с ID 1500, то это будет выглядеть примерно так:

$req=new HTTP::Request(GET=>"http://www.linuxsucks.org/addReply.html?postid=1500");

$cookie_jar->add_cookie_header($req);# вот здесь мы прикрепляем кукис, который получили при авторизации

$response=$opera->request($req);

$resp_cont=$response->content;

Сейчас в переменной $resp_cont должна храниться вся страница с формой для реплая. Мы получили ее, чтобы найти скрытые параметры такие, как token и topictitle. Если же мы не узнаем их значение, то не сможем запостить ответ. Пропарсив страницу, мы получили необходимые данные, и теперь готовы отправить запрос с нашим ответом:

$flood_post=new HTTP::Request(POST=>"$f_url?xtitle=$title&postid=$top_id&topictitle=$topic&xmsg=$msg&Post=Post&token=$token&mode=Submit");#формируем запрос с ответом

$cookie_jar->add_cookie_header($flood_post);#опять цепляем куки

$opera->request($flood_post);#выполняем запрос

Если ты внимательно читаешь статью, у тебя должен возникнуть вопрос, что такое $title $msg и где они определяются. Все предельно просто - это название твоего ответа и его текст. Они находятся на нашем флудере, и чтобы изменить их, воспользуйся любым текстовым редактором. Вот основной текст программы без функций:

auth($auth_url); #функция авторизации

for($n=0;$n<$hmt;$n++){#$hmt - количество постов, которые мы хотим отправить ( по умолчанию 50 )

flood($rep_url); #функция для постинга наших флудерских "ответов"

sleep($def_time);

}

Ты, наверное, заметил, что в конце цикла есть запись sleep($def_time). Сейчас я все объясню. Помнишь я говорил, что скрипт ругнулся, что нужно подождать 1 минуту, когда я попытался оставить два поста подряд? То есть между постами должна быть пауза, определенная в переменной $def_time . И хоть она по умолчанию равна 60 сек, можешь проиграть с этим значением, потому что скрипт нагло врал относительно 1 минуты - на самом деле достаточно 15-20 секунд (а может и того меньше).

Назад на стр. 081-070-3  Содержание  Вперед на стр. 081-070-5