漏洞版本:
- H c# G: ~7 T+ @" \' zDedeCms 5.x漏洞描述:* [1 K s5 I0 n! g
DedeCms是免费的PHP网站内容管理系统。
. w$ {+ ~0 l2 v5 p0 P7 ~4 {5 U. i3 x
plus/carbuyaction.php里没有对变量进行严格的过滤. i! Y, J' w# r& J
) n: q. N% }/ u! ~; z% w0 `# z$ R
出现漏洞的两个文件为:
0 _( d' M$ w% \) NInclude/payment/alipay.php% J7 s/ Q6 m b& e- A6 f6 W
Include/payment/yeepay.php
: j9 L% S+ J3 H6 L漏洞均出现在respond方法里. q. B6 Q' r3 A+ H
. H9 m% D5 ?9 F$ s0 c; sInclude/payment/alipay.php
. z& u) n% y+ o4 i0 V ?, a......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
! b" v' i( \' r+ i5 ?8 B 8 ~" E! w7 x9 L4 }, N* r* ~
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。4 O" T; a) t( E" `: X! p# z5 @3 d
Include/payment/yeepay.php
8 H- `) m+ H: B2 j; K......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
& m, {0 E/ k9 i2 J5 y5 S & N' Z9 n, r# N6 p+ v0 @ x, m. p
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
/ G6 q, B/ {* ^) T$ k0 J: E1 \http://bugscan.net/manage/node/83$ ?7 q2 O, X0 t& C, H/ a p1 Y+ @
http://www.cnseay.com/2515/
+ U4 b$ Z* c( z7 E: q% D*>
/ H( L9 ], h4 _$ R, s测试方法:
/ E$ x5 l& x! v! `! ?( A1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
0 N0 V1 |, u! L2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径& ~2 D" C; R2 g
修复方法:
% |5 i0 Q5 @. k; e6 w" ~# \) u目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:9 _! M0 H. M; p0 w
http://www.dedecms.com/products/dedecms/
- s! e: }# E' e" m8 m% B7 h7 F- l6 i( r" r4 @
临时修复: 8 ?" Z. H0 T/ y. `
1)Include/payment/alipay.php
% Q f" ]7 W' T) ^1 A! S 大概133行左右3 Y$ i [+ |8 m! @; Q1 B4 d( x( |
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';. K# `5 y! K: W" O3 w6 N
替换7 ^( J1 A5 T$ e; L1 g" t3 L
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
1 T& a& F( B& K5 }2 N. [2) Include/payment/yeepay.php7 S8 |) e9 r& u; N
大概在145行左右
% j& v/ r; f: i: P& H5 @# B require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
( \0 U& ~* d- t: n# O 替换
( Z v6 d% x; U! G: l7 H. i6 U6 q require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
B1 p3 l/ G- P, N; P$ K 1 ^" \/ b- L8 `# {
|