漏洞版本:
% q* G: M- q/ {9 P2 T7 }DedeCms 5.x漏洞描述:
r' [3 N/ b+ _8 P8 m0 `DedeCms是免费的PHP网站内容管理系统。5 n6 q: C, f- K4 u
; j( w' o2 }* d# F2 |. Eplus/carbuyaction.php里没有对变量进行严格的过滤" b5 c- S0 Z2 F y w( f5 o
6 B! O$ k; D2 v c6 u出现漏洞的两个文件为:
0 Q3 s: _9 N) @- MInclude/payment/alipay.php
* f* r2 ]2 g/ yInclude/payment/yeepay.php
8 S+ C3 }" w" @. \2 ^) `) J0 s漏洞均出现在respond方法里
1 J( C/ i; K7 `& X8 a, x3 a0 `9 t8 T) n4 |0 l% @+ c; P* R ?3 L
Include/payment/alipay.php 6 W7 w5 A( |! O8 a) Z; ]" e7 g! |7 [
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
8 ]+ w( u" ?/ x/ W, R) a+ W
8 x" x* i$ B- e! [4 O, i# r大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
# P% Q$ l7 Q8 o; BInclude/payment/yeepay.php1 a. K; [( T/ D# D f* N, C
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......) J7 u. A) b/ l2 K' `
- Z$ G3 P6 x& H5 t0 L: A7 X大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
& q2 J5 n! M) y% \& h* }http://bugscan.net/manage/node/83
$ M8 m' h" i6 U0 N1 t* o% ?" _http://www.cnseay.com/2515/) N% i. H' z( m" Q% Z/ N# q. q
*>
6 K# i: y* A3 P. L& R5 t测试方法:; P6 P' v7 H+ j+ g, r7 \! h; k
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
4 Z* P* Y2 J" a2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径1 x3 b" G# u% c. s
修复方法:* i$ N7 p4 u6 X: {; r* m7 T' u) w
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
J9 Q+ J1 g0 r0 p" B) S3 t8 _7 thttp://www.dedecms.com/products/dedecms// V2 ~" U5 M0 r6 j7 A
: f' `# e, `7 a7 e 临时修复:
% |- V; H2 Z y1)Include/payment/alipay.php
0 p" [) ?% n, V 大概133行左右
1 Q8 t1 W( H8 {6 B6 P require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
) o3 u4 A& f/ Z2 D/ C替换
. \ P6 s$ a2 i require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';8 w; u1 q; q% ] z8 @# ~- C7 A
2) Include/payment/yeepay.php( b: t# h$ A0 F
大概在145行左右; z; H5 r. S% D6 F0 ?0 T+ H x
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
- `' W9 C7 l7 A7 W 替换1 q% A7 W, C/ I
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
, y3 U5 h4 F8 m " W$ o0 K3 {) {+ G3 A
|