PDA

View Full Version : Инклюдинг локальных файлов в PHP-Nuke


Soniks
15.03.2007, 13:51
Продукт: PHP-Nuke
Версия: 8.0 и ниже
Описание:
Уязвимость позволяет удаленному пользователю получить доступ к важным данным на системе. Уязвимость существует из-за недостаточной обработки входных данных в параметре куки файла "lang" в сценарии mainfile.php. Удаленный пользователь может просмотреть произвольные файлы на системе (и не только просмотреть!). Для успешной эксплуатации уязвимости требуется, чтобы на системе опция "magic_quotes_gpc" была отключена.

Источник: http://www.securitylab.ru

Устранение:

Открываем mainfile.php
Находим (318 строка):
if (isset($newlang) AND !stripos_clone($newlang,".")) {
if (file_exists("language/lang-".$newlang.".php")) {
setcookie("lang",$newlang,time()+31536000);
include_once("language/lang-".$newlang.".php");
$currentlang = $newlang;
} else {
setcookie("lang",$language,time()+31536000);
include_once("language/lang-".$language.".php");
$currentlang = $language;
}
} elseif (isset($lang)) {
include_once("language/lang-".$lang.".php");
$currentlang = $lang;
} else {
Заменяем на:
if (isset($_GET['newlang']) AND eregi('^[a-z0-9]+$',$_GET['newlang'])) {
if (file_exists("language/lang-".$_GET['newlang'].".php")) {
setcookie("lang",$_GET['newlang'],time()+31536000);
include_once("language/lang-".$_GET['newlang'].".php");
$currentlang = $_GET['newlang'];
} else {
setcookie("lang",$language,time()+31536000);
include_once("language/lang-".$language.".php");
$currentlang = $language;
}
} elseif (isset($_COOKIE['lang']) AND eregi('^[a-z0-9]+$',$_COOKIE['lang'])) {
include_once("language/lang-".$_COOKIE['lang'].".php");
$currentlang = $_COOKIE['lang'];
} else {

На этом все! :breton:

atex
30.03.2007, 18:14
А как быть с mainfile.php для версии 7.6, там этот фрагмент кода выглядит несколько иначе. Каким кодом его заменить?
if (isset($newlang) AND !eregi("\.","$newlang")) {
if (file_exists("language/lang-".$newlang.".php")) {
setcookie("lang",$newlang,time()+31536000);
include("language/lang-".$newlang.".php");
$currentlang = $newlang;
} else {
setcookie("lang",$language,time()+31536000);
include("language/lang-".$language.".php");
$currentlang = $language;
}
} elseif (isset($lang)) {
if (eregi('[A-Za-z]', $lang)) {
if (file_exists("language/lang-".$lang.".php")) {
include_once("language/lang-".$lang.".php");
$currentlang = $lang;
}
else {

Soniks
01.04.2007, 15:58
atex в принципе можно оставить как есть, а лучше заминить выше предложенным