漏洞版本:5 U* _+ M. k' [& A+ W5 G1 Y4 K
DedeCms 5.x漏洞描述:* i& _# E3 a0 X$ W
DedeCms是免费的PHP网站内容管理系统。. y0 z4 U' V0 r/ f Z) w; n
8 B3 @6 H+ a' k: Tplus/carbuyaction.php里没有对变量进行严格的过滤& }) J! U: |4 Z, p
9 a1 r& v: V8 b, A1 P出现漏洞的两个文件为:6 r: N! P/ [2 F, w
Include/payment/alipay.php% B, O3 q7 e! {* M9 @3 \
Include/payment/yeepay.php
* M+ s. j1 g1 S' Z7 u3 M/ t6 c5 k漏洞均出现在respond方法里- a& V$ n+ O2 H. J# ~: T
0 Z1 r' `7 @7 p# r6 E6 M4 y5 |. W
Include/payment/alipay.php
1 {; j: S+ l r5 V& G3 @7 o- g2 A6 V......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......" A- v: y$ c% Z1 I$ E( l1 q
4 l" S2 h. S; A
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。- A- u+ {2 h) w8 P$ u1 z( A
Include/payment/yeepay.php
" Z- n, x' P9 U$ x% u: n! o- `$ z......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......, T1 L5 {* G% L$ t/ V! O( s
! p+ C* D2 {# J5 n$ h! h! o6 _, }
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考- q, c( W1 A. ^- O
http://bugscan.net/manage/node/83! ]9 `0 M9 `1 L A$ ` h
http://www.cnseay.com/2515/$ _9 C; H# X7 {. H a! {
*>
- v; A- v% j' k7 z9 P9 { \( O测试方法:( L" Q7 J0 X2 H6 ^. D+ m* E
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
7 H* D/ d! H/ H) I5 g- f2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径+ l+ l3 r* L" }, p/ ]
修复方法:
2 ~' C( a \- R1 M目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:8 V; Q+ k6 @* o! X
http://www.dedecms.com/products/dedecms/
3 l. G2 q1 M& x, h
3 L7 x% Q a1 A" y. L* J/ ^6 J1 |2 ^ 临时修复:
, N" T" W) X' q& g7 I1)Include/payment/alipay.php& A# i$ m; i) o0 ]- n/ i
大概133行左右
% |5 r+ ?. {1 ^ q! U require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
0 I0 A4 w& d+ B$ U& O替换
3 Y6 c' v. ?1 J2 L3 H) S8 E require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
) y- f5 j2 R0 o$ ~; ~ }- |2) Include/payment/yeepay.php
& _4 }0 m2 x/ x* s n大概在145行左右
# S) D( x! t1 X+ E require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';4 _* M* R' I; v. c! ]) t3 p! ~
替换5 C( t1 e# P: F# U" o/ t
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';2 W1 X# Z& t) G9 ?) u' G$ ]
3 C. a$ Z) T! B8 ~( u
|