欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

php全局变量漏洞 $GLOBALS

来源:本站转载 作者:佚名 时间:2012-07-24 TAG: 我要投稿

 在Discuz代码中有这么一段:

if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
 exit('Request tainting attempted.');
}

register_globals 是php中的一个控制选项,可以设置成off或者on ,默认为off,决定是否将 EGPCS(Environment,GET,POST,Cookie,Server)变量注册为全局变量。
如果 register_globals打开的话, 客户端提交的数据中含有GLOBALS变量名, 就会覆盖服务器上的$GLOBALS变量.
所以 这段代码, 就是判断, 如果提交的数据中有GLOBALS变量名, 就终止程序。

由此引起的安全问题成为PHP的“自动全局变量漏洞”,所以我们要坚决把register_globals关掉。并且使用 $_GET, $_POST, $_COOKIE 而非 $_REQUEST 。

Discuz!论坛绕过全局变量防御漏洞由于php5.3.x版本php.ini的设置中 request_order 默认值为 GP ,导致Discuz! 6.x/7.x中可以绕过全局变量防御。

在include/global.func.php中:

function daddslashes($string, $force = 0) {
    !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
    if(!MAGIC_QUOTES_GPC || $force) {
        if(is_array($string)) {
            foreach($string as $key => $val) {
                $string[$key] = daddslashes($val, $force);
            }
        } else {
            $string = addslashes($string);
        }
    }
    return $string;
}

include/common.inc.php中:

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
    foreach($$_request as $_key => $_value) {
        $_key{0} != '_' && $$_key = daddslashes($_value);
    }
}

在register_globals=on时通过提交GLOBALS变量就可以绕过上面的代码。为了防范这种情况,Discuz!中有如下代码:

if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
    exit('Request tainting attempted.');
}

$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST而不包括$_COOKIE。通过 COOKIE就可以提交GLOBALS变量。

临时解决方法:

更改php 5.3.x里的php.ini设置,设置 request_order 为 GPC 。

 

补充:

string substr ( string string, int start [, int length] )

其中start如果为负,则从字符串最后一个字符开始向回倒数到start字符,作为起始点。

如果length为负,则从字符串最后一个字符开始向回倒数到length字符,作为终点。

其中,如果字符串长度小于或等于start,则返回false。

如果起点位置超过终点位置,则返回一个空字符串。

 

set_magic_quotes_runtime(0)

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载