[help] Узнать имя сессии и послать пост запрос

Статус
В этой теме нельзя размещать новые ответы.

Ser Frood

Заблокирован
Регистрация
12 Дек 2006
Сообщения
515
Реакции
397
Народ подскажите как узнать имя сесиии?
Имеется пост запрос, но на сайте защита на сессиях вот как узнать имя сессии и модефицировать пост запрос:
 
Эта задача обратная разработке защиты на сессиях, которую мы 3 дня назад решали пока у меня гроза не прошла. Дальше я не в курсе.

Нужно перед отправкой POST загрузить форму и там уже из хидера либо из ссылок(если в них есть) узнать идентификатор сессии.

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

Хидер с сервера идет до контента страницы и там есть все что нужно.
 
Эта задача обратная разработке защиты на сессиях, которую мы 3 дня назад решали пока у меня гроза не прошла. Дальше я не в курсе.

Нужно перед отправкой POST загрузить форму и там уже из хидера либо из ссылок(если в них есть) узнать идентификатор сессии.

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

Хидер с сервера идет до контента страницы и там есть все что нужно.

Хм а каким методом открыть и узнать Куки и Сессии? (функции открытия и т д)
 
Хм а каким методом открыть и узнать Куки и Сессии? (функции открытия и т д)

а это зависит от того чем грузишь страницу. Если snoopy то там есть $snoopy->headers. Если fsocksopen, то там хидеры выбираются простым циклом в самом начале.

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

PHP:
$snoopy = new Snoopy;

     # ### отправляем пароль и получаем куку ####

    $submit_url = "http://ed.ru/loginmake.asp";
     $snoopy -> _submit_type = "application/x-www-form-urlencoded";
     $submit_vars["username"] = $login;
     $submit_vars["password"] = $pass;
     $snoopy -> submit($submit_url, $submit_vars);

     // проверка правильности пароля
    if(!strpos($snoopy -> headers[5], "/sprava/default.asp")){
         die("неправильный логин или пароль");
         }

    // ищем куку
     for($x = 0; $x < count($snoopy -> headers); $x++){
         if(preg_match("/^set-cookie:.*?/xi", $snoopy -> headers[$x], $match)){
             [B]$cook_data[/B] = $match[0];
             }
         }
     $snoopy -> rawheaders["Referer:"] = "http://ed.ruz/sprava/Uploadfile.asp?File="; //реферер
     $snoopy -> rawheaders["Cookie:"] = $cook_data;
     $snoopy -> rawheaders["Cookie2:"] = '$Version=1';
......
....
...
$snoopy->submit("http://ed.ru/sprava/savefile1.asp?file=", $submit_vars, $submit_file);

А вот как можно получить хидер сырым пхп
PHP:
function get_server_answer($url)
{
    $url = trim($url);
    $urlp = parse_url($url); 
    // формирование заголовка
    $headers['Referer'] = trim($ref);
    $headers['User-Agent'] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
    $headers['Host'] = $urlp['host'];
    $headers['Accept'] = "text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
    $headers['Accept-Language'] = "en";
    $headers['Accept-Charset'] = "windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1";
    $headers['Accept-Encoding'] = "deflate, gzip, x-gzip, identity, *;q=0";
    $headers['Connection'] = "Keep-Alive"; 
    // соединяем все в кучу
    $cmd = "GET " . $urlp['path'] . '?' . $urlp['query'] . " HTTP/1.1" . "\r\n";
    if (is_array($headers)) {
        foreach($headers as $k => $v) {
            $cmd .= "$k: $v" . "\r\n";
        } 
    } 
    // коннект к хосту
    if ($socket == false or feof($socket)) {
        if ($debug == 1)echo "коннект к хосту...";
        $socket = fsockopen($urlp['host'], 80, &$reply, &$replyString);
        @socket_set_timeout($socket, 10);
    } 
    // отправка заголовка
    fputs($socket, $cmd . "\r\n"); 
    //получение ответа
    $lastLine = "\r\n";
    $finished=false;
    $headers=array();
    while ((!$finished)&&(!feof($socket))){
        $str = fgets( $socket, 1024 );
        $finished = ( $str == $lastLine );
        $headers[]=$str;
    }
    return $headers;
}

Тут видна суть. Сделай по аналогии. Кстати кука ведь обычно получается при авторизации. Так что если авторизовался ранее тем же скриптом, то незачем дергать форму.
 
а это зависит от того чем грузишь страницу. Если snoopy то там есть $snoopy->headers. Если fsocksopen, то там хидеры выбираются простым циклом в самом начале.

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

PHP:
$snoopy = new Snoopy;

     # ### отправляем пароль и получаем куку ####

    $submit_url = "http://ed.ru/loginmake.asp";
     $snoopy -> _submit_type = "application/x-www-form-urlencoded";
     $submit_vars["username"] = $login;
     $submit_vars["password"] = $pass;
     $snoopy -> submit($submit_url, $submit_vars);

     // проверка правильности пароля
    if(!strpos($snoopy -> headers[5], "/sprava/default.asp")){
         die("неправильный логин или пароль");
         }

    // ищем куку
     for($x = 0; $x < count($snoopy -> headers); $x++){
         if(preg_match("/^set-cookie:.*?/xi", $snoopy -> headers[$x], $match)){
             [B]$cook_data[/B] = $match[0];
             }
         }
     $snoopy -> rawheaders["Referer:"] = "http://ed.ruz/sprava/Uploadfile.asp?File="; //реферер
     $snoopy -> rawheaders["Cookie:"] = $cook_data;
     $snoopy -> rawheaders["Cookie2:"] = '$Version=1';
......
....
...
$snoopy->submit("http://ed.ru/sprava/savefile1.asp?file=", $submit_vars, $submit_file);

А вот как можно получить хидер сырым пхп
PHP:
function get_server_answer($url)
{
    $url = trim($url);
    $urlp = parse_url($url); 
    // формирование заголовка
    $headers['Referer'] = trim($ref);
    $headers['User-Agent'] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
    $headers['Host'] = $urlp['host'];
    $headers['Accept'] = "text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
    $headers['Accept-Language'] = "en";
    $headers['Accept-Charset'] = "windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1";
    $headers['Accept-Encoding'] = "deflate, gzip, x-gzip, identity, *;q=0";
    $headers['Connection'] = "Keep-Alive"; 
    // соединяем все в кучу
    $cmd = "GET " . $urlp['path'] . '?' . $urlp['query'] . " HTTP/1.1" . "\r\n";
    if (is_array($headers)) {
        foreach($headers as $k => $v) {
            $cmd .= "$k: $v" . "\r\n";
        } 
    } 
    // коннект к хосту
    if ($socket == false or feof($socket)) {
        if ($debug == 1)echo "коннект к хосту...";
        $socket = fsockopen($urlp['host'], 80, &$reply, &$replyString);
        @socket_set_timeout($socket, 10);
    } 
    // отправка заголовка
    fputs($socket, $cmd . "\r\n"); 
    //получение ответа
    $lastLine = "\r\n";
    $finished=false;
    $headers=array();
    while ((!$finished)&&(!feof($socket))){
        $str = fgets( $socket, 1024 );
        $finished = ( $str == $lastLine );
    }
    return $headers;
}

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

То есть нам надо сделать 2-а запроса?
1-й это всё выдрать 2-й это всё вставить и послать запрос?
2-м способом неполучается вывести полученый массив
 
Не нужно так много цитировать.

Все очень просто - за сессию отвечает сервер. Он генерирует идентификатор и хранит данные сессии. Но скрипт сабмита же не телепат. Вот и надо спросить у сервера какую угодно страницу лишь бы он поставил куку (послал в хидере куку, которую браузер и сохраняет обычно, а мы можем узнать ее и отправить обратно в запросе).
Если нет авторизации, то дергать надо страницу формы. Вполне возможно, что только в ней и нужна сессия. Но это не такая уж беда потому что мы читаем только хидеры, а это очень быстрый процесс.

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

Все очень просто - за сессию отвечает сервер. Он генерирует идентификатор и хранит данные сессии. Но скрипт сабмита же не телепат. Вот и надо спросить у сервера какую угодно страницу лишь бы он поставил куку (послал в хидере куку, которую браузер и сохраняет обычно, а мы можем узнать ее и отправить обратно в запросе).
Если нет авторизации, то дергать надо страницу формы. Вполне возможно, что только в ней и нужна сессия. Но это не такая уж беда потому что мы читаем только хидеры, а это очень быстрый процесс.

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

Ясненько воспользовался 1-м способом!
Cannot instantiate non-existent class: snoopy in z:\home\111.ru\www\h.php on line 3
2-м невыводит функция данные хеадера!
 
Конечно. Snoopy это такая библиотека на php.
В ней реализовано в классе то, что ты хочешь писать просто ручками. При этом не требуется curl
Живет тут Для просмотра ссылки Войди или Зарегистрируйся

А по второму просто строчку пропустил. Брал из готового и переделывал на лету.

PHP:
function get_server_answer($url)
{
    $url = trim($url);
    $urlp = parse_url($url); 
    // формирование заголовка
    $headers['Referer'] = trim($ref);
    $headers['User-Agent'] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
    $headers['Host'] = $urlp['host'];
    $headers['Accept'] = "text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
    $headers['Accept-Language'] = "en";
    $headers['Accept-Charset'] = "windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1";
    $headers['Accept-Encoding'] = "deflate, gzip, x-gzip, identity, *;q=0";
    $headers['Connection'] = "Keep-Alive"; 
    // соединяем все в кучу
    $cmd = "GET " . $urlp['path'] . '?' . $urlp['query'] . " HTTP/1.1" . "\r\n";
    if (is_array($headers)) {
        foreach($headers as $k => $v) {
            $cmd .= "$k: $v" . "\r\n";
        } 
    } 
    // коннект к хосту
    if ($socket == false or feof($socket)) {
        if ($debug == 1)echo "коннект к хосту...";
        $socket = fsockopen($urlp['host'], 80, &$reply, &$replyString);
        @socket_set_timeout($socket, 10);
    } 
    // отправка заголовка
    fputs($socket, $cmd . "\r\n"); 
    //получение ответа
    $lastLine = "\r\n";
    $finished=false;
    $headers=array();
    while ((!$finished)&&(!feof($socket))){
        $str = fgets( $socket, 1024 );
        $finished = ( $str == $lastLine );
        $headers[]=$str; // вот эту
    }
    return $headers;
}
 
Liver, с помощью скрипта выдают ответ в сокетах: Set-Cookie: PHPSESSID=9382613aeaeb8a8211fcdd87c7735997; path=/

Но при хттп анализаторе:
Cookie: __utmz=180800934.1223377650.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); PHPSESSID=867a3802e34104c40edd6c26252df414; __utmc=180800934; __utma=180800934.48600593.1223377650.1223653137.1223657198.18; b=b; hotlog=1; __utmb=180800934
Cookie2: $Version=1
провесь мож чё нетак:
 
Все так. Скрипт отсебятину не гонит. Какой хидер идет с сервера такой и выдает.

Просто те куки что дает хттп анализатор установились ранее на этот домен. Даже идентификатор сессии разный.

На самом деле неважно, что за куки поставил сервер на домен (обычно это просто счетчик, да и сильно похоже на счетчик всякие __utmz), а важно то, что сервер ожидает от браузера.

Это проверить просто. Берем наш супер-мега-комбайн FireFox. Плагин Live HTTP Headers покажет нам какие хидеры туда сюда ходят, а плагин Tamper Data поможет модифицировать запрос на лету.

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

но судя по всему именно то, что идет в хидере при открытии формы и нужно, если нет авторизации и это не поддомен.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху