漏洞版本:# }8 [2 d1 o' B( z
DedeCms 5.x漏洞描述:2 @! V) R/ p6 U5 h( V
DedeCms是免费的PHP网站内容管理系统。
, w2 G/ H; M9 w5 Z! T+ ?) k& h- @& L+ C0 E3 i7 n7 K2 r
plus/carbuyaction.php里没有对变量进行严格的过滤, f" }: ?6 C* K- D1 j/ o; z
$ H1 B# O% R2 o+ ^! T) w: g d) R出现漏洞的两个文件为:5 d# R/ |6 _& {0 ~* M
Include/payment/alipay.php
: n- Q0 N8 ~0 C1 I* ] gInclude/payment/yeepay.php* p9 s7 E6 d, z* m7 ~$ H8 I
漏洞均出现在respond方法里; d7 w' F3 ?3 b' _6 G
: x2 a$ ?) h& f; E0 K' s1 B
Include/payment/alipay.php
: i2 _+ R2 Q3 o6 I. p......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......$ ]4 j' E; t& Z) Z
& H6 X' }: i) ?" W# ~
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。9 b3 U/ b [3 G. H, s$ B! s7 ?
Include/payment/yeepay.php1 `* [8 I0 Z% C8 `
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......5 c5 f& b, j3 T/ e7 b
( \* s) f- Q) L/ e- N大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
. Q9 V& Z+ T' u- ?1 ?0 Z: i* ^http://bugscan.net/manage/node/83
5 m/ e& J2 p6 ? Q: \9 u4 P* Uhttp://www.cnseay.com/2515/
" }8 I$ T: t' d" _( d# R*>7 o. ~2 n. @5 X. @4 S) a
测试方法:8 a4 x8 b8 s5 e/ k0 I+ l
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie 8 Y! o& P3 |, ~
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径; f* P: Y1 l) x7 c: X
修复方法:
, T5 f+ U) v5 J* m. w目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
) F" \8 @! p/ g v' zhttp://www.dedecms.com/products/dedecms/
- w7 e6 N# Y+ j5 Z
' N6 c, T2 }" I5 l% p: M2 E 临时修复:
0 l/ l6 C# A% Z3 ]$ S4 _9 |; M1)Include/payment/alipay.php
2 b9 ~7 O$ `3 p, h C 大概133行左右
' j- a6 x* a2 |1 _( { require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
2 G% a+ s1 w7 T: E替换
. |, H) F3 v% P e4 y7 n" z require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
4 k ^6 k V% Z2) Include/payment/yeepay.php
" X# t3 a/ V5 E; `' J, S% V1 m大概在145行左右( ^7 M9 n( D- m6 Z: C7 i
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';+ k2 f! J9 T. Q* s, f% F, g- g
替换
0 ]. A" `; z) f) ` require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';7 m; d8 r5 M/ \" U0 W- o7 @
J' _$ k& }% y4 [5 F
|