Компьютер для продвинутых пользоватлей Выпус по безопасности. Ошибка в phpNuke.
Компьютер для продвинутых
пользователей
Содержание:
phpNuke
ПО: phpNuke
Версии: 6.0 - 7.8
О программе:
PHP-Nuke - новая автоматизированная система, специализированная для
дизайнеров для использования в Интранете и Интернете. Администратор
получает полный контроль над своим web-сайтом, регистрацией
пользователей, и использованием блоков для заголовка, утилит для
обслуживания и 100% интерактивности web-сайта.
Уязвимость:
Потенциально уязвимый XSS баг найден в phpNuke. Все версии с 6.0 и до
7.2 подвержены заражению. Версия 7.9 не тестировалась на баг, но
возможно ошибка содержится и в ней. Как и при выборе любых XSS ошибок,
эта имеет множество путей использования, например похищения cookies.
Детали:
Как обычно в phpNuke мире, проблема находится в переменной -
"$pagetitle". Это глобальная переменная используется для перемещения
заголовка страницы в модуль рабочего кода, находящегося в функции
"head()" в файле "header.php".
Просмотрим листинг ресурса header.php:
<@--
function head() {
global $slogan, $sitename, $banners, $nukeurl, $Version_Num,
$artpage, $topic,
$hlpfile, $user, $hr, $theme, $cookie, $bgcolor1, $bgcolor2, $bgcolor3,
$bgcolor4,
$textcolor1, $textcolor2, $forumpage, $adminpage, $userpage,
$pagetitle;
include("includes/ipban.php");
$ThemeSel = get_theme();
include("themes/$ThemeSel/theme.php");
echo "\n";
echo "\n";
echo "test".
и мы видим, что html-инъекция возможна.
Теперь переходим к трудной части - как вставить скрипт в код? phpNuke
использует некоторые анти-XSS фильтры против инъекций, прямая атака
через "" и другие обычные теги не пройдет. Так, как обычно,
можно поискать пути обхода фильтра и после мы имеем некоторое время для
осуществления инъекций, я нахожу возможность:
http://localhost/nuke78/?pagetitle=kala
Этот метод был протестирован на трех браузерах - IE 6.0, Firefox 1.5.0.1
и Opera 8.51. Причем фильтры был обойден.
Способ защиты:
Перепишите код в "mainfile.php":
$pagetitle = '';
Это устранит недостатки.