漏洞版本:3 g( ~& K# ^ D3 P
DedeCms 5.x漏洞描述:
; [. j. C# R' S w) w$ J: wDedeCms是免费的PHP网站内容管理系统。# B9 K9 h/ r& {. v
4 w# i; {% `0 C4 m
plus/carbuyaction.php里没有对变量进行严格的过滤& [/ _/ |+ X. t) n( Y
. V" X4 {: A! Y$ _8 ~2 u: U8 Q出现漏洞的两个文件为:; S. g1 T6 u9 w, v9 `
Include/payment/alipay.php
6 q' g1 J- ^0 B/ w* {" \. GInclude/payment/yeepay.php) g# ~' x2 v( D6 |' A: y: a9 [
漏洞均出现在respond方法里. Z( `* Y0 h* w& i" i% u1 i
6 I- i( X# l, v# \5 n, f& |* ~Include/payment/alipay.php 0 H4 ?" R. v& l! ]. g* d7 z
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
' N, B6 D4 p! u 0 ]& ]2 a) y3 e, I
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。- ^# j7 h5 Y$ j5 b0 s
Include/payment/yeepay.php
# s; T9 w8 G) x) ], X......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
5 Y8 l9 b! o. \( \+ r. ? Y, Z6 y
" u+ E- Y1 U* g( g2 F- x大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考' |0 E% V0 ~) Y; s: p* A* ]# W
http://bugscan.net/manage/node/83) J: p! S( u: y. e4 e
http://www.cnseay.com/2515/
7 W* r: X$ C! a# o$ X*>/ s( Z6 b5 c D0 g. G0 @ Y
测试方法:3 }9 C0 o4 {! q
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
5 m, X9 ?# Y- j2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径- L$ T6 x* ^( E d. T! M$ v; p$ g
修复方法:
9 v3 K& i6 s1 \/ F目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:2 A+ p3 S/ A* J4 q0 l
http://www.dedecms.com/products/dedecms/
6 U" J8 z: n3 i( h |
: W ~( I5 ~) ?$ i 临时修复:
* M" H; \* B: i1)Include/payment/alipay.php) u' t: V* S2 [8 z! ]- b
大概133行左右3 L5 n* g7 W# p* _
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
! @0 E8 }2 n& D4 [" Y! Q) @) w2 m1 h替换1 n1 }, @( s b2 g9 T- K2 a& h0 i# k
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php'; d4 h( l: e. w8 T) W6 v
2) Include/payment/yeepay.php1 C) {) j f( J
大概在145行左右
' O/ c& S9 Z- w1 F4 m require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
, v3 l3 v6 g5 m5 Y 替换
w' ^1 ?6 f* A2 d+ V9 y require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';* I2 w E, l# X' O8 x& h
/ {8 X- r: R6 ?* I- I1 _ |