Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   StressWeb 8 (https://forum.antichat.xyz/showthread.php?t=226694)

RedX 29.08.2010 07:49

Собственно не так давно появилась тема с указанием уязвимости, но я не как не могу раскрутить саму уязвимость, помогите кто может?

Цитата:

Сообщение от None
Собственно, набрел случайно на данный кусочек кода. Очень удобное место для проведения +union+select запроса.
Адрес уязвимости: /engine/forget.php
Проверена на: 8.0, 8.0+
Уязвимый участок кода:
Код:

Code:
elseif (isset($_POST["submit_lost"]) && isset($_POST["step2"]))
{
    $lost_l2answer = $_POST["lost_l2answer"];
    $lost_l2login = $_POST["step2"];
    list($lost_l2answer_db, $_l2email) = $ldb->fetch_array($ldb->query("SELECT `l2answer`,`l2email` FROM `accounts` WHERE `login`='{$lost_l2login}' LIMIT 0,1"));
    if ($lost_l2answer != $lost_l2answer_db)
    {
        $error_lost = "Обнаружены следующие ошибки:
Ответ на секретный вопрос не верный!";
    }
    else
    {
        $lost_l2answer = false;
        $tmp_pass = "user" . _code_generate(6);
        $tmp_pass_encode = pass_encode($tmp_pass);
        $ldb->query($ldb->_parse_query($qList[$l2db_ls]["setPassword"], array("pass" => $tmp_pass_encode, "login" => $lost_l2login)));
        if ($ldb->affectedrows() == 1)
        {
            if ($config["site"]["forget"]["method"] == 1 && $_l2email != "null@null" && $_l2email != "")
            {
                $_host = $_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : @getenv('HTTP_HOST');
                $mail_subject = "Восстановление пароля";
                $mail_message = На ваш E-Mail адрес, указанный при регистрации, было отправлено уведомление с новым паролем.";
                }
                else
                {
                    $error_lost = "Обнаружены следующие ошибки:
Письмо не было отправлено! Попробуйте позже или обратитесь к Администрации.";
                }
            }
            else
            {
                $error_lost = "Уважаемый посетитель! Согласно Вашему запросу для Вас был сгенерирован новый пароль. Для входа на сайт используйте следующие данные:
Логин: {$lost_l2login}
Пароль: {$tmp_pass}
После авторизации на сайте вы сможете изменить данный пароль на любой другой.";

            }
        }
        else
        {
            $error_lost = "Ошибка базы данных! Попробуйте позже.";
        }
    }
}

Уязвимая переменная(не фильтруется) :
Цитата:

Сообщение от None
$lost_l2login = $_POST["step2"];

Используется в SQL-запросе:
Цитата:

Сообщение от None
list($lost_l2answer_db, $_l2email) = $ldb->fetch_array($ldb->query("SELECT `l2answer`,`l2email` FROM `accounts` WHERE `login`='{$lost_l2login}' LIMIT 0,1"));


" if author else f"
Цитата:

Собственно, набрел случайно на данный кусочек кода. Очень удобное место для проведения +union+select запроса.
Адрес уязвимости: /engine/forget.php
Проверена на: 8.0, 8.0+
Уязвимый участок кода:
Код:

Code:
elseif (isset($_POST["submit_lost"]) && isset($_POST["step2"]))
{
    $lost_l2answer = $_POST["lost_l2answer"];
    $lost_l2login = $_POST["step2"];
    list($lost_l2answer_db, $_l2email) = $ldb->fetch_array($ldb->query("SELECT `l2answer`,`l2email` FROM `accounts` WHERE `login`='{$lost_l2login}' LIMIT 0,1"));
    if ($lost_l2answer != $lost_l2answer_db)
    {
        $error_lost = "Обнаружены следующие ошибки:
Ответ на секретный вопрос не верный!";
    }
    else
    {
        $lost_l2answer = false;
        $tmp_pass = "user" . _code_generate(6);
        $tmp_pass_encode = pass_encode($tmp_pass);
        $ldb->query($ldb->_parse_query($qList[$l2db_ls]["setPassword"], array("pass" => $tmp_pass_encode, "login" => $lost_l2login)));
        if ($ldb->affectedrows() == 1)
        {
            if ($config["site"]["forget"]["method"] == 1 && $_l2email != "null@null" && $_l2email != "")
            {
                $_host = $_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : @getenv('HTTP_HOST');
                $mail_subject = "Восстановление пароля";
                $mail_message = На ваш E-Mail адрес, указанный при регистрации, было отправлено уведомление с новым паролем.";
                }
                else
                {
                    $error_lost = "Обнаружены следующие ошибки:
Письмо не было отправлено! Попробуйте позже или обратитесь к Администрации.";
                }
            }
            else
            {
                $error_lost = "Уважаемый посетитель! Согласно Вашему запросу для Вас был сгенерирован новый пароль. Для входа на сайт используйте следующие данные:
Логин: {$lost_l2login}
Пароль: {$tmp_pass}
После авторизации на сайте вы сможете изменить данный пароль на любой другой.";

            }
        }
        else
        {
            $error_lost = "Ошибка базы данных! Попробуйте позже.";
        }
    }
}

Уязвимая переменная(не фильтруется) :
Цитата:

Сообщение от None
$lost_l2login = $_POST["step2"];

Используется в SQL-запросе:
Цитата:

Сообщение от None
list($lost_l2answer_db, $_l2email) = $ldb->fetch_array($ldb->query("SELECT `l2answer`,`l2email` FROM `accounts` WHERE `login`='{$lost_l2login}' LIMIT 0,1"));



v1d0qz 04.09.2010 02:17

Она уже существует довольно таки давно ..

/showpost.php?p=2066226&postcount=55


Время: 08:39