Передача пароля

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

Базовая ссылка для запросов: https://sgo.egov66.ru/webapi

Итак, авторизация происходит в два этапа. На первом отправляется пустой запрос по адресу /auth/getdata. В ответ прилетает JSON, примерно такой:

{
    "lt": 1062826537,
    "ver": 716938095,
    "salt": 32591442154
}

На втором этапе формируется запрос на авторизацию, в POST запросе следующие поля:

$body = [
        "LoginType" => "1",     // кто: организация\управление
        "cid" => "2",           // кто: ID организации
        "sid" => "66",          // где: регион
        "pid" => "-3",          // где: район
        "cn" => "3",            // где: город
        "sft" => "2",           // кто: тип организации
        "scid" => "57",         // кто: ID школы
        "UN" => $username,
        "PW" => $PW,
        "lt" => $lt_from_getData,
        "pw2" => $password_hash,
        "ver" => $ver_from_getData
    ];

Ну и немного заголовков:

$headers = array(
    "Accept: application/json",
    "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
);

И собственно пароль отправляется на /login:

$curl = curl_init($base . "/login");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$resp = curl_exec($curl);
curl_close($curl);

Но, в ответ прилетает:

{
    "message":"Object reference not set to an instance of an object.",
    "details":null
}

А должно:

{
    "message":"Неправильный пароль или имя пользователя",
    "details":null
}

Хэш для pw2 генерируется вот так:

$pw2 = md5($salt.md5($pass));

И он полностью совпадает с хэшем, отдаваемым на сайте.

Но, вот что такое PW в запросе - загадка (для меня дак точно). Единственное, что знаю - длина строки совпадает с длиной пароля. Я подозреваю, что это случайная строка определенной длины, но поскольку не могу авторизоваться, я уже начинаю в этом сомневаться.

Ну или второй возможный вариант - это неверное указание заголовков запроса.

Помогите разрешить ситуацию и пара учителей вам будет очень благодарна))


Ответы (1 шт):

Автор решения: Бонифаций Лав

По крайней мере сейчас PW - первые символы в md5 хэше по длине пароля.

Например: Пароль - 123123
Хэш - b7g84f7gi48f...

В таком случае PW - b7g84f

Надеюсь помог

→ Ссылка