漏洞版本:' V" X7 Y) O9 P7 m! @! B0 ^
DedeCms 5.x漏洞描述:
& l' h) E( A% C* SDedeCms是免费的PHP网站内容管理系统。
% K, @$ z. O6 [: t; G% O* d. Q- z2 p6 ]8 P- Q p
plus/carbuyaction.php里没有对变量进行严格的过滤
' E# W! q- V/ X5 \0 t' b' s l4 P3 b) a8 L, s& }. e
出现漏洞的两个文件为:
3 L" i! M! ~% l2 t* rInclude/payment/alipay.php
: ]7 C7 ? M9 s6 I- R# zInclude/payment/yeepay.php
+ o7 w: T8 ^$ T- t6 b) D# F漏洞均出现在respond方法里- x! F+ h: N/ a
. Z) j c& ?6 m: M2 a3 _0 f K8 w
Include/payment/alipay.php
8 i# F1 T8 |6 X5 @2 c......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
4 L, V1 Z. E8 B% y4 D' c4 b8 |5 U, \
3 H2 x1 z) k) u( {6 X大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。0 R' Q# p/ _" ^ Z& O7 r
Include/payment/yeepay.php
! u) \' D# f6 g......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......% t) |* ]0 c# x& ^% ~
/ P% K; C3 G! u9 f! U9 E
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
' D4 G5 R( v) s2 U0 B& ?, lhttp://bugscan.net/manage/node/83
0 e* T- k! }: l6 I; X. `# D5 Phttp://www.cnseay.com/2515/' N) S" v$ h, v! a
*>
2 Y0 Y6 U& U8 o测试方法:/ Z0 x- |0 f% t; ]/ O ?4 {& H
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie 7 O% e1 T6 x6 I5 ]7 a0 x
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
( W$ G. L8 h. W% A+ C修复方法:
, A; Y/ e& C# N/ J, B目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:# Y; _( h* {$ c; Y5 S
http://www.dedecms.com/products/dedecms/
# H2 w7 {+ I ~6 o# q- P) J3 v( C: @
9 Z ~1 h, N2 F H: N- P* n9 H 临时修复:
1 x7 Z6 o1 Y8 n r1)Include/payment/alipay.php4 j1 H ]- |; u# ]5 }- K
大概133行左右4 D/ g1 P# l" l! c& M8 b$ C
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';! H& o% t, v3 ^% [
替换+ C2 l& ?* d+ {7 I' N5 X- R8 K! ?
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';0 X4 ?7 S X) P$ I, f7 N; R4 @( i# v
2) Include/payment/yeepay.php
# s" a8 o, G# Y6 W, ]大概在145行左右& c$ L' W, u8 c; t" p5 b6 o5 H
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
& x) X. T' X$ p! j, [$ ~ 替换
4 z% C5 @; Y' n! R require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';6 _% b3 \' d- N# H4 w! l
1 g( E: u# ^4 N3 p: {1 L |