首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
DEDECMS全局变量覆盖漏洞科普
来源:http://hi.baidu.com/rayh4c/blog/ 作者:rayh4c 发布时间:2011-08-15  

DEDECMS全局变量覆盖漏洞最早是狼族安全小组09年公布的,官方硬撑到现在没修补漏洞,到现在基本上覆盖了DEDECMS全部的版本。个人猜想是不是官方故意留下的后门。下面稍微科普下这个漏洞,大牛们可以完全无视:

 

一. 了解PHP超级全局变量

下面是PHP的超级全局变量,可以了解一个特性,全是数组。

$GLOBALS, 所有全局变量数组
$_SERVER, 服务器环境变量数组
$_GET,通过GET方法传递给脚本的变量数组
$_POST, 通过POST方法传递给脚本的变量数组
$_COOKIE,cookie变量数组
$_REQUEST,所有用户输入的变量数组,包括$_GET, $_POST和$_COOKIE所包含的输入内容
$_FILES,与文件上传相关得变量数组
$_ENV,环境变量数组
$_SESSION,会话变量数组
 
二. 理解$_GET变量
 
可以写个PHP来看看:
<?php
var_dump($_GET);
?>
 
访问
array(1) { ["key"]=> string(5) "value" }
OK,看到这里应该明白了,$_GET就是个数组,我们用GET方法可以传一个数组。
 
再访问
得到
array(1) { ["key"]=> array(1) { ["arr1"]=> string(5) "value" } }
我们通过GET方法传入了一个嵌套数组。
 
到这里其实问题就出来了,很多PHP安全资料都没提过GET传嵌套数组的这个特性,偶尔在几个exploit里看到 - -!
 
三. 深入跟进DEDECMS全局变量注册漏洞
 
真正理解了$_GET变量后,我们来深入跟进这个漏洞产生的真正原因,模拟一下漏洞的全过程:
 
提交一个嵌套数组:
 
array(1) { ["_POST"]=> array(1) { ["GLOBALS"]=> array(1) { ["cfg_dbname"]=> string(1) "X" } } }
 
假如数据传入了DEDECMS程序,在第一层过滤,DEDECMS会检查$_REQUEST里有没有全局变量的关键字,但我们的KEY是_POST且是个数组,所以轻松绕过。
foreach($_REQUEST as $_k=>$_v)
{
 if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) )
 {
        exit('Request var not allow!');
 }
}
 
接着进入真正的注册变量流程,按顺序是先从$_GET变量注册的,我们的KEY是(_POST),第一轮遍历$_GET成功注册了变量$_POST,第二轮遍历$_POST成功注册了变量$GLOBALS !
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
 foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}
到这里漏洞的原因就清楚了,程序通过$_GET注册了$_POST,通过$_POST注册了$GLOBALS!
 
四. 领悟漏洞后的修补
 
完全领悟这个漏洞后,就会知道怎么修补了。 
 
1. 可以看看DISCUZ是怎么做的,当发现KEY的第一个字符存在_就不注册变量。
 
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
 foreach($$_request as $_key => $_value) {
  $_key{0} != '_' && $$_key = daddslashes($_value);
 }
}
 
2. DEDECMS可以用下面的方法临时修补,当遍历$_POST注册变量,发现变量名存在GLOBALS就会阻止注册变量。
 

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
         foreach($$_request as $_k => $_v) {
                    if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) ){
                            exit('Request var not allow!');
                   }
                    ${$_k} = _RunMagicQuotes($_v);
    }
}

 
PS:安全就是基础,必须理解好基础。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·PHP168 V6.02 整站系统远程执行
·discuz sessoin hijack tips
·WordPress 严重的远程备份执行代
·DEDECMS拿SHELL EXP
·DEDECMS爆严重安全漏洞 免账号密
·discuz sessoin hijack tips 续
·WordPress多个插件注入漏洞
·Bo-Blog v1.4 单用户版分类列表
·Nginx %00空字节执行php漏洞
·智有道专业旅游系统 v1.0 注入及
·乌邦图企业网站系统 cookies 注
·科讯 6.x – 7.06 SQL 注射漏洞
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved