漏洞版本:$ Z2 F7 ]; o6 U2 s: U# Q
DedeCms 5.x漏洞描述:
; J1 u& _9 ^, C& e8 A: A: cDedeCms是免费的PHP网站内容管理系统。
" K3 B. P% Y; o# R: A$ f
1 E7 c) M8 Q G5 Bplus/carbuyaction.php里没有对变量进行严格的过滤/ U$ W+ U. a6 U6 k6 v
2 o" h+ \0 d( L% n9 x/ O出现漏洞的两个文件为:1 Z" S/ n1 c3 H
Include/payment/alipay.php8 E6 i7 S: h' |1 r" k5 {3 u, e* i
Include/payment/yeepay.php9 Q/ x, ?. N. w+ k4 M8 T
漏洞均出现在respond方法里
0 H. }; s; A( H. e- k4 b5 V4 p! k* T2 p# l+ P
Include/payment/alipay.php
1 x/ a' e; @! j2 E! h, ^3 T......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';...... z% \& K9 B+ q0 Y) T
: t) R2 G3 n9 K3 r- K: _: I
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
0 B9 ]. |) n" K; r3 t( Z: b8 D0 iInclude/payment/yeepay.php. }" k, k1 A8 l% p
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
& q! w6 H3 ?1 o% b1 f* t ' d e, L# f. q+ n
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
9 o& e2 \) v. r/ Thttp://bugscan.net/manage/node/83: `: F, J! w. d, l+ y& A- }
http://www.cnseay.com/2515/
+ \0 h# A- |1 j# b$ I: d* n*>! d; C8 g- o/ t* o/ [% g, v( A
测试方法:
( t( P2 s* F7 m, u1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie # \0 T/ H4 Q3 B: P
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径+ L' B/ V7 N N2 Y* ]
修复方法:; h, {# h* r8 C3 Q: `. h7 i
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:! u9 x+ E1 E& U2 u. T
http://www.dedecms.com/products/dedecms/
. e/ r+ M, H% [3 M* Y. p# M- U/ e9 p; e/ m
临时修复:
9 q- z: r- ^+ [+ t) G, ]5 B1)Include/payment/alipay.php4 n6 `' ?( G8 k) d3 i" N
大概133行左右 E5 A. t0 p6 ]7 H7 Z! `! S
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
1 J% M& ~) u, k) L; M4 c替换0 C, S, p" B, c7 ?) ]. v
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
4 ]1 a) N' R3 \8 Y2) Include/payment/yeepay.php
5 f2 ~5 \/ M6 d* z* }大概在145行左右
. D+ }3 A# y# u W require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
0 l) C! C8 t/ c+ X1 a+ W 替换
9 u! f5 m6 d2 [: Y require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';4 {6 ]( N: M3 F$ r \+ z
, ]* ?& y( h& u2 A' x: i
|