![]() |
Пишем спам бот/авторассыльщик/брутфорс на Php + Curl
Писал давненько статью для web-hacka, решил запостить и тут, наверняка найдутся люди которым она в чем то поможет. Итак.
=========================== /********* Предисловие ***********/ В один прекрасный день я столкнулся с задачей сделать авторассыльщик по доскам объявлений прямо с сайта заказчика. Порыл гугль, но ничего конкретного на эту тему не нашел , решил сделать сам. Итак, для работы нам понадобится PHP как минимум четвертой версии (при младших версиях работоспособность не проверял) с прикрученной библиотекой CURL. Что это за штука и где ее найти можно прочитать здесь . Даже если вы не собираетесь делать то, что я тут описываю, настоятельно рекомендую ознакомится с этой библиотекой, она вам обязательно понравится и в будущем пригодится. Поставили курл - вызываем phpinfo() и ищем там строчку "CURL support ======== Enabled". Нашли? Тогда идем дальше. Помимо CURL'а вам понадобятся как минимум начальные знания языка PHP, минимальное представление о работе протокола http и хорошее настроение, организованное любимым треком в WinAmp'е. Прямые руки, как всегда, приветсвуются. /********* Преступим [теория]***********/ Чтобы не быть голословным, буду писать скриптег под реальный сайт - _optsib.ru. Заходим на сайт, тыкаем "Доска объявлений" => "Добавить объявление". Смотрим в адресную строку браузера и видим там какую то бяку типа этой s=20080ч221521288b93b4a822fe4e235843df043d76b774. Что то похожее на ПХП СессИд. Берем на заметку и открываем HTML код странички, плясать будем именно от него. Там находим код формы, и выписываем имена полей, обязательных для заполнения. У нас это: name, email, phone, razdel, zag, text. Их значения мы будем передавать на сервер заголовком POST (так как форма использует именно этот способ отправки). Так же мы видим в коде еще хидден поля - вот где на самом деле зарыта собака. У нас их три: ins, s, и sort. Не закрывая первого, открываем любой другой браузер переходим на ту же страничку добавления объявления и сравнивая ее ХТМЛ код с кодом первого браузера, убеждаемся что hidden поля ins и sort статичны и несут служебную информацию, а вот поле s изменило свое значение, это и есть защита от спама, оно же предупреждает нас что одним запросом на сервер нам не обойтись. /********* Преступим [кодим наконец то :D ]***********/ Итак создаем новый php-файл и начинаем кодить. Первым делом объявляем серверу что мы пришли, чтобы он выдал нам куки, по которым в последствии он будет сверять, не робот ли мы: [code] $url="http://optsib.ru/do.phtml"; $ua = 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)'; $ch=curl_init(); //инициализируем сеанс CURL // ф-ция curl_setopt устанавливает параметры для запроса curl_setopt($ch, CURLOPT_URL, $url); //указываем URL для запроса curl_setopt($ch, CURLOPT_HEADER, 1); //просим CURL возвращать нам ответ вместе с заголовками (обязательно) curl_setopt($ch, CURLOPT_USERAGENT, $ua); //утверждаем что мы браузер чтоб не спалили curl_setopt($ch, CURLOPT_TIMEOUT, 10); //без коментариев curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //говорим что ответ сервера нам нада возвращать, а не выводить прямо в браузер. $answer=curl_exec($ch); //выполняем сам запрос, ответ сервера сохраняем в $answer. [/quote] Далее выводим ответ в браузер чтобы глянуть что там у нас пришло в заголовках. Там видим что в заголовке нам выдают кукисы PHPSESSID. Выдираем их и сохраняем себе на память : Код:
$sess_cookie=substr($answer, strpos($answer, "PHPSESSID=")+10, 32);Дальше вспоминаем что у нас еще есть хидден поле s, его значение тоже достаем: Код:
$s_hidden=substr($answer, strpos($answer, 'name="s" value=')+16, 46);Код:
$post="name=$company&email=$email&phone=$contacts&razdel=$catПечатаем ответ в браузер, видим "Ваше объявление успешно добавлено" и радуемся. Думаю на первый раз достаточно, это моя первая статья, просьба сильно не пинать . Ах да, об оптимизации кода я особо не заботился, в первую очередь пытаясь написать все как можно яснее. Если на сайте стоит защитная картинка, придется вам порыскать информацию об ее распознавании, ибо это выходит за границы данной статьи. |
Здравствуйте.
Вот пробую приспособить этот способ к сайту memori.ru. Но там защита на регистрацию стоит. Никаких изменяемых полей вроде нет. PHP код:
|
В данном случае сайт не делает лишних проверок, поэтому перед авторизацией сессию ставить не нада, можно сразу слать данные. Вот рабочий вариант:
PHP код:
Код:
HTTP/1.1 302 Found Via: 1.1 RAID-PROXY Connection: Keep-Alive Proxy-Connection: Keep-Alive Content-Length: 0 Expires: Thu, 19 Nov 1981 08:52:00 GMT Date: Tue, 28 Oct 2008 10:02:41 GMT location: http://memori.ru/megalol/ Content-Type: text/html Server: nginx/0.5.28 X-Powered-By: PHP/5.2.3 Set-Cookie: PHPSESSID=3b731188cdf0c2369bf738f67ff1ce40; path=/ Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: isp=540df7f83845146f0287ff6d2da77900; expires=Sat, 27-Dec-2008 10:02:41 GMT; path=/ Set-Cookie: isl=megalol; expires=Sat, 27-Dec-2008 10:02:41 GMT; path=/и ее используем для дальнейших запросов к серверу, передавая кукисами, чтобы он считал вас авторизованым под вашим логином. ========================= Кстати, если параметр равен нулю, это не значит что его нет, при отправкее запроса передавайте ВСЕ параметры, имеющиеся в форме, в вашем не хватает параметра book. |
копи-пасте с php.net/curl
хотя бы показал про курл_мульти ... да и проверок на ошибки нету, не показано про прокси ничего. |
Цитата:
php.net хороший справочник по функциям, но наглядности в данном случае никакой. Кстати на момент написания статьи русской документации по курлу я не нашел. |
ну кто не знает основ пхп - наглядность не поможет. тем кто ее знает и так все понятно.
|
Спасибо.
Только я немного не так сделал. PHP код:
Еще раз спасибо)) |
а мна мну полный сорец в ЛС ну пажалста =) са мну плючеги
|
C мемори все хорошо получилось.
А теперь вот тренеруюсь на другом сайте. Зарегистрировался, зашел на страницу добавления. Заголовок Код HTML:
HTTP/1.1 200 OKКак только пост запрос идет, то пишет "пожалуйста зарегистрируйтесь". Я так понял, есои какая то переменная чему то равна, то я не зарегистрированный. Я сохранил страницу у себя, изменил post на get и добавил сообщение. выдал вот что PHP код:
|
Круто! Там
<input class=button type=submit name="do_post" value="Добавить" tabindex="9" > оказывается проверяется значение do_post, если его нету, то куки не даются =) |
| Время: 02:14 |