漏洞版本:6 `7 d m6 \4 \9 ~. u
DedeCms 5.x漏洞描述:
6 W1 V2 h! H/ t; sDedeCms是免费的PHP网站内容管理系统。3 C% M( X9 O1 \: s* x
. F: T; I, t* L" Q. \( F# ?! [
plus/carbuyaction.php里没有对变量进行严格的过滤
4 g2 N* u3 _4 n/ ~4 n- j, i C: G' b: @
出现漏洞的两个文件为:0 R* T w( h+ @$ q a; d4 t
Include/payment/alipay.php; t5 W: F- u: {
Include/payment/yeepay.php7 v" k& ], F& s) b% |
漏洞均出现在respond方法里
" w7 A0 r6 h( ~5 p$ |4 |; w* }% ]3 v+ b: ^6 }2 M
Include/payment/alipay.php
- a% Y; v: y0 k1 C# Z......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......# S6 x# }. Z" F- U! ^+ W
1 `; f/ p; v3 e$ J+ ^5 E
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
& `6 {7 ]; R( Y6 ]Include/payment/yeepay.php4 \* d4 ~/ j" p# q# ~3 O( h# q; u- E
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
2 ?# i; ?$ r/ P* B4 p ( i0 {7 n5 n8 g, R5 j
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
% D/ v$ f7 a2 H" _8 o3 u6 _, ahttp://bugscan.net/manage/node/837 F( m0 S& Y3 ~+ c' O
http://www.cnseay.com/2515/ j! r: J" q" F- q$ x1 { h( h
*>
8 ]' q, F1 Y% `/ |/ Q5 w测试方法:7 g. F+ F* l5 W$ ~4 r+ \( Z7 O
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
/ X* T, w4 ]4 o2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径2 b6 A; M+ r. X: n" `6 ?! |
修复方法:
. T* x& s6 J0 P' ?/ n ], h目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
( ]- V5 q, k9 V+ Rhttp://www.dedecms.com/products/dedecms/$ Y) F5 S" f) t8 w' o) `4 v
7 K; G; ?% v0 }) g2 q6 e
临时修复: . t1 p* N2 J' I
1)Include/payment/alipay.php
9 E; n2 e3 m/ ^- i# z7 X 大概133行左右
% _; \6 e( H7 L" C require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';% L/ i Y/ q/ o: L& e
替换
" W; ]# L' s8 b require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';# ?# Y/ X( `) P3 j B0 @2 Q
2) Include/payment/yeepay.php" h9 P' e1 d# \9 q# T
大概在145行左右
) S) l3 g7 z) r% }" z+ q! T/ O require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
: f; \" o' }) R! z' N 替换/ M8 X; u) v. _1 s& ?8 G
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
: {) d* {) w0 x) n3 o
|' a6 J1 H) y$ U9 B' w/ F |