漏洞版本:
& A& Y) J$ S7 H+ f* mDedeCms 5.x漏洞描述:7 l2 o9 B: n, D% w
DedeCms是免费的PHP网站内容管理系统。
1 m) O& d5 J5 k7 e2 @6 |8 c# `% r. i. b, p! }! d
plus/carbuyaction.php里没有对变量进行严格的过滤 U* o: f( A. ?9 N
7 D+ r/ z' S$ f3 C出现漏洞的两个文件为:" f }( G X7 i8 o4 B$ b# \
Include/payment/alipay.php# ]# e. L4 p! N: ^
Include/payment/yeepay.php2 f2 W+ e ]' ? C
漏洞均出现在respond方法里1 j4 I4 U/ s' C) E# I( Z
' H; | q! ]* a& v3 f8 J
Include/payment/alipay.php
% a! b4 t, {& D( V2 \......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
6 f9 n7 h* \" e/ Z2 {; f9 c* y 7 s" i6 X0 A1 K/ V9 F
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。+ F0 y/ A1 y4 i- I
Include/payment/yeepay.php
* _9 j4 p- U" X# V* _. ?......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
8 `9 g$ _- |% w+ t9 O7 R2 e+ ~ " e2 J9 C6 b9 |: r- }
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考6 E7 ~ y3 A: p" S6 j9 V0 T
http://bugscan.net/manage/node/83" D7 l2 u% C* G: g* ]# ]" _
http://www.cnseay.com/2515/" v! }! S6 u1 w- f
*>
. E4 }( C. X7 p/ P测试方法:. w2 D7 T: ~5 C3 z
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
- w& I$ d8 A0 h9 N% Y1 w4 _2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
% w/ y' g0 n8 b5 s! M" {" t修复方法:( ?" @& r7 l: b$ m7 l# F/ r
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
7 V4 ?- V! C$ G$ qhttp://www.dedecms.com/products/dedecms/
/ M! I, w3 M1 o8 `2 J4 h [' q( B# v* Q3 B) P, [2 d
临时修复:
6 a2 z8 i$ ^3 [1 {' b5 T( J9 K1)Include/payment/alipay.php
" _( c& e1 x( g7 i 大概133行左右
. X' b2 d+ F( t& }) @/ j require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
v$ X" i1 u! d- e! A9 s替换
7 {; O1 C6 l' c2 s8 k require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';* y/ i* y0 d4 w- L ~
2) Include/payment/yeepay.php6 b4 V: k h }, P8 {/ q7 b+ F
大概在145行左右" ?0 G( j& C; o! r2 t/ t1 ]
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
* y# O# C K6 ^# l$ S" y" n* T 替换
- T$ o6 y; _; M7 F- d require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';3 T% p2 t9 V7 X5 f8 I, p- m
: }1 w& p2 i+ L/ ?% K5 E c
|