Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подделка cookies и сессий на mail.ru
 
 автор: master-quest   (26.05.2008 в 19:16)   письмо автору
 
 

Помогите
Вот конечный заголовок, хотя на STEP 3

Выдаётся вот такой заголовок

HTTP/1.1 302 Found
Date: Mon, 26 May 2008 11:59:56 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8b mod_mono/1.2.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.5
X-Powered-By: PHP/5.2.5
Location: http://win.mail.ru/cgi-bin/start?back=1
Connection: close
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 323
Content-Type: text/html; charset=windows-1251

А при переходе получаю вот что, не понимаю почему...

HTTP/1.1 302 OK
Date: Mon, 26 May 2008 14:21:43 GMT
Server: Apache/1.3.27 (Unix) mru_xml/0.471 gorgona/2.1 mod_jk/1.2.4 mod_ruby/1.0.7 Ruby/1.6.8 mod_mrim/0.17
Connection: close
Content-Type: text/html
Content-Length: 45
Location: http://win.mail.ru/cgi-bin/login
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Sun, 27 May 2007 14:21:43 GMT
Last-Modified: Mon, 26 May 2008 18:21:43 GMT

Очень буду благодарен за вашу помощь...

[поправлено модератором: объемные листинги лучше прикреплять в виде архива]

   
 
 автор: BinLaden   (26.05.2008 в 19:32)   письмо автору
 
   для: master-quest   (26.05.2008 в 19:16)
 

Как мне кажется, Вы не задали вопроса.

   
 
 автор: Незнайка   (26.05.2008 в 19:34)   письмо автору
 
   для: master-quest   (26.05.2008 в 19:16)
 

А, что там ребята не "защищаются" от этого?

   
 
 автор: master-quest   (26.05.2008 в 19:53)   письмо автору
 
   для: Незнайка   (26.05.2008 в 19:34)
 

>А, что там ребята не "защищаются" от этого?

От чего? )) От этого нет защиты)))
Защита это сесси и кукисы, а они подделываются)

Вопрос)) Не пойму где у меня ошибки.
В конце концов просто помогите пройти авторизацию на mail.ru
Кому проше вот аськи 1-9восемь3-669 355-ноль16-572

   
 
 автор: BinLaden   (26.05.2008 в 20:04)   письмо автору
 
   для: master-quest   (26.05.2008 в 19:53)
 

> Не пойму где у меня ошибки

Довольно трудно читать Ваш первый пост. Код не обрамлен в теги [code] ... [/cоde].

Вызывает некоторое недоумение хотя бы это:

> preg_match("|<HTML>(.*)</HTML>|i",$line,$link);
> $explode=explode("=", $link[1]) ;
> // STEP 3
> $line="";
> $hostname = "win.mail.ru";
> $path = "/cgi-bin/checkcookie?id=$explode[1]";

Вы получаете то, что между тегами <html> и </html>. Вы уверены в том, что $explode[1] будет каким-то идентификатором?

Потом:
> $path = "/cgi-bin/start?back=1";

Откуда уверенность, что это нужная Вам страница? Вы берете фиксированное значение, а желательно доставать адрес из заголовка Location.

   
 
 автор: master-quest   (26.05.2008 в 21:12)   письмо автору
 
   для: BinLaden   (26.05.2008 в 20:04)
 

<?php 
// STEP 1
  
$hostname "win.mail.ru"
  
$path "/cgi-bin/login"
  
$fp fsockopen($hostname80$errno$errstr30);  
  if (!
$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";  
  else 
  { 
    
$headers "GET $path HTTP/1.1\r\n";
    
$headers .= "Host: $hostname\r\n";  
    
$headers .= "Connection: keep-alive\r\n\r\n";  
    
fwrite($fp$headers);  
    
// Получаем ответ 
    
while (!feof($fp)) 
    {  
      
$line .= fgets($fp1024);
      
preg_match("|Set-Cookie: mrcu=([\d\w]*.+)|i",$line,$out); 
if(!empty(
$out[1])) 
{
break; 

    } 

    
fclose($fp);  
  }
// STEP 2
$line="";
$path "/cgi-bin/auth";
  
$fp fsockopen($hostname80$errno$errstr30);  
  if (!
$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";  
  else 
  { 
    
$data "page=&post=&login_from=&Login=ЛОГИН&Domain=mail.ru&Password=ПАРОЛЬ&\r\n\r\n"
    
$headers "POST $path HTTP/1.1\r\n";  
    
$headers .= "Host: $hostname\r\n";  
    
$headers .= "Content-type: application/x-www-form-urlencoded\r\n"
    
$headers .= "Content-Length: ".strlen($data)."\r\n"
    
// Подделываем cookie 
    
$headers .= "Cookie: mrcu=$out[1];\r\n";
    
$headers .= "Connection: Close\r\n\r\n"
    
fwrite($fp$headers.$data);
    
// Получаем ответ 
    
while (!feof($fp)) 
    {  
      
$line .= fgets($fp1024);
    }  


    
fclose($fp);  
  }
  
preg_match("|Set-Cookie: t=([\d\w]*.+)|i",$line,$out1); 
preg_match("|Set-Cookie: Mpop=([\d\w]*.+)|i",$line,$out2); 
$n=preg_match("|Location: (.*)\n|i",$line,$link);
if (
$n==0) {echo "Ошибка STEP 3"; exit();}
$explode=explode(".ru"$link[1]) ;
echo 
"\n STEP 2 \nПолучил $line \n Отправил \n $headers \n\n\n\n\n\n ";
// STEP 3
$line="";
  
$hostname "win.mail.ru"
  
$path "$explode[1]"
  
$fp fsockopen($hostname80$errno$errstr30);  
  if (!
$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";  
  else 
  { 
    
$headers "GET $path HTTP/1.1\r\n";
    
$headers .= "Host: $hostname\r\n";  
    
$headers .= "Content-type: application/x-www-form-urlencoded\r\n"
    
// Подделываем cookie 

    
$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";
    
$headers .= "Connection: keep-alive\r\n\r\n";      

    
fwrite($fp$headers);  
    
// Получаем ответ 
    
while (!feof($fp)) 
    {  
      
$line .= fgets($fp1024);
    } 
    
fclose($fp);  
  }
$n=preg_match("|Location: (.*)\n|i",$line,$link);
if (
$n==0) {echo "Ошибка STEP 4";  echo "\nПолучил $line \n Отправил \n $headers \n "; exit();}
$explode=explode(".ru"$link[1]) ;

$line="";
// STEP 4
  
$hostname "win.mail.ru"
  
$path "$explode[1]"
  
$fp fsockopen($hostname80$errno$errstr30);  
  if (!
$fp) echo "Ошибка соединения, code error $errstr ($errno)<br />\n";  
  else 
  { 
$headers "GET $path HTTP/1.1\r\n";
    
$headers .= "Host: $hostname\r\n";  
    
$headers .= "Content-type: application/x-www-form-urlencoded\r\n"
    
$headers .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
    
$headers .= "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n";
    
$headers .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";

    
// Подделываем cookie 

    
$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";
    
$headers .= "Connection: keep-alive\r\n\r\n";      

    
fwrite($fp$headers);  
    
// Получаем ответ 
    
while (!feof($fp)) 
    {  
      
$line .= fgets($fp1024);


    
fclose($fp);  
  }
    echo 
"$line \n\n\n\n\n\n\n\n\n\n\n\n\n\\n\n $headers";
?>


Вот так получается, но всёравно криво, но у меня ещё такой вопрос. После отправли логина пасса, получаю
Set-Cookie: t=AAABAAAAAAAAAAAAAAYFxgcA; expires=Sat, 22 Nov 2008 17:07:44 GMT; path=/; domain=.mail.ru
Set-Cookie: Mpop=1211821664:06587e5e004f545419c54421c4642524645 155a58585c184a47:user@mail.ru:; expires=Sun, 24 Aug 2008 17:07:44 GMT; path=/; domain=.mail.ru, т.е. нужно "установить" два кукиса, как их отправлять ,верно ли я это сделал?

$headers .= "Cookie: mrcu=$out[1]; Mpop=$out2[1]; t=$out1[1]\r\n";

Вот эта строка.

   
 
 автор: Незнайка   (26.05.2008 в 20:11)   письмо автору
 
   для: master-quest   (26.05.2008 в 19:53)
 

>> ...От этого нет защиты
Может это просто авторизация сделана с ошибками?
Или нет?

   
 
 автор: mihdan   (27.05.2008 в 12:25)   письмо автору
 
   для: master-quest   (26.05.2008 в 19:16)
 

Через cURL imho проще


<?
$url 
"http://win.mail.ru/cgi-bin/auth"
$post "Login=YOU_NAME&Domain=YOU_DOMAIN&Password=YOU_PASSWD";
$cookie str_replace('\\''/'dirname(__FILE__)) . 'cookie.txt';
$ch curl_init(); 
curl_setopt($chCURLOPT_URL,$url);
curl_setopt($chCURLOPT_FAILONERROR1); 
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_TIMEOUT3);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$post);
curl_setopt($chCURLOPT_COOKIEFILE$cookie);
curl_setopt($chCURLOPT_COOKIEJAR$cookie);
curl_setopt($chCURLOPT_NOBODY0);
curl_setopt($chCURLOPT_HEADER0);
$result curl_exec($ch); 
curl_close($ch);  

echo 
$result;
?>

   
 
 автор: master-quest   (27.05.2008 в 19:53)   письмо автору
 
   для: mihdan   (27.05.2008 в 12:25)
 

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/блабла/public_html/gm/curl.php on line 8

Это что заначит?

Может всётаки подскажите как на соксах делать?

   
 
 автор: BinLaden   (27.05.2008 в 22:35)   письмо автору
 
   для: master-quest   (27.05.2008 в 19:53)
 

Довольно интересная ошибка. Связана, очевидно, с schema "file:" и open_basedir.

Но в Вашем случае это даже лишняя опция.

   
 
 автор: mihdan   (28.05.2008 в 10:50)   письмо автору
 
   для: BinLaden   (27.05.2008 в 22:35)
 

BinLaden прав эта опция не нужна, так как сервер никуда не перенаправляет и все отлично работает без этого

<?
$url 
"http://win.mail.ru/cgi-bin/auth"
$post "Login=YOU_NAME&Domain=YOU_DOMAIN&Password=YOU_PASSWD";
$cookie str_replace('\\''/'dirname(__FILE__)) . 'cookie.txt';
$ch curl_init(); 
curl_setopt($chCURLOPT_URL,$url);
curl_setopt($chCURLOPT_FAILONERROR1); 
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_TIMEOUT3);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$post);
curl_setopt($chCURLOPT_COOKIEFILE$cookie);
curl_setopt($chCURLOPT_COOKIEJAR$cookie);
curl_setopt($chCURLOPT_NOBODY0);
curl_setopt($chCURLOPT_HEADER0);
$result curl_exec($ch); 
curl_close($ch);  

echo 
$result;
?>

   
 
 автор: BinLaden   (28.05.2008 в 11:44)   письмо автору
 
   для: mihdan   (28.05.2008 в 10:50)
 

> BinLaden прав эта опция не нужна, так как сервер никуда не перенаправляет и все отлично работает без этого

Там есть перенаправление, но есть проверка cookies, которые устанавливаются на странице "http://win.mail.ru/cgi-bin/auth" после отправки и CURLOPT_FOLLOWLOCATION будет только мешать.

   
 
 автор: mihdan   (28.05.2008 в 16:05)   письмо автору
 
   для: BinLaden   (28.05.2008 в 11:44)
 

проверил без CURLOPT_FOLLOWLOCATION - не работает.


вот рабочий пример

   
 
 автор: BinLaden   (28.05.2008 в 23:05)   письмо автору
 
   для: mihdan   (28.05.2008 в 16:05)
 

> проверил без CURLOPT_FOLLOWLOCATION - не работает

Конечно, потому что Вы должны сами обработать получаемые заголовки и, соответсвенно, нужно сменить значение CURLOPT_HEADER.

   
 
 автор: mihdan   (01.06.2008 в 01:20)   письмо автору
 
   для: BinLaden   (28.05.2008 в 23:05)
 

Зачем, когда cURL сам это делает )))))

   
 
 автор: BinLaden   (01.06.2008 в 01:58)   письмо автору
 
   для: mihdan   (01.06.2008 в 01:20)
 

> mihdan (01.06.2008 в 01:20)
> Зачем, когда cURL сам это делает )))))

То есть Вы хотите сказать при CURLOPT_FOLLOWLOCATION cURL сохраняет сам Cookies и передаёт их серверу? На чём основано Ваше предположение? Практика говорит об обратном - cURL не будет этого делать.

Чтобы быть голословным, приведу пример:

<?php 

$test_cookie 
= isset($_GET['test_cookie']) ? $_GET['test_cookie'] : '';

if( 
$test_cookie == )
{
    
setcookie('_test_cookie''value');
    
header('Location: http://' $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?test_cookie=2');
    exit;
}
else if( 
$test_cookie == )
{
    if( isset(
$_COOKIE['_test_cookie']) )
    {
        echo 
'I have already received cookie "_test_cookie"!';
    }
    else
    {
        echo 
'Where is "_test_cookie"? :(';
    }

    exit;
}

$ch curl_init'http://' $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?test_cookie=1' );

curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_FOLLOWLOCATION1);

curl_exec($ch);  
curl_close($ch); 
?>


Результат кода: Where is "_test_cookie"? :(

Неужели у Вас что-то другое?

   
 
 автор: mihdan   (01.06.2008 в 11:44)   письмо автору
 
   для: BinLaden   (01.06.2008 в 01:58)
 

CURLOPT_FOLLOWLOCATION - автопереход по редиректам (302), а куки:

<?
curl_setopt
($chCURLOPT_COOKIEFILE$cookie);
curl_setopt($chCURLOPT_COOKIEJAR$cookie); 
?>


[поправлено модератором]

   
 
 автор: BinLaden   (01.06.2008 в 15:33)   письмо автору
 
   для: mihdan   (01.06.2008 в 11:44)
 

> BinLaden (28.05.2008 в 11:44)
> Там есть перенаправление, но есть проверка cookies, которые устанавливаются на странице "http://win.mail.ru/cgi-bin/auth" после отправки и CURLOPT_FOLLOWLOCATION будет только мешать

То есть после отправки данных методом POST там устанавливаются cookies и перенаправляются на страницу checkcookies. Благодаря CURLOPT_FOLLOWLOCATION, конечно, перенаправление на checkcookies произойдет, но вот cookies отправлены не будут.

Вы же этим сообщением:

> mihdan (01.06.2008 в 01:20)
> Зачем, когда cURL сам это делает )))))

заявляете, что при cURL сам будет сохранять и передавать cookies при CURLOPT_FOLLOWLOCATION.

Пожалуйста, внимательней читайте сообщения пользователей и не делайте поспешные заявления.
Уже неоднократно наблюдаю, как Вы пытаетесь выкрутиться из-за собственной ошибки. :(

[поправлено модератором]

   
 
 автор: mihdan   (02.06.2008 в 10:39)   письмо автору
 
   для: BinLaden   (01.06.2008 в 15:33)
 

Я сказал CURLOPT_FOLLOWLOCATION - автопереход по редиректам (302)

   
 
 автор: mihdan   (02.06.2008 в 10:39)   письмо автору
 
   для: BinLaden   (01.06.2008 в 15:33)
 

>Вы же этим сообщением:
>> mihdan (01.06.2008 в 01:20)
>> Зачем, когда cURL сам это делает )))))

>заявляете, что при cURL сам будет сохранять и передавать cookies при
>CURLOPT_FOLLOWLOCATION.


Не при CURLOPT_FOLLOWLOCATION, а при

<?
curl_setopt
($chCURLOPT_COOKIEFILE$cookie);
curl_setopt($chCURLOPT_COOKIEJAR$cookie); 
?> 

   
 
 автор: BinLaden   (02.06.2008 в 12:11)   письмо автору
 
   для: mihdan   (02.06.2008 в 10:39)
 

> Не при CURLOPT_FOLLOWLOCATION, а при

Речь шла конкретно про то, почему автоматическая переадресация тут не нужна.

[поправлено модератором]

   
 
 автор: mihdan   (02.06.2008 в 13:57)   письмо автору
 
   для: BinLaden   (02.06.2008 в 12:11)
 

вот оно работает - куки сами получаются отправляются, сработывает переадресация только с помощью cURL

[поправлено модератором]

   
 
 автор: master-quest   (30.05.2008 в 20:51)   письмо автору
 
   для: mihdan   (28.05.2008 в 16:05)
 

PHP исходник можно увидеть, я скрипт запускал на хостинге Slavhost http://gm.master-qwest.com/mail.php и получил ошибку(она выше...). На мой взгляд лучше делать на сокетах т.к. они доступны почти всегда, а cURL не всегда. Подскажите с заголовками, именно с заголовками вся проблема, в том как отпрвить и чтоб это было правильно. Да на курлах (проще) синтаксиса больше. Но личше на сокетах.

   
 
 автор: BinLaden   (30.05.2008 в 21:56)   письмо автору
 
   для: master-quest   (30.05.2008 в 20:51)
 

> На мой взгляд лучше делать на сокетах т.к. они доступны почти всегда, а cURL не всегда

Вы привели слабый аргумент. Лично я не знаю платных хостингов без CURL.

> HTTP/1.1

По моему скромному мнению тут желательно писать HTTP/1.0, так как в HTTP/1.1 для подобного скрипта могут быть подводные камни.

> получил ошибку(она выше...)
Код mihdan'а явно не направлен на решение Вашей задачи. Возможно, он просто что-то хотел показать.

> Вот так получается, но всёравно криво
> Подскажите с заголовками, именно с заголовками вся проблема, в том как отпрвить и чтоб это было правильно

Что именно не так?

   
 
 автор: master-quest   (30.05.2008 в 22:13)   письмо автору
 
   для: BinLaden   (30.05.2008 в 21:56)
 

http://gm.master-qwest.com/mail777.php
Вот все общение которое происходит с mail.ru

1) Возмозно что то не то с Connection: Keep-Alive там может надо Connection: Close
2) Нужно ли посылать User-Agent
3) Нужен ли там Referer
---------------------------------------
В конце концов в общем какие по вашему мнению заголовки нужны а какие нет.
Да и почему по вашему мнению mail.ru посылает меня снова на http://win.mail.ru/cgi-bin/login
просто после авторизации через браузер конечный URL http://win.mail.ru/cgi-bin/start?back=1 и судя по ответам сервера mail.ru скрипт прошол авторизацию.

   
 
 автор: Master-Quest   (30.05.2008 в 22:51)   письмо автору
 
   для: master-quest   (30.05.2008 в 22:13)
 

Все люди всем спасибо за помощь ! (Хотя я так и не понел что вы мне помогли !!!! ПО МОЙМУ НИ ЧЕГО ДЕЛЬНОГО КРОМЕ "НУ МОЖЕТ ТАК А ВОБЩЕ НАВЕРНО ТЫ ПОПРОБУЙ КАКНИТЬ ТАК И Т.Д.")

Но в канце концов я прошол авторизацию !!!!!!!


Кароче кодеры там просто кукис быал грязный !!!

Да и проще писать на сокетах.

   
 
 автор: mihdan   (01.06.2008 в 01:19)   письмо автору
 
   для: Master-Quest   (30.05.2008 в 22:51)
 

Категорически не согласен :( Что значит кукис "грязный"? И на сокетах не проще, а на много сложнее, уж слишком много нужно кода написать и много чего учесть, что выполнить такую примитивную операцию, как авторизация.

ЗЫ: смените хостера

   
 
 автор: mihdan   (01.06.2008 в 01:22)   письмо автору
 
   для: master-quest   (30.05.2008 в 20:51)
 

см. выше

   
 
 автор: AcidTrash   (27.05.2008 в 23:07)   письмо автору
 
   для: master-quest   (27.05.2008 в 19:53)
 

Вы с хостинга это пытаетесь сделать, или с локальной машины?

   
 
 автор: psychomc   (10.10.2008 в 11:30)   письмо автору
 
   для: AcidTrash   (27.05.2008 в 23:07)
 

о чём вообще здесь речь шла?)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования