漏洞版本:% w2 z9 @9 m& q3 k8 K# D* a# l
DedeCms 5.x漏洞描述:# I$ z% K$ V' T: M, K5 J
DedeCms是免费的PHP网站内容管理系统。( ]- ]1 {3 I! J! o6 e& U
% t% z- Q2 N9 Q4 A4 q
plus/carbuyaction.php里没有对变量进行严格的过滤/ P/ w' F0 B3 v6 z( ^+ g7 [5 m
# x2 K# T' ~- Y3 R. h
出现漏洞的两个文件为:% q! Q! n" {5 r( B |1 T+ d# Y
Include/payment/alipay.php* n& i% a3 g5 }% Q! W
Include/payment/yeepay.php
5 J; c6 p: r4 [) B8 g. u漏洞均出现在respond方法里+ K( l, q- Q2 P3 l! n) C
( ^3 S |8 m9 ?- E' E' I
Include/payment/alipay.php 5 o$ Z* u' T+ ?( ]6 X
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
8 V1 [7 ^0 v& Z/ Q
+ T( [: n" w9 c( H6 }大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
% y3 y. w% C# ?( S: VInclude/payment/yeepay.php0 x% f0 ^! S+ o9 E1 c4 @& C
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......9 z. c- S3 r+ `: t
* p' Q$ u% ` S3 U. |- n
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考7 l% g& [' t* q* X; A
http://bugscan.net/manage/node/837 N: J* ~# _- y3 y& j" {! |
http://www.cnseay.com/2515/8 J- W: ]4 G8 s$ m0 ?; @) _
*>; x4 L5 g5 M8 `! N
测试方法:7 J9 D7 G6 N5 `+ U3 p
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie ' F) A" }+ |+ F/ M( g" n
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
: U" r/ y3 s% R' D修复方法:
) ^5 F3 }/ c2 g& }$ H: U. D% g目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
% F# X' q4 o+ `8 t v. `http://www.dedecms.com/products/dedecms/
$ ]; i: d0 ]5 R7 L2 x" J5 J5 |3 \
临时修复: + r7 R: U. n; j
1)Include/payment/alipay.php* E" o$ E" _! [6 n5 u
大概133行左右4 b* R' o- E7 r. q
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
. @ c. w8 z" y d7 x替换
& ]5 Y6 A. R5 f, x9 [ require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
1 @8 e, F8 ]" X; Y/ E5 u; U2) Include/payment/yeepay.php
- v; c# ^- X0 d+ M! U大概在145行左右
) G+ v/ |4 } K require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';. M+ x0 K$ h7 W& i' i
替换# v) H! i- m& R% l. g* X
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
' ^( B& {# `3 k - B! n' N, ^9 j! L
|