Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Уязвимости Защиты (http://forum.mynuke.ru/forumdisplay.php?f=15)
-   -   Отсутствие проверки Id переменной (http://forum.mynuke.ru/showthread.php?t=2767)

Soniks 18.04.2007 14:40

Отсутствие проверки Id переменной
 
Продукт: PHP-Nuke
Версия: 8.0 и ниже
Описание:
В скриптах системы отсутствует проверка входных данных, поэтому при удачных стечениях обстоятельств (magic_quotes - OFF, register_global - ON, отсутствие фильтров SQL-инъекций), злоумышленник может выполнить SQL-Инъекцию.


Устранение:

Для более эффекта добавим проверку в главном файле.
Открываем: mainfile.php
Находим (43 строка):
PHP код:
 // override old superglobals if php is higher then 4.1.0
if($phpver >= '4.1.0') {
$HTTP_GET_VARS $_GET;
$HTTP_POST_VARS $_POST;
$HTTP_SERVER_VARS $_SERVER;
$HTTP_POST_FILES $_FILES;
$HTTP_ENV_VARS $_ENV;
$PHP_SELF $_SERVER['PHP_SELF'];
if(isset(
$_SESSION)) {
    
$HTTP_SESSION_VARS $_SESSION;
}
if(isset(
$_COOKIE)) {
    
$HTTP_COOKIE_VARS$_COOKIE;
}


Ниже добавляем проверку:
PHP код:
 if(isset($_REQUEST['id'])) $id intval($_REQUEST['id']);
if(isset(
$_REQUEST['lid'])) $lid intval($_REQUEST['lid']);
if(isset(
$_REQUEST['cid'])) $cid intval($_REQUEST['cid']);
if(isset(
$_REQUEST['pid'])) $pid intval($_REQUEST['pid']);
if(isset(
$_REQUEST['sid'])) $sid intval($_REQUEST['sid']);
if(isset(
$_REQUEST['tid'])) $tid intval($_REQUEST['tid']); 

Anibus 19.04.2007 09:25

постоянно получаю следующие:

PHP код:
 PHP Notice:  Undefined index:  lid in /***/mainfile.php on line 70
PHP Notice
:  Undefined index:  id in /***/mainfile.php on line 71
PHP Notice
:  Undefined index:  cid in /***/mainfile.php on line 72
PHP Notice
:  Undefined index:  pid in /***/mainfile.php on line 73
PHP Notice
:  Undefined index:  sid in /***/mainfile.php on line 74 


версия 7.9 3.2 2.0

Soniks 19.04.2007 11:22

отключите вывод notice на экране, или код выше перепишите (я подправил)

Anibus 19.04.2007 16:30

Soniks большое спасибо.

Кстати в версии 7.6 строчек, после которых нужно ставить код нет.

Куда посоветуете там вставлять код?

Alexander-V-Sh 20.04.2007 17:25

Я так понимаю, если в каждой функции каждого модуля стоит:

$sid = intval($sid);

то это нафик ненужно?

Soniks 20.04.2007 21:56

Anibus после писвоения глобальных переменных или до включения GZip
Alexander-V-Sh да

Val 25.08.2007 22:48

PHPNuke 7.9 rus

При добавлении к коду в Mainfile.php

// override old superglobals if php is higher then 4.1.0
if($phpver >= '4.1.0') {
$HTTP_GET_VARS = $_GET;
$HTTP_POST_VARS = $_POST;
$HTTP_SERVER_VARS = $_SERVER;
$HTTP_POST_FILES = $_FILES;
$HTTP_ENV_VARS = $_ENV;
$PHP_SELF = $_SERVER['PHP_SELF'];
if(isset($_SESSION)) {
$HTTP_SESSION_VARS = $_SESSION;
}
if(isset($_COOKIE)) {
$HTTP_COOKIE_VARS= $_COOKIE;
}
}

добавляю :pirate: :pirate:

$lid = isset($_REQUEST['lid'])?intval($_REQUEST['lid']):"";
$id = isset($_REQUEST['id'])?intval($_REQUEST['id']):"";
$cid = isset($_REQUEST['cid'])?intval($_REQUEST['cid']):"";
$pid = isset($_REQUEST['pid'])?intval($_REQUEST['pid']):"";
$sid = isset($_REQUEST['sid'])?intval($_REQUEST['sid']):"";

но при попытке прочитать какую-либо новость сайт не реагирует (страница грузиться бесконечно).
Грешу на строку

$pid = isset($_REQUEST['pid'])?intval($_REQUEST['pid']):"";

при ее комментировании все становится на круги своя.
Как исправить код?

:pirate: :

Soniks 28.08.2007 11:41

Val а какой у вас модуль Новостей? производили ли вы там изменения? какая версия системы?

Val 29.08.2007 01:58

Блок новостей - стандартный комплекта PHP Nuke 7.9 rus.
Версия в конфиге стоит Version_Num 8.0
В модуле изменения еще не проводил, тестирую на локалхосте в поисках багов и вот один обнаружился.

Val 29.08.2007 18:08

у всех прошу прощения по поводу вопроса от 25.08.2007 20:48, все в порядке...

Хотя нет!!! Проблема осталась.Все таже строка... :sad:


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

Copyright © 2005 by Soniks