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=684)

Soniks 20.10.2005 19:38

PHPNuke Удаленный Доступ К Дириктории
 
Продукт: PHP-Nuke

Версия: 7.8 - 7.9 + patch 3.1

Затронуты файлы: modules.php

Описание уязвимости:
Вышедший в свет фикс-патч версии 3.1 от http://www.nukeresources.com/
исправляет в PHP-Nuke не только найденные ошибки, а как уже не однократно было замечено и создает новые бреши в коде, что позваляет хаккеру выполнить нападение на сайт! Что больше всего поражает данная уязвимость уже была пофиксина в самой php-nuke на стадии 7.0 версии, а авторы данного патча по причине не знания php или же из за невнимательности, разграничили права на переменную $files, $mop и $name. Вот часть кода обычной php-nuke 7.8:
PHP код:
 ...
  if (
ereg("\.\.",$name) || ereg("\.\.",$file) || ereg("\.\.",$mop)) {
   echo 
"You are so cool...";
  } else {
... 

что в принципе уже запрещало выход из директории modules
А вот код патча 3.1:
PHP код:
 ....
  if (
stripos_clone($name"..") OR ((stripos_clone($modstring,"&file=nickpage") || stripos_clone($modstring,"&user=")) AND ($name=="Private_Messages" OR $name=="Forums" OR $name=="Members_List"))) header("Location: index.php");
....
if (!isset(
$file) OR $file != $_REQUEST['file']) $file="index";
if (
stripos_clone($file,"..") OR stripos_clone($mop,"..")) die("You are so cool...");
..... 

в результате этого идет проверка на вхожден строки начнаю не с символов ..
А этого уже достаточно что бы перейти в другой раздел на сервере используя следующий вызов:
&file=../../../../../../../../../etc/passwd

Устранение:
Вернем все как было, это самый разумный способ:
PHP код:
 if (ereg("\.\."$name) OR ((stripos_clone("&file=nickpage",$modstring) || stripos_clone("&user=",$modstring)) AND ($name=="Private_Messages" OR $name=="Forums" OR $name=="Members_List"))) header("Location: index.php"); 

и
PHP код:
 if (ereg("\.\.",$name) || ereg("\.\.",$file) || ereg("\.\.",$mop)) {
 die(
"You are so cool...");
    } 

можете сверить с предыдущей версией патча.


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

Copyright © 2005 by Soniks