Discuz! 6.x/7.x 全局变量防御绕过漏洞

Discuz! 6.x/7.x 全局变量防御绕过漏洞Author: 80vul-BTeam: http://www.80vul.comDate: 2010年5月17日由于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功能的代码,在GPC为off时会调用addslashes()函数处理变量值,但是如果直接使用$_GET/$_POST/$_COOKIE这样的变量,这个就不起作用了,然而dz的源码里直接使用$_GET/$_POST/$_COOKIE的地方很少,存在漏洞的地方更加少:(不过还有其他的绕过方法,在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:if (isset($_REQUEST[GLOBALS]) OR isset($_FILES[GLOBALS])) {exit(Request tainting attempted.);}这样就没法提交GLOBALS变量了么?$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST,而不包括$_COOKIE,那么我们就可以通过COOKIE来提交GLOBALS变量了:)二 利用POC : 缺三 补丁[fix]更改php5.3.x里的php.ini设置: request_order为GPC没有行囊,没有目的,我孤独的走在路上,

Discuz! 6.x/7.x 全局变量防御绕过漏洞

相关文章:

你感兴趣的文章:

标签云: