mysql inj

Discussion in 'PHP' started by j0ze, 25 Aug 2007.

  1. j0ze

    j0ze New Member

    Joined:
    6 Oct 2006
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    PHP:
    $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
     
  2. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Возможен, смотря как фильтруеться...
     
  3. j0ze

    j0ze New Member

    Joined:
    6 Oct 2006
    Messages:
    7
    Likes Received:
    1
    Reputations:
    0
    ну там 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
     
  4. The_HuliGun

    The_HuliGun Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    191
    Likes Received:
    84
    Reputations:
    11
    2 cash
    http://bugs.mysql.com/bug.php?id=29421

    2 j0ze
    Добавив union select 1,2,3/*, ты закоментировал символами /* оставшуюся часть запроса
    PHP:
     AND (IFNULL(c.active'Y') = 'Y' 
    AND IFNULL(q.active'Y') = 'Y')
    GROUP BY c.idc.name
    ORDER BY c
    .rankc.name
    А в любом справочнике написано, что Sql не позволяет использовать агрегирующие функции (count, min, max) в запросе с выводом более одного поля без групировки (group by), отсюда и ошибка. Так что извини парень, скуля здесь не прокатит.
     
  5. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460

    Не знаю не проверял, а кто мешает в UNION поставить group by...
     
  6. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Попробуй не 9999 а существующие значение.
    ИМХО Данная функция считает общее кол-во и ставит рамки на min() и max() и в итоге должна получиться слепая иньекция.