![]() |
Danneo CMS <= 0.5.2 Remote SQL-injection
Danneo CMS - одна из самых успешных русских CMS с открытым исходным кодом. По своему опыту могу сказать, что в рунете довольно распространена. Однажды уже находил баги в этой CMS, но с выходом версии 0.5.2 (последняя на данный момент) их устранили.
Новая обнаруженная уязвимость находится в модуле голосований при добавлении комментариев. Уязвимый код (/mod/poll/comment.php@124-130): PHP код:
Однако реализация уязвимости затрудняется фильтром (/base/danneo.track.php): PHP код:
(/base/danneo.function.php): PHP код:
переменные $comname, $comtitle, $comtext будут экранироваться при magic_quotes_gpc=on, так как они извлекаются не из глобальных массивов с отчищенными входящими данными, а из локального пространства. Это происходит, так как extract() предшествует stripslashesall(). Несмотря на экранирование, уязвимость можно реализовать при следующих значениях: $comname a-z значение от 5 символов до 10 $comtitle 254 символа + кавычка $comtext /*%00*/, (SELECT adpwd FROM dn052_admin LIMIT 1), 1)-- - В итоге, конечный запрос будет таким: Цитата:
Для предотвращения возникновения ошибки синтаксиса нулл-байт (заметьте, здесь он уже подвергся экранированию) заключается между символами комментариев /* */. В итоге при показе комментариев к голосованию в поле текста появляется значение md5 хэша админа. Также можно получить идентификатор сессии администратора, если он авторизован и время жизни сессии еще не истекло: $comtext /*%00*/, (SELECT hash FROM dn052_admin_sess LIMIT 1), 1)-- - Префикс таблицы можно узнать, если в настройках CMS включен debug-режим для MySQL. Для этого необходимо вызвать преднамеренную ошибку синтаксиса. При magic_quotes_gpc=off в $comtitle кавычку необходимо заменить на \, а 254 символа можно вообще убрать. В итоге запрос будет таким (необходимо указывать капчу): Код:
POST /index.php?dn=poll HTTP/1.0/index.php?re=%00 Greetz to Elekt! |
Danneo CMS 0.5.3
Сайт http://danneo.com/down/open/CMS_Danneo_0_5_3.html
Нашел /mod/subscribe/index.php __LINE__ 110: $db->query("INSERT INTO ".$basepref."_subscribe_users VALUES (NULL,'$subname','$submail','$subformat','$sa','0','".NEWTIME."')"); и много еще подобного, но /base/danneo.track.php ужасен :( ибо PHP код:
У кого что есть еще? |
Вроде нашел блинд...
PHP код:
|
| Время: 07:40 |