PDA

View Full Version : XSS уязвимость в PHP-NUKE 6.x-7.6


Soniks
16.02.2005, 23:15
Появилась новая уязвимость в PHP-NUKE 6.x-7.6



Описание:
Уязвимость позволяет злоумышленнику произвести XSS нападение и получить доступ к важным данным пользователей.

Уязвимость существует в модуле Downloads при обработке параметра newdownloadshowdays и модуле Web_Links при обработке параметра newlinkshowdays. Злоумышленник может с помощью специально сформированного URL выполнить произвольный HTML сценарий в браузере целевого пользователя в контексте безопасности уязвимого сайта. Злоумышленник может получить данные об установочной директории приложения.

Пример/Эксплоит:

http://[target]/nuke75/modules.php?name=Downloads&d_op=NewDownloads&newdownloadshowdays=[xss code here]

http://[target]/nuke75/modules.php?name=Web_Links&l_op=NewLinks& newlinkshowdays=[xss code here]

http://[target]/nuke75/db/db.php

http://[target]/nuke75/index.php?inside_mod=1

http://[target]/nuke75/modules.php?name=Downloads&d_op=menu

http://[t arget]/nuke75/modules.php?name=Web_Links&l_op=menu

Soniks
16.02.2005, 23:35
Устраняем неполадку :) :
Для начала откройте фаил db/db.php, в самом начале увидите код:

global $forum_admin;
if ($forum_admin == 1) {
$the_include = "../../../db";
} elseif ($inside_mod == 1) {
$the_include = "../../db";
} else {
$the_include = "db";
}

Немного изменим код и кое-что удали, в результате получи такой код:

if (eregi('db.php',$_SERVER['PHP_SELF']))
{
die('Direct access not allowed!');
}

global $forum_admin;
if ($forum_admin == 1) {
$the_include = "../../../db";
} else {
$the_include = "db";
}


Дальше открываем фаил mainfile.php и приблизительно на строке 100 увидите код:
if ($forum_admin == 1) {
require_once("../../../config.php");
require_once("../../../db/db.php");
} elseif ($inside_mod == 1) {
require_once("../../config.php");
require_once("../../db/db.php");
} else {

Удаляем не нужнуя часть и в результате получим:
if ($forum_admin == 1) {
require_once("../../../config.php");
require_once("../../../db/db.php");
} else {

Теперь перейдем к downloads модулю, откройте modules/Downloads/index.php и приблизительно на строке 2354 найдите код:

switch($d_op) {

case "menu":
menu($maindownload);
break;

case "AddDownload":
AddDownload();
break;

удаляем вредоносный кейс "menu" и получаем:
switch($d_op) {

case "AddDownload":
AddDownload();
break;


Теперь давайте устраним брешь в переменной "newdownloadshowdays" в том же файле, в самом начале, найдите код:
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}
if (isset($show)) {
$show = intval($show);
}

И замените на:
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}
if (isset($show)) {
$show = intval($show);
}

if(isset($newdownloadshowdays))
{
$newdownloadshowdays = min(max(intval($newdownloadshowdays),1),30);
}
Теперь перейдем к модулю Web Links, откройте фаил modules/Web_Links/indeks.php и найдите приблизительно 2095 строке следующий код:
switch($l_op) {

case "menu":
menu($mainlink);
break;

case "AddLink":
AddLink();
break;
Так же как и в даунлоде удаляем кейс "menu":
switch($l_op) {

case "AddLink":
AddLink();
break;

Теперь переместитесь в начало файла, найдите код:
get_lang($module_name);
$pagetitle = "- "._WEBLINKS."";
require_once("modules/Web_Links/l_config.php");

function getparent($parentid,$title) {
global $prefix, $db;
И замените его на:
get_lang($module_name);
$pagetitle = "- "._WEBLINKS."";
require_once("modules/Web_Links/l_config.php");

if(isset($newlinkshowdays))
{
$newlinkshowdays = min(max(intval($newlinkshowdays),1),30);
}

function getparent($parentid,$title) {
global $prefix, $db;


Все баг устранен и исправлен )))