漏洞版本: e* v: g% }% V# @6 h- ^
DedeCms 5.x漏洞描述:4 I) X2 r9 H& B: h" w5 d$ r2 x
DedeCms是免费的PHP网站内容管理系统。
/ w8 _; y1 L% y! w% @7 P4 o' b7 g' a0 z1 g
plus/carbuyaction.php里没有对变量进行严格的过滤# |" c9 N% w8 h: L/ Y
4 ?) w9 F5 e1 N/ |( J3 d4 l出现漏洞的两个文件为:& Q" I# E, y ^: P" y# H, x
Include/payment/alipay.php
( [& ?" Z+ G6 ]! x- tInclude/payment/yeepay.php9 e2 w$ N* l6 E& @6 W! H
漏洞均出现在respond方法里
& o0 Y2 X! T+ f1 x! M
4 P9 v ]; G5 B6 T- e6 @) Y* y+ aInclude/payment/alipay.php
) Q6 L) \/ N4 X, [9 ?......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
9 [ b* j; q( g2 w) L& m
: D4 u4 s; {0 P+ w* b- }# u! R% i8 q大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。! q9 j0 x! N: E7 D1 p
Include/payment/yeepay.php$ H' q3 b' R, |( u/ P
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
2 g, `" G# a) a% i9 W$ ^
( e( ]! N* c b大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考1 n( d. o* a( a, k& V* T& ^
http://bugscan.net/manage/node/833 X( L- C/ b+ Q/ M
http://www.cnseay.com/2515/& R7 B. z8 G4 z) R4 g
*>+ f i& w A# i0 J7 }
测试方法:
+ U) F, @. h4 M# b" ~1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie 6 B* m3 X( \8 q$ y" L
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
" S6 g7 _" E/ t( s# ~# j" \- q) @. ]修复方法:
; s) R0 A1 {: d# m- ]/ w/ f+ X目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
4 a3 Z0 O# ] A1 Xhttp://www.dedecms.com/products/dedecms/
5 ]# s0 C+ T/ S" H. q' M' v$ x) w8 I, c0 A0 p
临时修复: ' g# F y* l3 q0 g8 j
1)Include/payment/alipay.php
- w" Y7 v! Q: Y9 H 大概133行左右3 F$ r0 V: \& a \& M, @8 t1 A* i
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';- p! y$ s& [# z
替换* X: }" T2 R* ?/ g+ ^
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
) q/ [" H* J1 o7 s9 T$ N" E- q2) Include/payment/yeepay.php9 B& |3 K0 w, F- f6 y1 l
大概在145行左右, L6 ~" V! o S) m& U
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';2 t* s: C5 S d8 h/ k: S" a/ b
替换
. a4 U, Q3 b1 g6 c- c) f) a require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';% U* f. |+ S( [, B; ~
6 e) S. g7 X- a/ v! }. G6 z
|