Вход

View Full Version : PHPNuke Множественные Уязвимости в Модулях


Soniks
05.04.2005, 14:21
Описание:
В PHPNuke найдены многократные уязвимости, затрагивающей различные модули. Затронутые модули: 'Search', 'FAQ' и 'Encyclopedia'. И так же 'banners.php'. Нападавший может эксплуатировать эти уязвимости, создавая злонамеренную ссылку, содержащую HTML и XSS атаку. При помощи этой уязвимости, злоумышленник может присвоить себе права администратора, так же возможна подстройка куков. Были затронуты PHPNuke 7.6 и предшествующие версии.

Устранение уязвимости:

Открываем modules/Search/index.php
Находим:

default:
$ThemeSel = get_theme();
Ниже добавляем:
$min = intval($min);

Открываем modules/FAQ/index.php
Находим:

function ShowFaq($id_cat, $categories) {
global $bgcolor2, $sitename, $prefix, $db, $module_name;
OpenTable();

Ниже добавляем:
$categories = htmlspecialchars($categories);

Открываем modules/Encyclopedia/index.php
Находим:

$numrows = $db->sql_numrows($result3);
if ($numrows == 0) {
Ниже добавляем:
$ltr = htmlspecialchars($ltr);
Открываем modules/Your_Account/index.php
Находим:
if((strtolower($username) == strtolower($cookie[1])) AND ($userinfo[user_password] == $cookie[2])) {
Выше добавляем:
if ($username != '')
Открываем banners.php
Находим:

$name = $row['name'];
$email = $row['email'];
if ($email=="") {
Ниже добавляем:

$bid = htmlspecialchars($bid);
$name = htmlspecialchars($name);

Уязвимость устранена :cool:

Soniks
06.04.2005, 01:46
Тут неожиданно обнаружились еще несколько багов, так что и фиксим их.
Открываем banners.php
Находим:

function EmailStats($login, $cid, $bid, $pass) {
global $prefix, $db;

Ниже добавляем:

$cid = intval($cid);
$bid = intval($bid);

Проверьте пофиксили ли вы в свое время этот баг
http://forum.mynuke.ru/showthread.php?t=22 (http://forum.mynuke.ru/showthread.php?t=22)
Откройте modules/Web_Links/index.php
Найдите:
function getparent($parentid,$title) {

Выше добавьте:
$ttitle = htmlspecialchars($ttitle);

Откройте modules/Your_Account/index.php
Найдите:
$username = substr("$username", 0,25);

Измените на:
$username = htmlentities(substr("$username", 0,25));

Откройте modules/Surveys/comments.php
Найдите:
function navbar($pollID, $title, $thold, $mode, $order) {
global $user, $bgcolor1, $bgcolor2, $textcolor1, $textcolor2, $anonpost, $pollcomm, $prefix, $db, $module_name;
OpenTable();

Заменяем на:

function navbar($pollID, $title, $thold, $mode, $order) {
global $user, $bgcolor1, $bgcolor2, $textcolor1, $textcolor2, $anonpost, $pollcomm, $prefix, $db, $module_name;
if(function_exists(OpenTable)){
OpenTable();
} else {
echo "Function OpenTable() don't exists";
exit;
}

Открываем themes/Ваша_тема/theme.php
Найдите:
include("themes/Ваша_тема/tables.php");

Замените на:
if(file_exists("themes/Ваша_тема/tables.php")){
include("themes/Ваша_тема/tables.php");
}

И эти баги устранены :breton:

Soniks
07.04.2005, 04:40
Просто не вероятно, еще найдены уязвимости, фиксим их

Открываем modules/Your_Account/index.php
Находим:
function mail_password($username, $code) {
global $sitename, $adminmail, $nukeurl, $user_prefix, $db, $module_name;
$username = substr($username, 0, 25);

Ниже добавляем:
$username = htmlspecialchars($username);
Найдите:

function avatarlist($avatarcategory) {
global $module_name;
@include("header.php");
$avatarcatname = ereg_replace ("_", " ", $avatarcategory);

Замените:

function avatarlist($avatarcategory) {
global $user, $module_name;
@include("header.php");
if (is_user($user)) {
$avatarcategory = htmlspecialchars($avatarcategory);
$avatarcatname = ereg_replace ("_", " ", $avatarcategory);

Найдите:
$d->close();
CloseTable();
@include("footer.php");

Ниже добавьте:

} else die("Access Denied");


Откройте modules/Downloads/index.php
Найдите:
function outsidedownloadsetup($lid) {
global $module_name, $sitename, $nukeurl;

Ниже добавьте:
$lid = intval($lid);
Откройте modules/Surveys/index.php
Найдите:
} elseif($op == "results" && $pollID > 0) {

Ниже добавьте:
if (isset($tid)) {
Header("Location: modules.php?name=$module_name");
}

И самое главное!!
откройте фаил mainfile.php и после <?php ниже добавьте
error_reporting(0);

тем самым вы запретите вывод любых ошибок на сайте, что предотвратит выявления полного пути к вашей дирректории!

Soniks
19.04.2005, 05:59
Описание:
Найдена критическая уязвимость в модуле Top PHP-Nuke 7.6 (и ниже). Была допущена ошибка в названии переменной, в замен $queryplang в базу добавлялась переменнвя $querylang (отличие одной буквой "p"), которая была не определена не кем и не чем и следовательно не проверялась.
Данная уязвимость позволяет злоумышленнику выполнить sql-инъекцию.
Устраняем уязвимость:
Откройте modules/Top/index.php
Найдите:
$result9 = sql_query("SELECT pollID, pollTitle, timeStamp, voters FROM ".$prefix."_poll_desc $querylang order by voters DESC limit 0,$top", $dbi);
Замените на:
$result9 = sql_query("SELECT pollID, pollTitle, timeStamp, voters FROM ".$prefix."_poll_desc $queryplang order by voters DESC limit 0,$top", $dbi);