漏洞版本:4 x; M H- m9 z- I
DedeCms 5.x漏洞描述:2 C7 |% Z& t. b( S* n
DedeCms是免费的PHP网站内容管理系统。
n: L: b/ R) u- {8 S' J" c0 b6 \4 W/ o6 P
plus/carbuyaction.php里没有对变量进行严格的过滤/ \1 z' c3 H1 O6 L, x( f L
$ C* E) J, s6 l) i4 B k
出现漏洞的两个文件为:3 X9 n' }: b# Q' j; f4 c
Include/payment/alipay.php
% }% i' `9 x7 _5 y5 H4 V, v6 x! bInclude/payment/yeepay.php
: p: V y: ^9 ?7 ?漏洞均出现在respond方法里
# K5 y; E3 B( n) [2 Q9 h: Y$ |" z6 j
Include/payment/alipay.php
9 @% Y$ D6 b( _% f. {......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......# r3 c0 u( v+ v. H2 x
% i# L3 h0 D' ^" z. [
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
0 j1 ]2 b5 @% W3 y5 bInclude/payment/yeepay.php
3 a" e, u' J/ a# v* i: z9 M- |......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......7 q+ W1 o: c7 s1 B: c8 u
4 O8 e$ E; P; f$ }# h Q4 h大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
2 m, R5 u0 n( }8 Q# A0 F+ V1 xhttp://bugscan.net/manage/node/83- `( V0 q5 t; ]3 s( z3 {) X+ Z
http://www.cnseay.com/2515/
/ |0 d. f$ n% h& w/ y: ?2 U. n, a# c*>
3 Q' I& s) O% W2 Y# T7 C测试方法:
; v1 a( ^) ~. F- v$ K1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie ' G; n6 L8 u ^8 R2 H/ B' B
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径3 v$ M; g3 `8 s% y6 v* o7 ?
修复方法:
: B! f7 v) c( X3 ]0 o% m( i2 g目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:( f2 `. u) E' o, @. j
http://www.dedecms.com/products/dedecms/
& U- `/ D* D" A e. J; X
1 x3 C+ }% P, [5 e 临时修复: 2 Z- E- a! @2 G5 J; _ V
1)Include/payment/alipay.php
$ H7 z: G2 T+ m$ [ 大概133行左右: j% D8 e+ \' V6 c$ R* J
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
5 {, E: y* b( Z5 j1 Y& o% H替换
: k6 _8 x5 _" H: B require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
3 _0 ~7 W' g5 ^* d1 K2) Include/payment/yeepay.php& }3 Z; T5 I O
大概在145行左右3 I5 R2 Y. h9 p
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';' k) p8 Z" V) f
替换
; p" Q! ~: N, e8 i4 V/ ?, c require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';. r" g& M/ u8 l8 s! H! B# A7 j
: w# z2 Z, K8 }- n- |; n( W/ W0 U |