DedeCMS V 5.3 任意变量覆盖漏洞

影响版本:
DedeCms V 5.3

程序介绍:

DedeCms 基于PHP+MySQL的技术开发,支持Windows、Linux、Unix等多种服务器平台,从2004年开始发布第一个版本开始,至今已经发布了五个大版本。DedeCms以简单、健壮、灵活、开源几大特点占领了国内CMS的大部份市场,目前已经有超过二十万个站点正在使用DedeCms或居于DedeCms核心,是目前国内应用最广泛的php类CMS系统。

漏洞分析:

 

看核心文件include/common.inc.php中的代码
 
//检查和注册外部提交的变量
foreach($_REQUEST as $_k=>$_v)
{
    if( strlen($_k)>0 && eregi(‘^(_|cfg_|GLOBALS)’,$_k) && !isset($_COOKIE[$_k]) )//程序员逻辑混乱了?
    {
        exit(‘Request var not allow!’);
    }
}
这个地方可以通过提交_COOKIE变量绕过cfg_等关键字的过滤
接着是注册变量的代码
 
foreach(Array(‘_GET’,’_POST’,’_COOKIE’) as $_request)
{
    foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}
然后初始化变量
 
 
//数据库配置文件
require_once(DEDEDATA.’/common.inc.php’);
 
//系统配置参数
require_once(DEDEDATA."/config.cache.inc.php");
看似不能利用了,但是幸运的是在文件最后有这样一段代码
 
//转换上传的文件相关的变量及安全处理、并引用前台通用的上传函数
if($_FILES)
{
    require_once(DEDEINC.’/uploadsafe.inc.php’);
}
再看uploadsafe.inc.php给我们提供了什么
 
$keyarr = array(‘name’,’type’,’tmp_name’,’size’);
 
foreach($_FILES as $_key=>$_value)
{
    foreach($keyarr as $k)
    {
        if(!isset($_FILES[$_key][$k]))
        {
            exit(‘Request Error!’);
        }
    }
    $$_key = $_FILES[$_key][‘tmp_name’] = str_replace("\\\\","\\",$_FILES[$_key][‘tmp_name’]);
             //注意这个地方,通过common.inc.php的漏洞,我们是可以控制$_FILES[$_key][‘tmp_name’] 的
这里通过提交类似common.inc.php?_FILES[cfg_xxxx][tmp_name] =aaaaaa&……来覆盖cfg_xxxx
利用的时候注意给cookie赋值,同时要绕过uploadsafe.inc.php里面的一些判断

解决方案:
厂商补丁:
DesDev Inc.
———–
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.dedecms.com

信息来源:
<*来源:Wolves Security Team
链接:http://bbs.wolvez.org/topic/80/new/posts/
*>

发表评论?

0 条评论。

发表评论