漏洞版本:
, B1 N& s; R. s oDedeCms 5.x漏洞描述:
/ N" B5 e+ v3 ?; v2 D7 a7 R, MDedeCms是免费的PHP网站内容管理系统。: \1 M. F/ y3 o, R. y8 x
8 a0 l X+ z6 `
plus/carbuyaction.php里没有对变量进行严格的过滤
7 G+ t. [' s; j& I) f' g- J1 P1 E0 v. x2 E4 T/ B9 a6 x! E
出现漏洞的两个文件为:
0 s" a2 R) W( X+ P( A0 f4 H6 VInclude/payment/alipay.php2 h& ?$ e- F- v: f9 _3 p
Include/payment/yeepay.php
4 X1 K* g2 A! h( U% ~9 o漏洞均出现在respond方法里5 {; e+ z2 D1 W y' j0 {% \! Q) y
0 N% X- i2 ^2 f# \) A
Include/payment/alipay.php 5 y& |( G/ B$ P8 y( x& ?
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
1 R0 _: h' k$ |- \. ~8 }" X
' {* v, F* @$ ^9 \+ z大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。7 u& M+ [2 x' ]( r5 |
Include/payment/yeepay.php
' U' u! h/ F! M& B* B( v......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......4 d2 `) r& K4 {* Y/ q
! X6 F) e5 R" f6 _0 D% Q2 U大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
6 d1 p+ O. |" H. i0 p0 fhttp://bugscan.net/manage/node/83
$ N. u5 {. P$ S7 j7 [0 A- Dhttp://www.cnseay.com/2515/
& R% A i4 {! S- v; W*>4 V2 T/ y m% t, x! U. _
测试方法:
" U( D: }. x* T" t. [1 B5 r. z1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie " \" z+ `7 A) X) |) S! w
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径) N: @( ?8 e( @& J+ p0 E
修复方法:
6 M- b& l, W6 v" e' M/ Z" L. I0 d6 K目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:- y7 |+ h/ f( J9 P
http://www.dedecms.com/products/dedecms/
6 G' r0 ^: t/ ^ Q) L* v" J U# {, I9 T- K1 z
临时修复: 4 R4 c- \. o" v9 N# ^0 T
1)Include/payment/alipay.php
4 `# T S5 A- z, M5 r0 q 大概133行左右
2 F$ t# [# V: l0 d/ k* R- {8 N+ Z# Z0 A require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
& M: E. e4 U$ b2 f- A替换- R% X5 [3 I' i0 U& @* @; X2 H9 H
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
+ b+ _% ` _9 V7 U) ^2) Include/payment/yeepay.php
+ K6 J$ b: C9 H9 D0 c! p大概在145行左右( q4 u Q, b# r& r s4 V
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';# k+ o9 a( c$ I6 C1 _0 y& T
替换
+ [7 ?0 b l4 d require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';# ^, p0 J# F- R: C+ S. f
1 |; ~& Y: e& ?& y |