漏洞版本:- f# k/ r Q, F. ?7 V) o8 _3 x
DedeCms 5.x漏洞描述:
% G2 x% ?( k" d* u3 W3 d$ }DedeCms是免费的PHP网站内容管理系统。
- `; Z. Y2 j" l4 Y+ @; | z! w/ Y3 E- M1 M! D7 K7 g5 V) Y
plus/carbuyaction.php里没有对变量进行严格的过滤
' v$ G" q' z- l3 ?5 i! }/ _; a5 G2 |/ P8 g' j
出现漏洞的两个文件为:
3 p& Q- ?" [( n7 L5 q: a$ o& @, YInclude/payment/alipay.php
' t5 r; n5 ~' C9 _* V2 X! [/ ]8 FInclude/payment/yeepay.php8 G7 n) g5 P; _) j3 w
漏洞均出现在respond方法里
4 F! Q: O! ^9 W) C9 `. D! ]
2 Z+ W7 ^$ M* O) V" l( X9 [Include/payment/alipay.php 4 w1 j) ]8 `0 N8 Q+ x { y4 D
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......- X; [! @2 n0 b. n: G
: G" H- m4 M1 @$ N. l
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
6 ~( o/ G, x* s: I+ Q$ b8 fInclude/payment/yeepay.php/ f$ a3 _ l6 B0 T1 v
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
9 m) k1 }4 ~) Y0 U) r f8 I7 d - v7 y. g) o' i. c
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考' C9 a; ]5 ^; T7 N. b; i
http://bugscan.net/manage/node/838 C. ~" v. P( A
http://www.cnseay.com/2515/$ _5 N- l: ~) U. O( H
*>
3 D! W' _4 Q7 H' q* f8 w测试方法:+ L2 v* K( D3 m5 J# N+ l2 l
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
1 n% A2 ^6 k1 p& J9 ^& m# U2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
5 V, ?' t5 N9 q8 K# ?修复方法:
/ U. d( w; y! [/ N& T目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:9 S8 j+ s( R3 [( T2 p- Q! `
http://www.dedecms.com/products/dedecms/! K0 ?7 h1 j& q( w& X
: q4 w* n6 b a 临时修复: 3 d/ n$ |. a% d
1)Include/payment/alipay.php
2 l, U0 {3 o: s9 Y9 A1 B) t 大概133行左右3 O; y1 V# B2 y$ U" A+ V
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';/ M( I% m+ M Y$ @) _
替换2 j$ x' F% A' h0 i% C" V9 ~* K
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php'; i* H" V) |+ w X+ s
2) Include/payment/yeepay.php$ h, i) f# [: `( U: P& f {
大概在145行左右! _5 ?4 ?3 R/ {" |7 L8 _
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';" k: \/ h) f2 A) J
替换9 g" E2 c) E1 @9 v
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
. q6 ^) r6 U; Y* u( j. X" }* w5 i
$ P1 j' p9 ^, i2 Y4 F: X3 ~ |