Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl и форум SMF, Авторизация 
V
    Опции темы
OutlawZ
Дата 22.10.2010, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



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

use LWP::UserAgent;
#Получаем данные с страницы

my ($user_a, $request, $result );

$user_a = LWP::UserAgent->new();
$request = HTTP::Request->new(POST => 'http://site/index.php?action=login2');
$request->content('user=login&passwrd=password&cookielength=60');
$result = $user_a->request($request);
if ($result->is_success) {
 print $result->content;
}


Автоматизироваться не получилось, потом решил посмотреть какой HTTP запрос отравляется:
Код

POST http://cyber-police-community.ru/index.php?action=login2 HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://cyber-police-community.ru/index.php?action=login2
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: cyber-police-community.ru
Content-Length: 97
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: PHPSESSID=ad9db49f1d1fba5c4df99798535f57c5

user=login&passwrd=*********&cookielength=60&hash_passwrd=146a3d9db139d60d6b1ffee27795224b86809b06


Тут добавляется еще один параметр hash_passwrd посмотрев в исходник форума видно что тут еще работает Javascript нашел в нем функцию которая используется для получения хеша:
Код

function hashLoginPassword(doForm, cur_session_id)
{
    // Compatibility.
    if (cur_session_id == null)
        cur_session_id = smf_session_id;

    if (typeof(hex_sha1) == "undefined")
        return;
    // Are they using an email address?
    if (doForm.user.value.indexOf("@") != -1)
        return;

    // Unless the browser is Opera, the password will not save properly.
    if (typeof(window.opera) == "undefined")
        doForm.passwrd.autocomplete = "off";
    window.open(document.write(
    doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);

    // It looks nicer to fill it with asterisks, but Firefox will try to save that.
    if (navigator.userAgent.indexOf("Firefox/") != -1)
        doForm.passwrd.value = "";
    else
        doForm.passwrd.value = doForm.passwrd.value.replace(/./g, "*");
}


Видно что кодируется все sh1 два раза во втором годирование прибавляется лониг пароль и сессия.
Стало ясно что переписывать сей алгоритм вообще нет смысла а лучше использовать тот же javascript только вот проблема как лучше передать данные из CGI скрипта Javasctip`у что потом отослать в форме уже сгенерированное значение? 

Это сообщение отредактировал(а) OutlawZ - 22.10.2010, 03:34


--------------------
user posted image
user posted image
PM MAIL   Вверх
Jimy
Дата 22.10.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Цитата

Стало ясно что переписывать сей алгоритм вообще нет смысла

Ну а что там переписывать? Там суть алгоритма заключается всего в одной строчке
Код

doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);


А передать в JavaScript можно только если скрипт будет запускаться запросом из браузера.
PM   Вверх
OutlawZ
Дата 22.10.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Если не трудно можно пример?


--------------------
user posted image
user posted image
PM MAIL   Вверх
Jimy
Дата 22.10.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Пример чего?
PM   Вверх
OutlawZ
Дата 23.10.2010, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата

А передать в JavaScript можно только если скрипт будет запускаться запросом из браузера. 


Пример сего.


--------------------
user posted image
user posted image
PM MAIL   Вверх
MaXL
Дата 23.10.2010, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



Цитата

как лучше передать данные из CGI скрипта Javasctip`у

что ?
помойму лучше написать на Perl генерацию хэша пароля. код на JavaScript'е у вас есть.
в чём проблема ?


--------------------
MaXL
PM MAIL   Вверх
OutlawZ
Дата 23.10.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Я бы с радостью если понял тока несколько вещей:
Код

<form action="https://server/index.php?action=login2" method="post" accept-charset="UTF-8" name="frmLogin" id="frmLogin" onsubmit="hashLoginPassword(this, '3c136295de545599350428bd23f974d7');">
            <table border="0" cellspacing="0" cellpadding="3" class="tborder" align="center">
                <tr class="catbg">
                    <td>Внимание!</td>
                </tr><tr>
                    <td class="windowbg" style="padding-top: 2ex; padding-bottom: 2ex;">
                        Только зарегистрированные пользователи имеют доступ в этот раздел.<br />
                        Пожалуйста, войдите или <a href="https://server/index.php?action=register">зарегистрируйтесь</a>
                </td>
                </tr><tr class="titlebg">
                    <td><img src="https://server/Themes/coru/images/icons/login_sm.gif" alt="" align="top" /> Войти</td>
                </tr><tr>
                    <td class="windowbg">
                        <table border="0" cellpadding="3" cellspacing="0" align="center">
                            <tr>
                                <td align="right"><b>Имя пользователя:</b></td>
                                <td><input type="text" name="user" size="20" /></td>
                            </tr><tr>
                                <td align="right"><b>Пароль:</b></td>

                                <td><input type="password" name="passwrd" size="20" /></td>

                            </tr><tr>

                                <td align="right"><b>Продолжительность сессии (в минутах):</b></td>

                                <td><input type="text" name="cookielength" size="4" maxlength="4" value="60" /></td>

                            </tr><tr>

                                <td align="right"><b>Запомнить:</b></td>

                                <td><input type="checkbox" name="cookieneverexp" class="check" onclick="this.form.cookielength.disabled = this.checked;" /></td>

                            </tr><tr>

                                <td align="center" colspan="2"><input type="submit" value="Войти" style="margin-top: 2ex;" /></td>

                            </tr><tr>

                                <td align="center" colspan="2" class="smalltext"><a href="https://server/index.php?action=reminder">Забыли пароль?</a><br /><br /></td>

                            </tr>

                        </table>

                    </td>

                </tr>

            </table>



            <input type="hidden" name="hash_passwrd" value="" />

        </form>



Дело в том что когда функция генерить значение она получает значение PHPSID который выдает сервер или скрипт при коннекте:
Cookie: PHPSESSID=ad9db49f1d1fba5c4df99798535f57c5 это значение попадает функцию что видно в форме: hashLoginPassword(this, 'ad9db49f1d1fba5c4df99798535f57c5'). С этим проблем нет, это значение получить не проблем, вот не как не помогу понять алгоритм генерации хеша, для передачи его в дальний путь:

Код

doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);


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


--------------------
user posted image
user posted image
PM MAIL   Вверх
OutlawZ
Дата 7.4.2011, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Нашел в чем проблема, не установил просто модуль SSL для работы с https.


--------------------
user posted image
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.