漏洞版本:8 \8 G+ F, Q8 c( `6 {6 g
DedeCms 5.x漏洞描述:; ?# ^2 V# {7 M9 h
DedeCms是免费的PHP网站内容管理系统。 L: F& t; a" V0 s* o
( o7 d& n+ i/ \9 T6 [* P' r: e% V
plus/carbuyaction.php里没有对变量进行严格的过滤
( R* i( L, b1 C- L9 o. @8 c/ a$ j+ I, T) s3 m$ J
出现漏洞的两个文件为:
% u( d$ N) J0 r. A2 w7 }Include/payment/alipay.php% \+ R+ z& u% O; {) z, W8 M
Include/payment/yeepay.php
X6 H( w5 x# t漏洞均出现在respond方法里
8 T2 C+ J& T3 D( V I; |& m' T. `1 K/ l; [+ v+ \
Include/payment/alipay.php
) E$ V' w% s' Y, i1 y5 Y2 x! ]......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';....../ K+ N5 S9 u8 ^' \) F& p, C
5 B" a) ?8 l7 C) O* _2 n3 I" D) j6 v
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。0 a7 l+ `4 L3 C5 t0 z
Include/payment/yeepay.php8 w! a. j, T6 k4 a
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
7 O) K/ r' `1 |& z5 t# l" ~
# @5 Z- e" Q; S4 l0 c; |# H7 I大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
- c8 O5 }' G; [% Thttp://bugscan.net/manage/node/835 r3 ^ x7 u! H. B; U4 e
http://www.cnseay.com/2515/
3 j! B$ F) I w*>) z g3 Q+ ]! T5 |
测试方法:
+ |, ]+ d* O' e/ q J8 P/ Z1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie . l. |) P u, e" d
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径+ U |8 K% n) m4 y
修复方法:
1 |2 x, d2 g7 N6 Y; r9 A目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
0 v l! F \) @# @http://www.dedecms.com/products/dedecms/
1 W/ o. h" }1 a4 K8 T" H" R
: c- \7 e7 G9 e4 { 临时修复:
& k$ h( F# |0 M8 T. a1)Include/payment/alipay.php
$ v$ {: @7 a" d H; U& G& y3 I 大概133行左右
& c. o* V6 Q6 ~: Z" \6 p4 ^% U2 @ require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
* v4 u* l5 a% d" D* |) x* q替换- R; ?5 z: M' J8 Q+ J% x: f
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
% ~. W& c! O8 a2) Include/payment/yeepay.php! U( @$ x4 ?; F) D$ f( ]- ?
大概在145行左右
7 q8 q7 z+ \6 s- @: @ require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
: u. C) ?8 o2 A: M5 F1 C0 z( n 替换
. J# K- V2 O9 W require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';: Y5 r1 q3 O3 x
+ B6 t0 @3 s2 f# }2 j# x1 _$ Z
|