Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Уязвимости Защиты (http://forum.mynuke.ru/forumdisplay.php?f=15)
-   -   XSS уязвимость в PHP-NUKE 6.x-7.6 (http://forum.mynuke.ru/showthread.php?t=11)

Soniks 16.02.2005 23:15

XSS уязвимость в PHP-NUKE 6.x-7.6
 
Появилась новая уязвимость в PHP-NUKE 6.x-7.6



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

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

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

http://[target]/nuke75/modules....wnloadshowdays=[xss code here]

http://[target]/nuke75/modules....&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....loads&d_op=menu

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

Soniks 16.02.2005 23:35

Устраняем неполадку :) :
Для начала откройте фаил db/db.php, в самом начале увидите код:
PHP код:
 global $forum_admin
if (
$forum_admin == 1) { 
    
$the_include "../../../db"
} elseif (
$inside_mod == 1) { 
    
$the_include "../../db"
} else { 
    
$the_include "db"


Немного изменим код и кое-что удали, в результате получи такой код:
PHP код:
 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 увидите код:
PHP код:
 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 { 


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


Теперь перейдем к downloads модулю, откройте modules/Downloads/index.php и приблизительно на строке 2354 найдите код:
PHP код:
 switch($d_op) { 
 
    case 
"menu"
    
menu($maindownload); 
    break; 
 
    case 
"AddDownload"
    
AddDownload(); 
    break; 

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


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

if (isset(
$show)) { 
    
$show intval($show); 


И замените на:
PHP код:
 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 строке следующий код:
PHP код:
 switch($l_op) { 
 
    case 
"menu"
    
menu($mainlink); 
    break; 
 
    case 
"AddLink"
    
AddLink(); 
    break; 

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


Теперь переместитесь в начало файла, найдите код:
PHP код:
 get_lang($module_name); 
$pagetitle "- "._WEBLINKS.""
require_once(
"modules/Web_Links/l_config.php"); 
 
function 
getparent($parentid,$title) { 
    global 
$prefix$db

И замените его на:
PHP код:
 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


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


Часовой пояс GMT +4, время: 21:23.

Copyright © 2005 by Soniks