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

Форум 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($hostname, 80, $errno, $errstr, 30);  
  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($fp, 1024);
      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($hostname, 80, $errno, $errstr, 30);  
  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($fp, 1024);
    }  


    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($hostname, 80, $errno, $errstr, 30);  
  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($fp, 1024);
    } 
    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($hostname, 80, $errno, $errstr, 30);  
  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($fp, 1024);
} 

    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($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
$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($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
$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 == 1 )
{
    setcookie('_test_cookie', 'value');
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?test_cookie=2');
    exit;
}
else if( $test_cookie == 2 )
{
    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($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

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($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_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($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_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)
 

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