PDA

Просмотр полной версии : StressWeb 8


RedX
29.08.2010, 07:49
Собственно не так давно появилась тема (http://tinyurl.com/2eeq9c9) с указанием уязвимости, но я не как не могу раскрутить саму уязвимость, помогите кто может?


Собственно, набрел случайно на данный кусочек кода. Очень удобное место для проведения +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 = "Ошибка базы данных! Попробуйте позже.";
}
}
}

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

$lost_l2login = $_POST["step2"];


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

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 = "Ошибка базы данных! Попробуйте позже.";
}
}
}

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

$lost_l2login = $_POST["step2"];


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

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