ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Пишем спам бот/авторассыльщик/брутфорс на Php + Curl
  #1  
Старый 31.07.2008, 00:31
Аватар для prescott
prescott
Участник форума
Регистрация: 28.07.2008
Сообщений: 158
Провел на форуме:
728470

Репутация: 115
Lightbulb Пишем спам бот/авторассыльщик/брутфорс на 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 изменило свое значение, это и есть защита от спама, оно же предупреждает нас что одним запросом на сервер нам не обойтись.

/********* Преступим [кодим наконец то ]***********/

Итак создаем новый 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
&zag=$ed_name&text=$text_full&ins=1&sort=2&s=$s_hidden"; 
/*сформировали строку пост данных состоящую из пар поле=>значение разделенных амперсандом (при необходимости строку надо url-кодировать)*/
 curl_setopt($ch, CURLOPT_URL, "http://optsib.ru/insert.php"); //адрес на который шлем запрос (выдираем значение из action нашей формы)
 curl_setopt($ch, CURLOPT_HEADER, 1); //дальше мы все уже видели
 curl_setopt($ch, CURLOPT_USERAGENT, $ua);
 curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_COOKIE, $sess_cookie); //а вот тут внимательнее! не забываем показать серверу наши, полученные ранее кукисы
 curl_setopt($ch, CURLOPT_POST, 1); //говорим что у нас есть POST данные для сервера
 curl_setopt($ch, CURLOPT_REFERER, "http://optsib.ru/do.phtml?d=ins&sort=2&s=$s_hidden"); /*ставим заголовок referer чтоб не спалится, вспоминаем про байду в адресной строке, теперь мы уже знаем что эта байда как раз значение нашего защитного поля */
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //указываем на наши POST данные
 
 $answer=curl_exec($ch); //выполняем запрос на сервер

Печатаем ответ в браузер, видим "Ваше объявление успешно добавлено" и радуемся.

Думаю на первый раз достаточно, это моя первая статья, просьба сильно не пинать . Ах да, об оптимизации кода я особо не заботился, в первую очередь пытаясь написать все как можно яснее. Если на сайте стоит защитная картинка, придется вам порыскать информацию об ее распознавании, ибо это выходит за границы данной статьи.

Последний раз редактировалось prescott; 31.07.2008 в 01:03..
 
Ответить с цитированием

  #2  
Старый 27.10.2008, 18:48
Аватар для 3me9I
3me9I
Новичок
Регистрация: 27.10.2008
Сообщений: 14
Провел на форуме:
13381

Репутация: 0
По умолчанию

Здравствуйте.
Вот пробую приспособить этот способ к сайту memori.ru.
Но там защита на регистрацию стоит.
Никаких изменяемых полей вроде нет.


PHP код:
$url "http://memori.ru/login/";
$ua 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)';
$ch curl_init();

 
curl_setopt($chCURLOPT_URL$url); 
 
curl_setopt($chCURLOPT_HEADER1); 
 
curl_setopt($chCURLOPT_USERAGENT$ua); 
 
curl_setopt($chCURLOPT_TIMEOUT10); 
 
curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 
$result=curl_exec($ch); 

$sess_cookie=substr($resultstrpos($result"PHPSESSID=")+1032);

$post="login=LOGIN&passw=PASSWORD&go_logining=1";

 
curl_setopt($chCURLOPT_URL"http://memori.ru/login/"); 
 
curl_setopt($chCURLOPT_HEADER1); 
 
curl_setopt($chCURLOPT_USERAGENT$ua);
 
curl_setopt($chCURLOPT_TIMEOUT10);
 
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
 
curl_setopt($chCURLOPT_COOKIE$sess_cookie); 
 
curl_setopt($chCURLOPT_POST1); 
 
curl_setopt($chCURLOPT_REFERER"http://memori.ru/");
 
curl_setopt($chCURLOPT_POSTFIELDS$post); 

$result curl_exec($ch); 

echo 
$result
Чего не так делаю??
 
Ответить с цитированием

  #3  
Старый 28.10.2008, 14:05
Аватар для prescott
prescott
Участник форума
Регистрация: 28.07.2008
Сообщений: 158
Провел на форуме:
728470

Репутация: 115
По умолчанию

В данном случае сайт не делает лишних проверок, поэтому перед авторизацией сессию ставить не нада, можно сразу слать данные. Вот рабочий вариант:

PHP код:
$url "http://memori.ru/login/"
$ua 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)'
$ch curl_init();  
$post="login=megalol&passw=nvidia&go_logining=1&book=0&sf=&remember=1";   

curl_setopt($chCURLOPT_URL"http://memori.ru/login/");   
curl_setopt($chCURLOPT_HEADER1);   
curl_setopt($chCURLOPT_USERAGENT$ua);  
curl_setopt($chCURLOPT_TIMEOUT10);  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);  
curl_setopt($chCURLOPT_POST1); 
curl_setopt($chCURLOPT_REFERER"http://memori.ru/");  
curl_setopt($chCURLOPT_POSTFIELDS$post);
   
$result curl_exec($ch);   

echo 
$result
В ответ получаем заголовки:

Код:
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=/
Вырезаем строку PHPSESSID=3b731188cdf0c2369bf738f67ff1ce40
и ее используем для дальнейших запросов к серверу, передавая кукисами, чтобы он считал вас авторизованым под вашим логином.

=========================
Кстати, если параметр равен нулю, это не значит что его нет, при отправкее запроса передавайте ВСЕ параметры, имеющиеся в форме, в вашем не хватает параметра book.

Последний раз редактировалось prescott; 28.10.2008 в 14:22..
 
Ответить с цитированием

  #4  
Старый 28.10.2008, 14:34
Аватар для bombeg
bombeg
Участник форума
Регистрация: 27.10.2008
Сообщений: 244
Провел на форуме:
963613

Репутация: 428
По умолчанию

копи-пасте с php.net/curl
хотя бы показал про курл_мульти ...
да и проверок на ошибки нету, не показано про прокси ничего.
 
Ответить с цитированием

  #5  
Старый 28.10.2008, 14:49
Аватар для prescott
prescott
Участник форума
Регистрация: 28.07.2008
Сообщений: 158
Провел на форуме:
728470

Репутация: 115
По умолчанию

Цитата:
Сообщение от bombeg  
копи-пасте с php.net/curl
хотя бы показал про курл_мульти ...
да и проверок на ошибки нету, не показано про прокси ничего.
Именно это все можно посмотреть углубленно на php.ner/curl/, я же показал на примере с объяснением что есть курл и с чем его едят.

php.net хороший справочник по функциям, но наглядности в данном случае никакой.

Кстати на момент написания статьи русской документации по курлу я не нашел.
 
Ответить с цитированием

  #6  
Старый 28.10.2008, 14:57
Аватар для bombeg
bombeg
Участник форума
Регистрация: 27.10.2008
Сообщений: 244
Провел на форуме:
963613

Репутация: 428
По умолчанию

ну кто не знает основ пхп - наглядность не поможет. тем кто ее знает и так все понятно.
 
Ответить с цитированием

  #7  
Старый 28.10.2008, 15:03
Аватар для 3me9I
3me9I
Новичок
Регистрация: 27.10.2008
Сообщений: 14
Провел на форуме:
13381

Репутация: 0
По умолчанию

Спасибо.
Только я немного не так сделал.

PHP код:
$url "http://memori.ru/login/";
$ua 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)';
$ch curl_init();
$post="login=megalol&passw=nvidia&go_logining=1&book=0&sf=&remember=1";
curl_setopt($chCURLOPT_URL$url); 
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_HEADER1);  //просим CURL возвращать нам ответ вместе с заголовками (обязательно)
curl_setopt($chCURLOPT_USERAGENT$ua);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_POSTFIELDS"login=megalol&passw=nvidia&go_logining=1&book=0&sf=&remember=1");
curl_setopt($chCURLOPT_COOKIEFILE$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

$result curl_exec($ch);

echo 
$result
А то в браузер не выводится.
Еще раз спасибо))
 
Ответить с цитированием

  #8  
Старый 28.10.2008, 15:56
Аватар для satana8920
satana8920
Moderator - Level 7
Регистрация: 22.09.2006
Сообщений: 531
Провел на форуме:
3818187

Репутация: 369


Отправить сообщение для satana8920 с помощью ICQ
По умолчанию

а мна мну полный сорец в ЛС ну пажалста =) са мну плючеги
 
Ответить с цитированием

  #9  
Старый 28.10.2008, 17:49
Аватар для 3me9I
3me9I
Новичок
Регистрация: 27.10.2008
Сообщений: 14
Провел на форуме:
13381

Репутация: 0
По умолчанию

C мемори все хорошо получилось.
А теперь вот тренеруюсь на другом сайте.

Зарегистрировался, зашел на страницу добавления.
Заголовок
Код HTML:
HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Tue, 28 Oct 2008 13:43:39 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.2.4
Content-Length: 4672
И все нормально, пока пост запрос не посылаю.
Как только пост запрос идет, то пишет "пожалуйста зарегистрируйтесь".
Я так понял, есои какая то переменная чему то равна, то я не зарегистрированный.

Я сохранил страницу у себя, изменил post на get и добавил сообщение.

выдал вот что
PHP код:
note=0&url=11hhhh11&title=11111&desc=1111111&tags=11111&status=ALL&save=1&do_post=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD 
В чем пожет быть подвох?
 
Ответить с цитированием

  #10  
Старый 29.10.2008, 00:01
Аватар для 3me9I
3me9I
Новичок
Регистрация: 27.10.2008
Сообщений: 14
Провел на форуме:
13381

Репутация: 0
По умолчанию

Круто! Там
<input class=button type=submit name="do_post" value="Добавить" tabindex="9" >
оказывается проверяется значение do_post, если его нету, то куки не даются =)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Что такое Php? PAPA212 Болталка 13 28.12.2007 20:44
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ