Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Уязвимости Защиты (http://forum.mynuke.ru/forumdisplay.php?f=15)
-   -   PHPNuke Множественные Уязвимости в Модулях (http://forum.mynuke.ru/showthread.php?t=97)

Soniks 05.04.2005 14:21

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

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

Открываем modules/Search/index.php
Находим:
PHP код:
 default:
$ThemeSel get_theme(); 

Ниже добавляем:
PHP код:
 $min intval($min); 


Открываем modules/FAQ/index.php
Находим:
PHP код:
 function ShowFaq($id_cat$categories) {
    global 
$bgcolor2$sitename$prefix$db$module_name;
    
OpenTable(); 

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


Открываем modules/Encyclopedia/index.php
Находим:
PHP код:
 $numrows $db->sql_numrows($result3);
 if (
$numrows == 0) { 

Ниже добавляем:
PHP код:
 $ltr htmlspecialchars($ltr); 

Открываем modules/Your_Account/index.php
Находим:
PHP код:
 if((strtolower($username) == strtolower($cookie[1])) AND ($userinfo[user_password] == $cookie[2])) { 

Выше добавляем:
PHP код:
 if ($username != ''

Открываем banners.php
Находим:
PHP код:
 $name $row['name'];
    
$email $row['email'];
    if (
$email=="") { 

Ниже добавляем:
PHP код:
 $bid htmlspecialchars($bid);
$name htmlspecialchars($name); 


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

Soniks 06.04.2005 01:46

Тут неожиданно обнаружились еще несколько багов, так что и фиксим их.
Открываем banners.php
Находим:
PHP код:
 function EmailStats($login$cid$bid$pass) {
    global 
$prefix$db

Ниже добавляем:
PHP код:
 $cid intval($cid);
$bid intval($bid); 

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

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

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

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

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

Заменяем на:
PHP код:
 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
Найдите:
PHP код:
 include("themes/Ваша_тема/tables.php"); 

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


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

Soniks 07.04.2005 04:40

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

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

Ниже добавляем:
PHP код:
 $username htmlspecialchars($username); 

Найдите:
PHP код:
 function avatarlist($avatarcategory) {
    global 
$module_name;
    @include(
"header.php");
$avatarcatname ereg_replace ("_"" "$avatarcategory); 

Замените:
PHP код:
 function avatarlist($avatarcategory) {
    global 
$user$module_name;
    @include(
"header.php");
    if (
is_user($user)) { 
$avatarcategory htmlspecialchars($avatarcategory);
$avatarcatname ereg_replace ("_"" "$avatarcategory); 

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

Ниже добавьте:
PHP код:
 } else die("Access Denied"); 


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

Ниже добавьте:
PHP код:
 $lid intval($lid); 

Откройте modules/Surveys/index.php
Найдите:
PHP код:
 } elseif($op == "results" && $pollID 0) { 

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



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

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

Soniks 19.04.2005 05:59

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

Замените на:
PHP код:
 $result9 sql_query("SELECT pollID, pollTitle, timeStamp, voters FROM ".$prefix."_poll_desc $queryplang order by voters DESC limit 0,$top"$dbi); 


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

Copyright © 2005 by Soniks