漏洞版本:. a0 ~! a; R+ P. e# C( x
DedeCms 5.x漏洞描述:
; g; ?/ j7 u' Y' q0 X4 T, EDedeCms是免费的PHP网站内容管理系统。3 j0 V+ ^* k, \0 f, o( |
1 E. |$ n X' Oplus/carbuyaction.php里没有对变量进行严格的过滤% s; R7 d' B+ J. ?2 k# X: z3 S* j
7 x1 X0 B6 F# }! e, j/ F' M
出现漏洞的两个文件为:
/ c2 C; ]3 g0 u- d ~/ R) CInclude/payment/alipay.php
9 M8 U- Y+ j9 C" z( B# z/ |Include/payment/yeepay.php# X, |/ t- W9 G1 U, s/ a, }
漏洞均出现在respond方法里. G0 t( ^. b, ?1 b! I8 B0 O
: p1 ~) n8 A1 q
Include/payment/alipay.php # T3 o1 V K. R) T" s
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
3 V8 g7 U, D7 f! K8 w8 a9 [# C. g
) ~$ K9 f+ D# |8 J% f大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。, f5 J- F9 X P' x8 e: m, f
Include/payment/yeepay.php0 z) Y' x. s6 I# B* |3 q b
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......8 |8 { V4 \* Q9 l' m- X7 M
3 F, a6 U5 q* K; h9 `8 W9 d" S% N
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
B2 s" T% l, D% @8 A4 ~! Fhttp://bugscan.net/manage/node/83
7 }/ ?3 |( W+ Zhttp://www.cnseay.com/2515/0 q( d- G) Z0 ?9 r! p$ P
*>
! j# Z/ }- s5 C/ X' M% d; m测试方法:( H, {# k. p, ^' k v0 R7 w' _* w
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
! A$ k0 A/ [7 U2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径! C& ~: J" b* r4 ~) w( |+ | j. o
修复方法:, f: r6 C) _7 `, |# X
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
[( l& W+ K6 `: ^; whttp://www.dedecms.com/products/dedecms/
1 Q, k8 N K. G* Q
1 h6 B; s0 |1 p9 X+ _ 临时修复: # s' `3 [( p; E$ P' D8 X
1)Include/payment/alipay.php
& ^: _6 N" E; e7 B8 V 大概133行左右7 R2 y" P. w+ Z
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
- k) K0 r. o, z替换& x; s8 V4 {" g# P* |) c( o
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
# Q, r/ L L" u- m9 C! `2) Include/payment/yeepay.php m# U9 e, f4 M9 p
大概在145行左右
7 e- H ~4 k6 v: o/ G& n require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
5 p+ u; Z, w- \! Y* Y2 S; H 替换
" q; o4 C( l' M# [9 i. }# j. v" h* s require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
j+ |; g, [& o! k. g0 a
: V6 F5 z* P2 o9 y4 z& t |