漏洞版本:- E6 ?3 h4 V" y& S; h, T
DedeCms 5.x漏洞描述:/ O) ~5 \/ H; U& ~1 Z
DedeCms是免费的PHP网站内容管理系统。
: H. f4 N ]" E- A! m( k) Z$ q7 o
plus/carbuyaction.php里没有对变量进行严格的过滤
& ^/ Y4 e, e' h: c# R1 g# O
: U, _+ c( A7 ?( p! q* }8 }5 S出现漏洞的两个文件为:
6 o# m9 X# }" H/ y- ]Include/payment/alipay.php
) L; y' y, ~6 j2 q6 rInclude/payment/yeepay.php8 x8 I4 R2 v# ]8 n5 A$ Q
漏洞均出现在respond方法里5 o0 q$ d, d( \3 Y( G
* v+ @9 W! f8 F3 }; p8 M8 U
Include/payment/alipay.php 3 C! E* {" |2 |: | u$ J
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
- T8 T$ s" V( D7 Q, h2 f, n% p
& O4 o* p+ ~, _2 D# j大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。1 I$ h) v# I* C. P$ j6 l/ ~
Include/payment/yeepay.php, e2 g8 i& q$ s( Z4 l
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
) F) P2 }! d) z Z. G3 t" z8 k& b + c* Y/ U& m0 U: e! w* Z0 B
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考9 N A2 c/ @$ v& E2 M* r1 A! T" |
http://bugscan.net/manage/node/83. C, n( j* U) G4 H
http://www.cnseay.com/2515/2 u4 I( K6 y% q y! R. X
*>
, Q% l" | h. z; ^* u* w测试方法:
. h$ u2 U6 t7 r$ b) M. f. r' n2 @1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie , p, [/ d" Y% n+ V9 K. ]1 \
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径8 v( e; F: b U9 i2 _, U
修复方法:, J3 [. I% ]7 M* p9 x- e" ]& B2 _7 c
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
" K% c. _1 g; P3 v0 ?8 c8 Khttp://www.dedecms.com/products/dedecms/
' n, Y" u- ^, |8 X5 f4 W
6 Q: W- w; g) ^8 A) q 临时修复:
. W! q7 j1 i! `1)Include/payment/alipay.php+ |3 R& B9 r C" Q7 `
大概133行左右4 {0 n7 p2 F! U- X, y/ t
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';; j8 X/ F% c1 g, z" r5 L
替换' }/ e- [0 a1 J! @4 m
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';. L! ]# h# I( e
2) Include/payment/yeepay.php' U, ^6 Y2 W9 }5 c3 D$ D
大概在145行左右& ~7 `# J- y! O& j
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';5 s( M2 Z$ ^; y4 }$ x7 Q$ |
替换 d' _# C0 A2 \) K
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
# E! F' x2 l% w$ ]. J, h" o8 f! }
7 K% c. D" l. j7 g/ O |