漏洞版本:
1 w- b K9 E1 _. lDedeCms 5.x漏洞描述:
. K: O: p2 D4 eDedeCms是免费的PHP网站内容管理系统。 m8 n3 ?/ w2 N' C+ U- i
3 o6 L' i9 _/ h5 ]/ z
plus/carbuyaction.php里没有对变量进行严格的过滤
) C r) j, K* Q8 P/ t3 h, w: ~3 V8 C5 P; b
出现漏洞的两个文件为:' T4 ^. z" { n/ m
Include/payment/alipay.php
) ?' l' H" B; u' ZInclude/payment/yeepay.php" f1 w; l1 @+ D4 k3 ?: e0 f
漏洞均出现在respond方法里
3 Q: _. t% o% z) X" c! Q+ B* e2 T1 l- z# d L
Include/payment/alipay.php
" K& \# Y6 h9 u: M......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......; q+ i+ R: I' \* N
0 Q' [2 N6 Z, _1 |7 ?1 {
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。) O' y6 x E0 ?/ V' d
Include/payment/yeepay.php9 y$ j4 |+ M: z! V# {/ ?) a$ l
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
3 n+ {& g2 m0 y/ {, l! }- N
; ]: U' E' g8 m Q" @! T7 u大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
% \* s. K N% A) F# zhttp://bugscan.net/manage/node/83; D9 o$ w4 ]8 ]' e) `& m$ P2 q
http://www.cnseay.com/2515/
, d5 v% M& L/ q# p" P*>
8 n3 i+ _1 {& x( v$ n' _% M测试方法:$ ~7 h0 w9 I' I6 u5 A* ?5 K
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
$ M- V, M( o& v7 W( Y0 ]# R2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径% u. d2 u$ i1 B: V+ Q1 Z
修复方法:
& @' ^, m% o8 W, f9 `- J4 z2 t- c目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
. @' U; S' ^% g9 N; Q* X1 fhttp://www.dedecms.com/products/dedecms/& \ w. `! w- D, X( j/ }1 t. X' H
+ c' h$ X( H% J; E2 o7 ]; T1 B 临时修复: % |. |( w6 f9 `0 r& z
1)Include/payment/alipay.php
" A% b6 b+ r- q7 f& c7 Q( Q 大概133行左右! p' f3 x$ W+ J! z1 K+ H
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';9 \ C0 I2 E* j' O5 t ?( P
替换
q; `' w6 Y" O8 U% Z) q1 Z* Q4 R6 R require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
0 ^$ s/ r6 t/ ~9 P2) Include/payment/yeepay.php8 K: F* B. P, H
大概在145行左右
8 I/ q6 i0 }0 p2 } require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
; `* l# f: v( s# W; v U 替换
/ i% ?2 L* N' q require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';( o3 D. O8 m8 @' a2 a
5 b5 W8 R5 k, w; S2 g( I" T8 g6 l |