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 Слепую инъекцию вроде бы уже провел... ВРОДЕ БЫ... Но хочу обычную!
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 Слепую инъекцию вроде бы уже провел... ВРОДЕ БЫ... Но хочу обычную!