漏洞版本:9 j+ p4 A* R: w/ D$ i9 U0 _, O
DedeCms 5.x漏洞描述:3 {$ B8 G6 B& F, o9 C$ g8 t
DedeCms是免费的PHP网站内容管理系统。$ i" E+ w( n& W/ c- u1 ~7 G
2 S5 V9 S0 d7 T+ W3 c
plus/carbuyaction.php里没有对变量进行严格的过滤
9 a% n8 p( X3 {( [2 `/ B: i; Y* I' q( y) D) X+ x! J
出现漏洞的两个文件为:) o$ y3 i) [3 [) L0 j5 G
Include/payment/alipay.php
" L6 V* q. D% x* J1 Y1 QInclude/payment/yeepay.php0 } Z9 x5 z# x0 ^% s/ j
漏洞均出现在respond方法里/ [( r4 g/ N! P
. u/ k' a5 ^3 l+ E
Include/payment/alipay.php & S. S. J( e4 n% \5 T0 w. ~: x
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
0 q3 i+ t. ^4 W$ ]+ j+ o
4 l' ]5 ?& ?) R2 B7 p6 S8 U大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
# P+ m# Y; Q& e& aInclude/payment/yeepay.php4 k- q. `9 _7 m. }7 \1 P& O
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......! Q7 q P$ Y9 F5 L$ R
* w5 I5 ~4 x, e1 x0 [* X大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考" M- t/ A/ {+ R- U& k: w0 I0 ?
http://bugscan.net/manage/node/83
: a$ {( ^9 _9 k* Uhttp://www.cnseay.com/2515/
* l$ o% J' t% i6 [*>
$ t/ o1 S0 h2 B# Q" g& _% Z测试方法:/ G1 G' t* P5 L3 e
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
& X* j% v) p! H+ L2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
+ C% j' V9 o m2 K修复方法:
; \% v% S& F# T3 m2 F" V" R, ~目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
" {% f0 O( p8 Zhttp://www.dedecms.com/products/dedecms/
: |% P8 N3 X9 G3 z) ~4 A; l, R& B
( \7 C! h$ a. C; v7 g2 O* m/ C( E. C" P" \ 临时修复:
, Q2 p/ Z+ X+ D6 W- u1)Include/payment/alipay.php
, F; k: `+ q( z( G" G1 \ 大概133行左右
) C& T1 j; U1 o w* ` require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
) h! _0 U2 V( Y& M- a替换7 ?- Y3 X- Z! m& Y6 [
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';' J0 q9 [7 V m0 k; u. O
2) Include/payment/yeepay.php. z# B" f' j" c# G0 w: A: Q/ b
大概在145行左右
$ s9 {& G) V# M( I/ G7 {" V require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
) z. T$ |3 ]1 q: ] 替换
5 u: u# I: E i7 d7 }9 G require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
0 N( r$ y5 l8 {, ]+ R; X$ i' h$ K $ |1 G- f5 g- Y' r6 Q A* {5 N
|