Discuz! 7.x/6.x论坛绕过全局变量防御漏洞
影响版本:
Discuz! 7.x / 6.x
漏洞描述:
Discuz!是一款华人地区非常流行的Web论坛程序。
由于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变量。
<*参考
http://syue.com/Hacker/Research/14507.html
*>
安全建议:
临时解决方法:
* 更改php 5.3.x里的php.ini设置,设置request_order为GPC。
厂商补丁:
Discuz!
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.discuz.net/