PHP: function name(...) { $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 Слепую инъекцию вроде бы уже провел... ВРОДЕ БЫ... Но хочу обычную!
пробовал - не катит. Ошибка, что-то в духе 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 столбцов.
url.ru/index.php?search=%'+--+) а в коде перед return $tab; напиши echo mysql_error(); и напиши какую ошибку выдаст