Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Принимать Set-Cookie средствами пхп (https://forum.antichat.xyz/showthread.php?t=38211)

beerbear 17.04.2007 23:35

Принимать Set-Cookie средствами пхп
 
Отправляю POST запрос на сервер. Он мне пытается вставить куки:

Set-Cookie:блаблабла1
Set-Cookie:блаблабла2
Set-Cookie:блаблабла3


Каким образом при помощи пхп перехватить эти куки , чтобы потом их юзать при следующем запросе?

Сорри, если вопрос ламерский - я в пхп нуб пока.

Спасибо!

beerbear 17.04.2007 23:55

Короче, попытаюсь написать поподробнее...

При помощи Inetcrack отправляю:

Код:

POST http://site.com/login HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://site.com
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: site.com
Content-Length: 47
Pragma: no-cache
Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3

username=usver&password=123456&processlogin=1


Получаю ответ:

Код:

HTTP/1.0 302 Found
Date: Tue, 17 Apr 2007 18:23:23 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private
Pragma: no-cache
Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com
Set-Cookie: loginname=usver; path=/; domain=.site.com
Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com
location: http://site.com/authloggedin
Content-Length: 0
nnCoection: close
Content-Type: text/html; charset=UTF-8
RemovedHdr: Keep-Alive


И потом снова отправляю:

Код:

GET http://site.com/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://site.com/login
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: site.com
Pragma: no-cache
Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; loginname=usver; id_hash=bca49e192dce15ec725dce475e59d1a0


И все...

Как реализовать все это на пхп?
Если можно - приведите код.. Битый час пытаюсь написать этот скрипт, но нифига не фурычит... По-моему, я где-то туплю..

nc.STRIEM 17.04.2007 23:55

открываеш сокет, отправляеш http заголовок, потом читаеш ответ,в нем будут твои куки! Ты их просто выдираеш оттуда и юзаеш!

beerbear 17.04.2007 23:58

Цитата:

Сообщение от nc.STRIEM
открываеш сокет, отправляеш http заголовок, потом читаеш ответ,в нем будут твои куки! Ты их просто выдираеш оттуда и юзаеш!

Необходимо, чтобы скрипт самостоятельно выдирал куки, а потом юзал их при Get запросе.

AkyHa_MaTaTa 18.04.2007 00:12

Цитата:

Сообщение от beerbear
Необходимо, чтобы скрипт самостоятельно выдирал куки, а потом юзал их при Get запросе.

сохраняешшь состояние сокета в переменую, потом парсишь эту переменую например с помощью регулярки(регулярного выражения) Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3 потом вставляешь в переменую и опять отсылаещь.
Как я понял ты хочешь че то брутануть, зделай все в цикле, условием остановки которого будет удачный ответ.

mR_LiNK[deface_0nl 18.04.2007 01:45

2beerbear
вот примерный вариант шаблона, который тебе нужен. Если че-то не понятно, тогда помочь могут только маны пХп (работа с сокетами, http протокол, ессии, ну и парсинг строковыми функциями)
PHP код:

<?
//соединяемся с сервером
$fp fsockopen($hostname80$errno$errstr30);
if(!
$fp
//проверяем успешность соединения
  
echo "$errstr ($errno)<br />\n";
} else {
        
//пишешь заголовки, к примеру
        
$header 'POST http://site.com/login HTTP/1.0';
        
$header .= //подставляешь нужные заголовки...
        
        
for(){ //кол-во вложенных циклов зависит от кол-ва переменных для брута
// если логин и пароль, то 2-а цикла
                
$header .= //дописываешь нужные переменные
        //отправляем запрос
       
fputs($fp$header); 
        
//построчно считываешь соединение    
        //и парсишь
         
for($i=0;$i<count($answer);$i++) {
$answer[]=fgets($socket);
          if(
strpos($answer[$i], 'базис сравнения')!==false//... даллее действие при совпадении
          
fclose($sock);
                                         }
               }
?>


beerbear 18.04.2007 03:38

Спасибо, конечно, за ответы всем.. Вот только вы меня не так поняли.. =) Брутить я никого не собираюсь..
Просто мне надо повторить описанные выше запросы при помощи скрипта на пхп.

Т.е. скрипт должен отправлять POST запрос на site.com/login, чтобы получить куки:

Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com
Set-Cookie: loginname=usver; path=/; domain=.site.com
Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com

сохранить эти куки в переменную, а потом в GET запросе выставить эти куки.

Я просто не знаю, как это реализовать.

Получается скрипт после ответа сервера получает куки и идентификатор сессии и GET запросом переходит на нужную мне страницу www.site.com/dir/dir2.

Список логинов.паролей юзеров у меня есть.
Основная трудность, как подставить куки, полученные в ответе сервера в GET запрос?

Спасибо!

_Great_ 18.04.2007 09:21

Цитата:

Т.е. скрипт должен отправлять POST запрос на site.com/login, чтобы получить куки:

Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com
Set-Cookie: loginname=usver; path=/; domain=.site.com
Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com

сохранить эти куки в переменную, а потом в GET запросе выставить эти куки.

Я просто не знаю, как это реализовать.
Получаешь весь хидер в буфер, а потом выдираешь все Set-Cookie регуляркой, например, preg_match( )

AkyHa_MaTaTa 18.04.2007 12:08

вот скриптик, рег флудер, немного переделаешь регулярку и добавишь login:pass в отправку из файлика.

http://slil.ru/24253456

hidden 18.04.2007 22:51

МДА, ещё с первого поста можно было понять, что сокетом он уже умеет пользовапться и ему не нужно учиться им пользоваться второй раз, ему нужно пропарсить куки.
Код:

<?

$a_cookie = array();

ParseCookie(
'HTTP/1.0 302 Found
Date: Tue, 17 Apr 2007 18:23:23 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private
Pragma: no-cache
Set-Cookie: PHPSESSID=dbad9cfe26fa3aa839312951e7053c4d; path=/; domain=.site.com
Set-Cookie: loginname=usver; path=/; domain=.site.com
Set-Cookie: id_hash=bca49e192dce15ec725dce475e59d1a0; path=/; domain=.site.com
location: http://site.com/authloggedin
Content-Length: 0
nnCoection: close
Content-Type: text/html; charset=UTF-8
RemovedHdr: Keep-Alive'
, $a_cookie);

ParseCookie(
'HTTP/1.0 302 Found
Date: Tue, 17 Apr 2007 18:23:23 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private
Pragma: no-cache
Set-Cookie: PHPSESSID=2f83a67a61ef83594528c117c25a7da3
Content-Length: 0
nnCoection: close
Content-Type: text/html; charset=UTF-8
RemovedHdr: Keep-Alive'
, $a_cookie);

$cookie = array();

foreach($a_cookie as $param => $value)
{
  $cookie[] =
"$param=$value";
}


echo
'<pre>Cookie: '.implode('; ', $cookie).'</pre>';


# *************************************************
function ParseCookie($text, &$cookie)
{
  preg_match_all(
'/Set-Cookie:\s*(\S[^\r\n]*)\s*[\r\n]/sU', $text, $matches, PREG_SET_ORDER);
  foreach($matches as $cur)
  {
    $elements = preg_split(
'/\s*;\s*/', $cur[1]);
    foreach($elements as $element)
    {
      list($param, $value) = preg_split(
'/\s*=\s*/', $element);     
      $cookie[$param] = $value;
    }

  }
}


?>

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


[Great:] ОМФГ, Ну и форматирование=\\\


Время: 03:42