DedeCMSV53任意变量覆盖漏洞漏洞预警 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    DedeCMSV53任意变量覆盖漏洞

    今天看到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发布了,但是依旧没有将变量覆盖漏洞彻底修补,

DedeCMSV53任意变量覆盖漏洞漏洞预警

。这个漏洞和ryat那个很相似 :)

    看核心文件include/common.inc.php中的代码

    PHP代码

    //检查和注册外部提交的变量

    foreach($_REQUEST as $_k=>$_v)

    {

    if( strlen($_k)>0 && eregi('^(_|cfg_|GLOBALS)',$_k) && !isset($_COOKIE[$_k]) )//程序员逻辑混乱了?

    {

    exit('Request var not allow!');

    }

    }

    这个地方可以通过提交_COOKIE变量绕过cfg_等关键字的过滤

    接着是注册变量的代码

    PHP代码

    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给我们提供了什么

    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里面的一些判断

最新文章