漏洞版本:. z( o% }* r* l& g2 {. d4 P/ I
DedeCms 5.x漏洞描述:2 z$ n/ p/ b8 c" k# c) P: S' L& P
DedeCms是免费的PHP网站内容管理系统。& q! g7 N& B3 V) H0 {* v9 e+ E
8 N% @3 t* x. P8 V0 Aplus/carbuyaction.php里没有对变量进行严格的过滤
, o- M2 ~1 |/ j8 U- K
X9 b$ r4 j3 j( p; y出现漏洞的两个文件为:
/ P6 e: E& F5 v; |8 }* p8 ]Include/payment/alipay.php) a3 w9 _5 U3 O1 Y% d2 ~: ]% |4 ?
Include/payment/yeepay.php i' F& C* Q+ T* A0 O: ?
漏洞均出现在respond方法里
0 B' {; J- r C; s. G0 ~% C. q" a5 q/ ~2 J
Include/payment/alipay.php
" f+ i# |: A; h5 }8 n......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......6 ~& u! `4 a# W* t5 Q! E) ?
: U% \: t" b1 l, X+ D; D
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。1 \5 H5 f1 e# W$ W6 W+ r3 A- h
Include/payment/yeepay.php9 h. Q& O* o$ R3 z
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
6 h8 U+ N, W/ @& F ( g% W1 R; S: Q" x
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考& M, e& B5 A6 K0 P
http://bugscan.net/manage/node/83
' }; K. a( }7 e7 N0 jhttp://www.cnseay.com/2515/; @% G8 |7 z! B L. V4 r* ]- y- i
*>
- j8 j; t. \5 \- F9 H) x0 U. P+ n$ c测试方法:' C. A5 d C- S& \$ X3 T9 I$ r
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie w/ N$ g9 {$ t, t9 @% c. a
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
) f$ W" C" d7 g J H5 b, ~修复方法:
- H- A" C. Q7 Y, f# U% r! a8 u目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
* m0 j3 z) W; R& ^7 L& E% Chttp://www.dedecms.com/products/dedecms/
( o) t$ F" Q2 g/ f9 ^- @5 c9 [ u p7 k
临时修复:
, M3 X9 w$ d, A: m1)Include/payment/alipay.php
9 P5 L4 e: [/ i- Y 大概133行左右
0 P1 {: s% X1 [$ S" r. ` require_once DEDEDATA.'/payment/'.$_GET['code'].'.php'; g1 ^4 N. n$ N( R. |
替换9 S' q; J' s/ ^" R5 w M1 v
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';; b+ x5 J5 |! t8 B8 [# d& y
2) Include/payment/yeepay.php+ Z: M( f# z# g; D8 |. l0 N4 P
大概在145行左右
5 k! m: Y/ D2 F: o( I' s4 l: B require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';. Y0 p: z) X! ^( g9 J" n1 {: `# G
替换( B+ T' T' a. }3 J) \4 M7 o$ z6 Y5 V7 ]
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';2 Z$ M; g* ]$ o/ c
# {9 ~4 j8 C3 ~6 v
|