您的位置 » 首页 » 代码审计,实用工具 » 代码审计:dedecms本地文件包含及物理路径泄露0day

代码审计:dedecms本地文件包含及物理路径泄露0day

发表于4年前 | 作者: seay | 分类: 代码审计, 实用工具 | 孵化于:2013年03月29日 | 文章热度:27,849 次 全屏阅读

显示不全请点击全屏阅读

 晚餐吃撑了,瞄下代码消化消化。最近Php0day群里的兄弟都在讨论dede洞多,赶紧下了套,用editplus搜索了几个关键字,果然发现些问题。(话说平时写代码也喜欢用editplus,小巧方便多年习惯)

出现漏洞的两个文件为:
Include/payment/alipay.php
Include/payment/yeepay.php
漏洞均出现在respond方法里,估计这两个文件是临时工写的。

Include/payment/alipay.php

......
   function respond()
    {
        if (!empty($_POST))
        {
            foreach($_POST as $key => $data)
            {
                $_GET[$key] = $data;
            }
        }
        /* 引入配置文件 */
        require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
...... 

 

大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。

Include/payment/yeepay.php

 

......
    function respond()
    {
 
        /* 引入配置文件 */
        require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
 
        $p1_MerId = trim($payment['yp_account']);
        $merchantKey = trim($payment['yp_key']);
...... 

 

 

大概在145行左右,$_REQUEST[‘code’]没有经过任何判断和过滤。

这两个方法在plus/carbuyaction.php文件调用。

plus/carbuyaction.php

......
} else if ($dopost == 'return') {
    $write_list = array('alipay', 'bank', 'cod', 'yeepay');
    if (in_array($code, $write_list))
    {
        require_once DEDEINC.'/payment/'.$code.'.php';
        $pay = new $code;
        $msg=$pay->respond();
        ShowMsg($msg, "javascript:;", 0, 3000);
        exit();  
    } else {
        exit('Error:File Type Can\'t Recognized!');
    }
}
...... 

 

 

 

大概在334行,当$dopost等于return的时候就开始进入过程了。熟悉dedecms朋友都知道在include/common.inc.php使用了一种类似register_globals的机制。
所以$_GET[‘code’]或$_REQUEST[‘code’]会变成$code,而$code是经过判断的,值必须在$write_list数组以内这样才能继续后面的流程调用respond方法触发漏洞。这样的话貌似就无法控制$_GET[‘code’]为任意值了。

回到include/common.inc.php来看看他的机制。

 

......
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
	foreach($$_request as $_k => $_v) 
	{
		if($_k == 'nvarname') ${$_k} = $_v;
		else ${$_k} = _RunMagicQuotes($_v);
	}
}
...... 

 

 

 

大概在79行,可以看到他是从$_GET,$_POST,$_COOKIE这三个全局变量里取值的。嘿嘿,细心点就发现了吧。从他这个优先机制来讲他是先从get再从post再从cookie也就是说最终$code会是以$_COOKIE[‘code’]的值为准,而我们要控制的是$_GET[‘code’]或$_REQUEST[‘code’]只须要$code的值在$write_list数组以内就行了。Exp:http://www.php0day.com/plus/carbuyaction.php?dopost=return&code=../../tags上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断,使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie。暴路径:
由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径。注:请勿非法测试,产生后果与本人无关。

作者:b4dboy
漏洞发现日期:2013-3-27

 

Tags:

dedecms漏洞, 代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/2515/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

已经有16个筒子的人留下了脚印...

  • 风之传说 说:
    1楼
    2013 年 3 月 29 日 下午 12:51 回复

    可以继续深挖一下。。晕 刚才下了个deed测试了下,去注册,然后本来准备上传图片的。。要邮箱验证,然后点发送邮件一直木反应。。蛋疼。。看来这种方法拿SHELL不行了,再深挖一下,看看有木有再次利用的价值。。

    • 【管理员】seay 说:
      2013 年 3 月 29 日 下午 1:34 回复

      。。。

    • 德文赛亚 说:
      2013 年 3 月 29 日 下午 1:43 回复

      包含不一定要穿图片,还有其他的办法哦

      • 豆 说:
        2013 年 3 月 29 日 下午 8:38 回复

        还有什么方法哟。求。

    • 打死个别 说:
      2013 年 3 月 29 日 下午 6:04 回复

      是不是cookie值需要修改一下?

      • 【管理员】seay 说:
        2013 年 3 月 29 日 下午 7:11 回复

        恩恩,详细分析及利用文章我已经写好了,因为公司的原因,暂时还不能发,过几天会发出来的

        • 豆 说:
          2013 年 3 月 29 日 下午 8:39 回复

          博主可以提示一下嘛~

  • osploit 说:
    2楼
    2013 年 3 月 30 日 上午 1:46 回复

    5.7版本gpc关闭的时候成功了
    gpc开启的时候失败了

    • 【管理员】seay 说:
      2013 年 3 月 30 日 上午 7:41 回复

      跟GPC没关系吧

      • osploit 说:
        2013 年 3 月 30 日 下午 12:59 回复

        额,我测试的时候,确实gpc关闭的时候是是成功的。打开的时候就是空白了
        日志显示500错误!

        • 【管理员】seay 说:
          2013 年 3 月 30 日 下午 10:09 回复

          用长字符截断

          • 豆 说:
            2013 年 3 月 30 日 下午 10:30 回复

            长字符截断出现url请求过长错误。是不是得减少字符数量?

      • 冰封 说:
        2013 年 3 月 30 日 下午 1:29 回复

        %00 截断吧

        • 豆 说:
          2013 年 3 月 30 日 下午 10:30 回复

          %00截断在apache服务器上失效,我本地iis+win7就没问题。不知道为什么

          • 我是傻逼 说:
            2013 年 3 月 31 日 上午 9:41 回复

            %00截断是跟php的版本有关好不好 ❗

  • slip2008 说:
    3楼
    2013 年 4 月 23 日 上午 11:05 回复

    很是期待,也希望自己也能擦漏洞。

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)