漏洞版本:
# \7 k `% h4 R, nDedeCms 5.x漏洞描述:; I9 e. |8 [6 T3 ?- m$ T
DedeCms是免费的PHP网站内容管理系统。: |: Z* D& B+ O* h3 S. d
# y6 g# A& _! S4 k( O" f- h8 n2 d3 I
plus/carbuyaction.php里没有对变量进行严格的过滤, z4 P3 o# Q: ]8 D& [
0 O. }3 P3 k& g, V' z! }出现漏洞的两个文件为:
* I# q1 h: d9 M3 t. oInclude/payment/alipay.php
; _8 \$ \1 D4 \4 M Q- pInclude/payment/yeepay.php
/ W# |- {' I6 S" X- o. k' s+ _漏洞均出现在respond方法里2 M+ P: m& c+ j* e& g
+ E/ o! j, q# R6 J' H6 e7 hInclude/payment/alipay.php ( Y1 n: [" b2 M% M1 M
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......, D; P4 N6 h" y b9 F( Y
9 J) w7 C: a) |/ o( }; F* w% a大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。$ |" n* Z5 T; l R9 A
Include/payment/yeepay.php" ~' P2 R( w* W( H) b
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
5 E% }* \6 B: ?0 o& I2 q( [# ` # A& O" b6 [# v& s, c. G, V
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
1 `9 U9 m' ~. z3 `http://bugscan.net/manage/node/83; b2 N* ^9 v! \& J% e& s- T
http://www.cnseay.com/2515/
. F; z6 @ B( [*>8 t1 o( @6 \) N: S2 S
测试方法:% t \ ^# g( R) h# A5 e$ n" m8 S
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
/ `0 J3 l8 f. S7 k$ |2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径& b$ l. I# g/ H+ y! [
修复方法:
- `" }( @7 w8 u7 N. T; F目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:# E2 T" X) u1 P: _
http://www.dedecms.com/products/dedecms/. K2 U9 n' k* }4 g) M6 c4 V
+ E. r8 q2 R5 V+ {3 O2 N" ] 临时修复:
, Z; `4 t. ]3 f7 F1)Include/payment/alipay.php
9 t3 B: g- Y+ z# @ 大概133行左右
" _. n6 ^) V7 b require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';# k8 D9 I0 j! w g3 R
替换
: |! x$ t1 @; w% S3 _ require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';# q0 N) i) s9 c/ y0 I/ V5 D2 s
2) Include/payment/yeepay.php2 ^* k) z, R: K* T1 C$ O
大概在145行左右. ?( r2 [, i4 `2 p
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';5 H0 ?: f! E( S9 l6 f
替换% g9 B3 X5 h1 K' ?( c
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
5 ^7 O! e8 w, `3 }* N7 R0 g& K+ U 6 |5 d0 n5 o& }. p3 q
|