漏洞版本:8 Z; F, h+ d+ ^# S1 ?
DedeCms 5.x漏洞描述:
; ]4 y* U' g0 Y0 ]DedeCms是免费的PHP网站内容管理系统。/ j0 h9 N. g( T5 n( l- Z
5 b* k' m; d6 K0 X. V3 N! U( |; |plus/carbuyaction.php里没有对变量进行严格的过滤
: f$ [* [/ ^& k0 L7 L! ?. j! [$ V' N+ ~, I0 u2 {
出现漏洞的两个文件为:
/ r' L4 y- _( u; g2 ?, [Include/payment/alipay.php- P. L' A) [9 w" [3 @' t
Include/payment/yeepay.php
1 E0 }- X9 n3 I- ?漏洞均出现在respond方法里
% ` w" t2 @7 f* q9 o, s; z/ \( G0 ]7 s, j; C7 d
Include/payment/alipay.php
6 B8 n9 A& O" \" g/ }) \) j......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......! @( v& o/ S2 w- l: G
4 K$ I6 a! o; C w; V( D1 G
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。7 s) d0 ?& B: s8 Q W2 v/ x1 l
Include/payment/yeepay.php$ N1 O8 g* a& E
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......' C+ }% E) o: B# N2 L% h5 F
, Q" F8 i$ J1 |& Z$ w7 O
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考+ ~4 _) O8 J, v, E
http://bugscan.net/manage/node/83/ X+ O; E3 K- @: a; B6 Q# S
http://www.cnseay.com/2515/, ~/ V2 p' J3 ~% l( L' l; J/ _ ^
*>
- f- |7 h! G7 F/ [9 p. O测试方法:
1 s1 b& t7 S3 c1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
# n* l2 ]+ I( Y7 m8 `2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
9 h& ?" I- b* ^; t修复方法:" t: x& ~9 p, T% x- \) L" h
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:% A8 q l. m/ [+ S i3 c& p% o. y' v" Y6 K
http://www.dedecms.com/products/dedecms/: B$ E; q9 s; b+ S# M
1 Y! t0 I; h% U 临时修复:
! _" K0 b& @4 L2 F k1)Include/payment/alipay.php
, J. e8 r& [6 G8 h. C5 h5 H 大概133行左右
% h( }3 m/ W- T7 l$ m require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';. S5 n" ~ f& @
替换' `, G3 H C* ?' V6 K) \1 `
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';2 H$ _ U4 t. s; w( M% Z# d3 f
2) Include/payment/yeepay.php5 ?- o+ ?# ^1 y! H+ e! L0 x
大概在145行左右
" L( Q; s# l/ e9 j require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
/ ]/ a* h( x( h$ R+ j" Z 替换
$ V( f# R' b, c% t, y require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
- q" k$ s. B) l, p $ r" D2 i% d) V
|