PDA

Просмотр полной версии : mysql inj


j0ze
25.08.2007, 08:14
$qry = "SELECT c.id, c.name, COUNT(q.question) total
FROM {$TBL['category']} c
LEFT JOIN {$TBL['question']} q
ON c.id = q.category_id
WHERE c.parent_id=$parentId <=========
$filter
GROUP BY c.id, c.name
ORDER BY c.rank, c.name";

$rsl = mysql_query($qry) or die(mysql_error());

кто как думает.. возможна ли тут mysql inj если параметр $parentId не фильтруется ???


на всякий случай кидаю запрос который получается и ответ на него

SELECT c.id, c.name, COUNT(q.question) total
FROM odfaq_category c
LEFT JOIN odfaq_question q
ON c.id = q.category_id
WHERE c.parent_id=9999 union select 1,2,3/*
AND (IFNULL(c.active, 'Y') = 'Y'
AND IFNULL(q.active, 'Y') = 'Y')
GROUP BY c.id, c.name
ORDER BY c.rank, c.name


Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

guest3297
25.08.2007, 09:58
Возможен, смотря как фильтруеться...

j0ze
25.08.2007, 13:36
ну там magic_quotes = on
и
if (!($parentId > 0)) die;

т.е. в начале запроса всегда должна быть цифра .. к примеру 9999 union select 1,2,3/*

только вот если подставить 9999 union select 1,2,3/* - получается ошибка

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

The_HuliGun
25.08.2007, 14:07
2 cash
http://bugs.mysql.com/bug.php?id=29421

2 j0ze
Добавив union select 1,2,3/*, ты закоментировал символами /* оставшуюся часть запроса

AND (IFNULL(c.active, 'Y') = 'Y'
AND IFNULL(q.active, 'Y') = 'Y')
GROUP BY c.id, c.name
ORDER BY c.rank, c.name

А в любом справочнике написано, что Sql не позволяет использовать агрегирующие функции (count, min, max) в запросе с выводом более одного поля без групировки (group by), отсюда и ошибка. Так что извини парень, скуля здесь не прокатит.

DIAgen
25.08.2007, 14:42
А в любом справочнике написано, что Sql не позволяет использовать [b]агрегирующие функции (count, min, max) в запросе с выводом более одного поля без групировки (group by), отсюда и ошибка. Так что извини парень, скуля здесь не прокатит.
Не знаю не проверял, а кто мешает в UNION поставить group by...

guest3297
25.08.2007, 14:47
Попробуй не 9999 а существующие значение.
ИМХО Данная функция считает общее кол-во и ставит рамки на min() и max() и в итоге должна получиться слепая иньекция.