漏洞版本:6 z( @$ l" _# c Y3 E' i8 f
DedeCms 5.x漏洞描述:6 q# q1 g' [ v' g. A
DedeCms是免费的PHP网站内容管理系统。
7 U3 G4 i, ^+ J. W' B m9 M8 N' y+ T2 T& V. u1 o2 n$ L) U
plus/carbuyaction.php里没有对变量进行严格的过滤" v* d, S# ^" v
3 \2 O# ?) P( N+ ?' v' c6 V! O1 i
出现漏洞的两个文件为:: V( v* g- a! k/ T! \
Include/payment/alipay.php# N( o: x; D L* N$ l& X
Include/payment/yeepay.php/ }5 p' Z! K0 z* |2 z
漏洞均出现在respond方法里
- [1 y$ T4 K7 C- a% o4 o
1 j2 t/ ~: W) s' ]Include/payment/alipay.php
9 F- y: H+ W4 b1 V/ h6 o% B' ~......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......' W# [* [: \. u& @# [
' x; w8 X. |+ b6 }/ B) k
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
3 m# P6 N$ G, F" o; I/ m; _ }) tInclude/payment/yeepay.php
# v; A+ e& @$ ?6 ?# q......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......1 O" s1 o2 s2 f- R4 q
' l" P* S0 a' i$ v大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考5 k; k6 ]0 ?. w S. h! g- S( G9 v
http://bugscan.net/manage/node/839 R! [' t( i5 k# O0 i
http://www.cnseay.com/2515/, |# P$ W: u' v$ D) n
*>
( k. S5 O* r: T, u2 e3 D2 E2 h测试方法:
$ I+ J, @( W* E0 f9 U9 C1 n* L: C- o1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
: a* N2 O( Z! S# ?2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
& `2 K8 L: ], I$ ]) {( o修复方法:' g+ @$ C) p+ Q7 K3 K! x9 D
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
7 |0 y& A& h7 w- t$ I: ~ L: L2 Zhttp://www.dedecms.com/products/dedecms/; K( o; z5 y8 ?: y2 _1 J
: c* D Y5 X4 ~3 U P 临时修复:
$ L; D& K$ u4 [! d1)Include/payment/alipay.php
`/ n6 a' N1 A/ t ? 大概133行左右4 N: I" r4 f' ]! {; [/ R/ b" }
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
6 H" M9 M* ^2 j7 c. a替换
B- n# D# Q/ s- R O* B require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
0 m: i. O2 ~; w. C2) Include/payment/yeepay.php
- {9 | y! ?0 C; g大概在145行左右
k# ?) y9 |% ]6 o* v' m6 b require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';" O8 Q# o% v8 q, y% n
替换
n* B8 _1 ~4 \8 W require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
* ~( z7 x' Q" h; ~# x. M6 m 4 k+ D3 n! w4 G3 q
|