Инъекция в Order By

Discussion in 'Уязвимости' started by ty13r, 10 Jun 2008.

  1. ty13r

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

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

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    выложи всю строку с запросом включительно из исходника
     
  3. Dr.Z3r0

    Dr.Z3r0 Leaders of the World

    Joined:
    6 Jul 2007
    Messages:
    284
    Likes Received:
    595
    Reputations:
    567
    Такс берем мою https://forum.antichat.ru/thread43966.html стататью в руки и пролистываем до пункта 3.4 Иньекция после ORDER BY и читаем:


    PS пропарил насчет одной записи в таблице... соответственно выше написанное работать не будет. Как и вообще это безнадежный случай.
     
    #3 Dr.Z3r0, 10 Jun 2008
    Last edited: 31 May 2011
  4. ty13r

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

    Joined:
    18 Jul 2007
    Messages:
    39
    Likes Received:
    2
    Reputations:
    0
    Code:
    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