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

发布:si1ence | 分类:网络安全 | 浏览:

18 May 2010

影响版本:
Discuz! 6.x/7.x
漏洞描述:
由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞

include/global.func.php代码里:

  1. function daddslashes($string, $force = 0) {
  2. !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
  3. if(!MAGIC_QUOTES_GPC || $force) {
  4. if(is_array($string)) {
  5. foreach($string as $key => $val) {
  6. $string[$key] = daddslashes($val, $force);
  7. }
  8. } else {
  9. $string = addslashes($string);
  10. }
  11. }
  12. return $string;
  13. }
  14.  
  15.  
  16. include/common.inc.php里:
  17.  
  18. foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
  19. foreach($$_request as $_key => $_value) {
  20. $_key{0} != '_' && $$_key = daddslashes($_value);
  21. }
  22. }

模拟register_globals功能的代码,在GPC为off时会调用addslashes()函数处理变量值,但是如果直接使用$_GET/$_POST/$_COOKIE这样的变量,这个就不起作用了,然而dz的源码里直接使用$_GET/$_POST/$_COOKIE的地方很少,存在漏洞的地方更加少:(

不过还有其他的绕过方法,在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:

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

     

这样就没法提交GLOBALS变量了么?

$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST,而不包括$_COOKIE,那么我们就可以通过COOKIE来提交GLOBALS变量了:)
<*参考
Author: 80vul-B
Team:
http://www.80vul.com
*>

厂商补丁:
Discuz!
--------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://Discuz.net/

临时解决办法:

更改php5.3.x里的php.ini设置: request_order为GPC


分享到:

原创文章如转载,请注明:转载自si1ence'blog [ http://www.si1ence.cn/ ]
本文链接地址:http://www.si1ence.cn/wangluoanquan/142/

上一篇: 下一篇:

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

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于

关注网络安全,掌握网络资讯与病毒防,IT资讯,搜索引擎优化(SEO)技术分?Emai:master#si1ence.cn(#改为@)

TAGS列表

最近发表

随机文章

本月浏览排行

最近评论