PDA

Просмотр полной версии : недоSQLi. Нужна помощь в реализации SQLi


je0n
29.01.2011, 06:18
PHP:
functionname(...)

{

$search='';

if(JRequest::getVar('search','0','','string')!='0' ){

$search=" AND CONCAT(i.name,i.intro_desc,i.description) LIKE '%".JRequest::getVar('search','0','string')."%' ";

}

$query="(SELECT i.*, c.name AS c_name FROM #__table_ items i, #__table_categories c WHERE i.cat_id = c.id AND i.date_exp > '".$date[0]."' AND i.published = 1 ".$search.$user_items." ORDER BY i.special DESC, ".$ord.")";

$tab=$this->_getList($query,$limitstart,$limit);

return$tab;

}



Это кусок кода из комонента жумлы. Я плохо догоняю, как исполняется этот скуль запрос. Т.е. мне не ясно это: $tab = $this->_getList($query, $limitstart, $limit);

Все что накопал по этой процедуре (_getList()) - это то, что она делает запрос к БД и возвращает результат в массиве. Еще было написано, что она защишенная. Почему запрос $query в скобочках?

В данном коде инъекция, вроде бы работает, но очень странно. Если я инжектирую оставляя целостность запроса, то все работает! Если пытаюсь обрезать часть запроса - то уже ничего не работает.

Пример:

передаю через браузер такой параметр search:


Code:
url.ru/index.php?search='+or+i.name+like+'%jamie

Выводит все записи!

Этот запрос:


Code:
url.ru/index.php?search='+and+i.name+like+'%jamie

выводит только одну строку таблицы, в поле name которой есть слово jamie.

То есть инъекция какбэ прокатывает, а вот вывести нужные мне данные не могу, т.к. если делаю так:


Code:
url.ru/index.php?search='--

выдает ошибку, а по моему плану должно вывести все поля таблицы!

Я пологаю, что это функция getList что-то исполняет, но что понять не могу и в сети не смог найти описания, чтоже она конкретно делает.

Помогите провести инъекцию с выводом тех данных, что я хочу. Хотя бы слепую инъекцию, если это вообще возможно в данном примере

ADDED Слепую инъекцию вроде бы уже провел... ВРОДЕ БЫ... Но хочу обычную!

Seravin
29.01.2011, 17:26
а если не url.ru/index.php?search='-- а вот так url.ru/index.php?search=%'+--+

ошибку покажи

je0n
30.01.2011, 14:17
пробовал - не катит.

Ошибка, что-то в духе not suplied argument in foreach()...

короче ничего не выходит, мне кажется, из-за скобочек, в которые взят запрос:


Code:
$query = "(SELECT i.*, c.name AS c_name FROM #__table_items i, #__table_categories c WHERE i.cat_id = c.id AND i.date_exp > '".$date[0]."' AND i.published = 1 ".$search.$user_items." ORDER BY i.special DESC, ".$ord.")";

Все мои попытки по его обрезанию не удались. Короче, т.к. обрезать мне его удается, то я решил подстроется под него. Для слепой инъекции подстроится легко, и вот для обычной до сих не допру как! Не удается сделать синоним для таблицы под буквой i в запросе после union select(как в самом запросе). Когда просто запрос сую в пхпмайадмин говорит, что нет такого объекта как i.specials.

Мне кажется, что я просто плохо знаю праила mySQL и тупо не могу составить такой сложный запрос. Если кто сможет помочь с запросом, то там 20 столбцов.

Seravin
30.01.2011, 15:10
url.ru/index.php?search=%'+--+)

а в коде перед return $tab; напиши echo mysql_error(); и напиши какую ошибку выдаст