漏洞版本:
* q# e" f6 B9 T- J- V+ Z- l, gDedeCms 5.x漏洞描述:5 z& M5 u& i: m+ F0 J# V6 x
DedeCms是免费的PHP网站内容管理系统。& `+ I) Z+ d3 s' T. c& d8 `
2 ]5 Y( X! h! ] Yplus/carbuyaction.php里没有对变量进行严格的过滤
/ ` w* l0 H/ `8 a; c; N! w
4 j3 m! L- @3 z5 w4 n4 m) i+ u) A6 M4 L出现漏洞的两个文件为:( p& V; g9 B6 K- P/ l) H2 c' }
Include/payment/alipay.php
" o3 s' Z6 i9 D3 IInclude/payment/yeepay.php
+ c* n6 i+ x4 \; b; N漏洞均出现在respond方法里
1 ?3 M5 m0 Z/ G) O
4 O/ B7 u9 O+ h7 A- i2 t6 h! o% A" IInclude/payment/alipay.php
3 N; ~) {. ~( L......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......5 _0 T; Y p, b' d I1 ?
! Y1 U9 M b* n9 D- N% v, p大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
+ [2 r+ ^' }0 D) p' jInclude/payment/yeepay.php$ o- v# G U2 H% \# a
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......% V. o" a$ ~# h
# O: n5 W6 d5 ]
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
, e% o- X! L3 Z: Shttp://bugscan.net/manage/node/83
5 R# P* K& |4 T) J- Ehttp://www.cnseay.com/2515/9 y5 Y8 }1 V6 f0 c, L; U
*>
) G/ O' ]- Q" `+ b测试方法:( K" m/ M! _+ {' I6 H. ?1 P8 W3 L
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
: w' y! T8 j/ h2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
' b. g W( p c/ K, E. P修复方法: [0 l5 _! N- f
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:, S" Q$ V% I0 o: x! L4 U
http://www.dedecms.com/products/dedecms/! j1 _8 o' ^ w4 Q
8 V) L! t$ ]. F. K& J
临时修复:
& a8 ]5 w# w4 e# D R# Y1)Include/payment/alipay.php# |+ z6 ]# ~5 a) O* q% C
大概133行左右
9 z# `& Y j7 m9 j( N require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
- c9 {. I; z0 X' d, t5 O/ {替换8 A1 W: [7 ~& M0 G g# d/ }
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';! H' B) H! p" J) O
2) Include/payment/yeepay.php
/ }7 h' q3 |" `$ A大概在145行左右
T9 E9 ^2 G8 b require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
$ \6 `* p; p: l C s 替换$ z. N p7 J* z) A9 m
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
! H9 D0 Y% p' f3 u2 ~' E/ { U
2 a t* l* c n( W |