漏洞版本:
0 Y8 [6 a4 Z2 nDedeCms 5.x漏洞描述:
& j2 U0 [$ `: I+ l, }3 C3 yDedeCms是免费的PHP网站内容管理系统。# Q: _# O8 g6 l7 T
8 r+ ~. V( @- p
plus/carbuyaction.php里没有对变量进行严格的过滤6 G4 \& J3 ?6 J8 I, g- C1 n1 p2 ?
0 g$ k% K: G# f6 S8 v* `出现漏洞的两个文件为:8 n s( m6 y4 f6 k9 N/ Y
Include/payment/alipay.php; a" q2 _7 t* \4 @
Include/payment/yeepay.php: Y C* e* x: l+ L
漏洞均出现在respond方法里
! d I0 E+ r1 e' j2 ]1 ^" a3 n" X
+ I$ U8 c: M* ?1 ?- l" A2 R+ EInclude/payment/alipay.php
- o1 Y2 @4 X- J2 ]; b3 ]! D2 f0 V- P......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......* @: K, J7 u% m- d" g! y5 P
8 y0 W0 ~8 W* y4 t
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。! Z* v/ l# A+ ?, z! k5 E! T
Include/payment/yeepay.php
( G" D5 W" Z" e5 ~8 m......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
9 K: k p7 N! B
" a) P$ y% f/ s, }$ c大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
, c& E2 z# q$ b! d1 j! Uhttp://bugscan.net/manage/node/83
, L7 B5 v) S; k0 R4 Q' p |http://www.cnseay.com/2515/+ t3 _- T) X9 U/ t6 s, E
*>! l. q$ ~' ?: z- h5 f! M& ^
测试方法:$ o: Y/ V, d& G0 D; r
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie 7 G) [$ y7 @; o9 n: d8 I
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径! k' S# [4 _: s; C
修复方法:
8 p1 x, y+ ~. h+ R* F目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:4 ~+ [$ f: d1 T# w. P/ u! ]
http://www.dedecms.com/products/dedecms// o+ l+ \' W" Y8 P4 a1 ~- Z
- x, K+ J" S! y: s/ T
临时修复: $ q1 Q8 I! `# C/ l9 n
1)Include/payment/alipay.php9 e! t0 E; t! w* X7 C8 Q
大概133行左右
( K$ s+ z" e8 X& }2 Y$ o require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
1 r, t; y# `+ v: T w7 k替换
# V% b$ c9 |) Q/ M1 I require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';- d+ q1 E: h1 O% C
2) Include/payment/yeepay.php
0 @ v/ `/ y) t @- G% s大概在145行左右
+ j( m4 w' B: f require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';3 d! w& k! k, ~
替换
1 i4 F! t3 l7 Y require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';; b5 L0 n/ v) B0 r' m$ J
+ R7 K2 \0 o$ I6 L |