漏洞版本:
" D$ i. |9 g( C6 \+ _DedeCms 5.x漏洞描述:2 M" x( A; p( U
DedeCms是免费的PHP网站内容管理系统。
# X) U; ~4 u5 P
. c; C5 e4 F$ b. jplus/carbuyaction.php里没有对变量进行严格的过滤, t4 F" {0 d/ h
' j* M4 f' o- T6 Z5 b q; b" O出现漏洞的两个文件为:
; \, n' U% Z4 g9 b: q* P( WInclude/payment/alipay.php; s9 h" f0 U! ?# [' X0 `
Include/payment/yeepay.php/ A& a" D; E7 c: D/ X
漏洞均出现在respond方法里8 i( p( h+ Z1 ^6 D1 e
/ t' {1 z# x J( ^; Z( _0 d
Include/payment/alipay.php - J, K# v2 p" Q( ~
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
" S/ m- A" f. b z; r8 C
' }6 N- ? W: A大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
1 c+ M U9 h4 `1 b J. `. \4 @Include/payment/yeepay.php/ Q+ N5 N' @$ n9 ^4 |
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
% M2 T* p$ O+ r& E9 p* Q! r 0 L5 w" G% Z3 c, H' n
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考$ e( _! a- q6 V, e l! {& Q9 q
http://bugscan.net/manage/node/833 c- }6 S/ I0 D% F( f! @
http://www.cnseay.com/2515/
; m0 F! N3 f- I( Z0 \0 l*>! q. H4 G3 ~6 A ^( K& r1 A% G. I
测试方法:, h( ^, @! @* |5 f L" }& k
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie ( E- D* s+ P* H, C0 ]+ r
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径& v6 c! F; U7 S F; D. t: R
修复方法:# P$ o! `' P6 g
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
0 c8 _$ y% ? z- Khttp://www.dedecms.com/products/dedecms/
$ x. P+ R+ S O: u2 ^# G2 ?+ h( N3 i& q: z' E& h
临时修复:
m7 t7 h! r# v( M& O) |1)Include/payment/alipay.php
/ J* ~. g/ N; w# M/ ^5 `% }( T; g 大概133行左右
" Y6 y8 \6 Q' @% F! b( `3 D, B require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
$ W: Y' n0 `% j' G替换
2 j( G6 W7 B1 {, Q require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';6 e2 w4 ]9 l5 E' Y
2) Include/payment/yeepay.php
1 Z- }9 k3 u2 c" O- {/ d2 M( }8 r大概在145行左右8 M# W$ I8 H; t
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';. Y! ?5 \! ?0 y$ R. t& \: W$ S1 A
替换
$ P# K3 s2 |" V+ ~ \3 N require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';2 f' C# [$ @1 U
4 T3 |0 v, l4 [% V8 a |