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

Discussion in 'Песочница' started by je0n, 29 Jan 2011.

  1. je0n

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

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    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 Слепую инъекцию вроде бы уже провел... ВРОДЕ БЫ... Но хочу обычную!
     
    #1 je0n, 29 Jan 2011
    Last edited: 29 Jan 2011
  2. Seravin

    Seravin Active Member

    Joined:
    25 Nov 2009
    Messages:
    475
    Likes Received:
    190
    Reputations:
    221
    а если не url.ru/index.php?search='-- а вот так url.ru/index.php?search=%'+--+
    ошибку покажи
     
  3. je0n

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

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    пробовал - не катит.
    Ошибка, что-то в духе 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 столбцов.
     
  4. Seravin

    Seravin Active Member

    Joined:
    25 Nov 2009
    Messages:
    475
    Likes Received:
    190
    Reputations:
    221
    url.ru/index.php?search=%'+--+)

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