漏洞版本:
( c- E, _* [' H0 S7 H- r CDedeCms 5.x漏洞描述:- h" [ E) [9 r
DedeCms是免费的PHP网站内容管理系统。
' h; `8 L/ A7 h. J. ^& T! U. W6 B! x, o
0 I: ?' V8 q$ _! `' l8 n, bplus/carbuyaction.php里没有对变量进行严格的过滤
5 T0 j2 p! U: J7 v8 F' L/ G. T2 H0 }
出现漏洞的两个文件为:" f4 @6 ~7 d" J
Include/payment/alipay.php6 M/ C' o4 c0 \2 d4 ]) H
Include/payment/yeepay.php
' }& s9 k! b, V+ W漏洞均出现在respond方法里, X" `' Y+ L+ g$ }, ?4 D
- [! l+ |$ `! ]9 e6 P+ U- \
Include/payment/alipay.php 0 T3 G. H/ e: ~- b" `! K
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
6 O0 L# n1 V. I r9 [% V1 L) w
0 s0 ~2 L8 S- e! I8 [; w, ^大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。0 v- E8 Q0 I0 H
Include/payment/yeepay.php
9 b" _3 m8 h" E......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......# p B5 r$ O- j* g2 f8 h% D
9 I& C, Q9 m2 y) S
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考/ f8 G& m- F5 S4 W' l4 |3 T
http://bugscan.net/manage/node/83
: ?6 J6 T( d. R( e; Ehttp://www.cnseay.com/2515/
% f8 d! Z* {8 P- f*>, }5 g/ `. ]6 Q
测试方法:
, M% H; |! H! u/ g. e5 g1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
: K3 ?; a" q/ x2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
, p6 p2 q6 D+ L" j$ ^1 ?; ^$ b修复方法:6 V) H, E1 O6 p% N8 d' ^1 o2 W! ]
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
4 `( G: E8 W2 ]9 i. U9 Mhttp://www.dedecms.com/products/dedecms/5 j+ o' _8 W0 {) d2 n9 e) x
) g2 I4 e( p0 o4 Y. P 临时修复: % K( q8 N5 L A4 d5 l1 M0 Y
1)Include/payment/alipay.php
, {2 |4 K/ n2 T( ^5 S( h 大概133行左右0 X; r* \% D. ^/ z" U1 ?0 ~6 A
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';& w! ?4 d: j# d' T6 s. {
替换
- n# [4 y' Q+ {' D require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';5 s4 ]! V! t# h7 l. w8 K7 ~
2) Include/payment/yeepay.php9 {+ S7 e: s) |8 J% w
大概在145行左右
' `# N Y( B& S% T$ C- i! H/ E; e1 Z require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
* b6 E) |7 D9 B) D 替换% D* }% a: T! W+ {7 v7 ]
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';+ ]* b! |0 _ [2 G7 ~
. v# y9 l1 g4 k; J |