今天看到mr_xhming同学一个文章(http://hi.baidu.com/mr_xhming/blog/item/8176f00bf540f11795ca6b3f.html),发现这个老BUG还没被修补的样子,从内部论坛转一个pp出来,欢迎大家拍砖

DedeCMSV53任意变量覆盖漏洞 

BY flyh4t
http://www.wolvez.org
2008-12-12

DedeCMSV53发布了,但是依旧没有将变量覆盖漏洞彻底修补。这个漏洞和ryat那个很相似 :)
看核心文件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里面的一些判断
 
> Date: Fri, 15 May 2009 13:38:57 +0800
> Subject: [Ph4nt0m] Re: 最新的DEDECMS5.31有什么漏洞?
> From: [email protected]
> To: [email protected]
> 
> 到这里看看吧http://wavdb.com/
> 
> 2009/5/15 wildenwolf wildenwolf <[email protected]>:
> > 最新的DEDECMS5.31有什么漏洞?注入的最好,XSS也行!
> >
> > >
> >
> 
> > 

_________________________________________________________________
MSN 表情魔法书,改变你的对话时代!
http://im.live.cn/emoticons/
--~--~---------~--~----~------------~-------~--~----~
 要向邮件组发送邮件,请发到 [email protected]
 要退订此邮件,请发邮件至 [email protected]
-~----------~----~----~----~------~----~------~--~---

回复