漏洞版本:3 o" G$ a2 c) U8 ?0 ]+ y
DedeCms 5.x漏洞描述:
0 G' V6 x$ Q2 S6 lDedeCms是免费的PHP网站内容管理系统。8 i5 x' F2 h) s5 j5 D
& h j1 X U2 _- R4 Dplus/carbuyaction.php里没有对变量进行严格的过滤
" w* M, s9 t5 J9 c. d( \. F
1 p- A- X4 b+ m1 Z4 s出现漏洞的两个文件为:
0 ~9 H/ [8 ^' N o5 F7 `Include/payment/alipay.php/ _& y+ C7 H7 e8 V8 a7 `- P
Include/payment/yeepay.php. h; `$ }8 {) r1 \3 @8 S0 `
漏洞均出现在respond方法里 @6 ^7 A3 I9 p4 l- m W! [% U) w
* U+ ?' E3 \0 ]- K3 G0 \0 i
Include/payment/alipay.php 2 X6 z9 _% |6 I% _# L
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
. Z s6 [5 s" A# N) Z, H
& B& i( L, f5 x6 p! W1 E6 S大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
; G; J, l# `8 Z) l6 ^, RInclude/payment/yeepay.php
2 q8 r" }1 d! @2 M3 M! Q; P2 [7 Z......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
2 y) Z: P& J7 l * f9 a5 J* N- W! `
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考; r! k6 a/ u$ }
http://bugscan.net/manage/node/83
" z6 x% ^ W ~7 E1 n: f) Dhttp://www.cnseay.com/2515/
6 m* T2 R" T" [3 m% A& H6 b*>
" `, @% N* a1 T" V测试方法:
& D# x5 l" ?- ^& u" ]1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie , j4 D+ j: [6 F8 u7 R5 c# h7 D
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
, u/ g/ {* k5 w5 D9 t% z* E修复方法:0 y8 K( }( Z5 I( \7 g
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:" V4 D" d0 @/ i) i7 X- X
http://www.dedecms.com/products/dedecms/
' e8 p% @; S; w" j9 ]; T0 D; V' d3 c! u4 y! o
临时修复: ! C8 w0 I9 Y/ n( ^# {4 L+ ^: f
1)Include/payment/alipay.php }1 D/ O+ }* {
大概133行左右
1 t* a. ]/ u u( ~ require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';' m0 D1 m8 s; i$ `+ W3 P& |
替换% Q% h# b" W8 L% _! g
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
3 D7 ^% Q! c2 x' i2 V" b8 B2) Include/payment/yeepay.php
1 T( f s: ~ G. t" R4 ^: J大概在145行左右% O& D8 g: P! m' I6 @. m
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
# G# M! l" E4 _% b/ X8 r 替换* [& R. d( a3 @$ s5 \/ t# }
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
( C8 }0 k; q2 t' d1 C
2 B0 X$ w' M$ m1 F- V" F1 V |