漏洞版本:% z3 X& A3 f% f3 W* R; W, ~0 x( R
DedeCms 5.x漏洞描述:. h2 ] t' _, s
DedeCms是免费的PHP网站内容管理系统。
1 Z; k& |( V8 m5 K$ P: T
4 a5 c/ @: }: |6 s5 Qplus/carbuyaction.php里没有对变量进行严格的过滤1 \0 f# o/ ]8 X& _$ B
! G, w/ l) Q5 W+ F
出现漏洞的两个文件为:
0 S8 u2 l2 ]4 V+ r/ o1 `Include/payment/alipay.php
# m9 G) ? [/ u/ z2 H. i$ E/ G( |Include/payment/yeepay.php
4 g0 I0 @) O# y7 O2 x- |" R& H漏洞均出现在respond方法里
+ o+ M+ k2 t* |- a7 N/ }7 X0 C9 U5 N6 |- Y( K' s( B1 s7 P. }
Include/payment/alipay.php 2 Z6 k" |2 O6 Y6 O
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......8 q% q5 |$ }' m+ D/ [
$ i0 P" p" o1 \+ [大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
) b- y3 [; p. @0 Y; G& e" TInclude/payment/yeepay.php
1 G9 W& q* g5 c7 G5 s/ h4 L......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......; s2 a* z7 _3 t9 v6 C1 v1 p; L* H
2 Y! ~, u5 {/ F' ?大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
* A4 ~; q/ w8 chttp://bugscan.net/manage/node/83& m1 Z6 V* _. ]1 R' d/ T
http://www.cnseay.com/2515/
/ i9 p( ?* k6 n4 N*>
+ A+ A+ |$ d6 z4 Z _测试方法:
, N( x6 S: a' K- f7 I1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
% N3 L/ U+ O- z% w! L2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
: H6 g6 L4 X- C/ o( e& z修复方法:
# @: o+ O0 t2 D5 w- ?' n目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:; V- v9 P: w9 A
http://www.dedecms.com/products/dedecms/6 U8 N" Z! a" _/ B4 ^0 F
3 @8 e! B8 L7 [ t' z" z 临时修复:
' a8 G5 Y9 F+ u) q1)Include/payment/alipay.php6 y" F6 y: f3 [1 d4 p4 s* L7 t
大概133行左右
; z* D6 F$ R7 q4 m: [9 J' w3 _ require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
) _. I2 X4 N5 Z' Q替换! ?7 N/ A f4 h
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';8 l, @4 h3 N$ Y% D5 c
2) Include/payment/yeepay.php6 T0 J4 { v& O" `3 _6 J: e5 D
大概在145行左右0 V1 l3 X$ I+ N2 l) u& M7 \
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';) D3 a' ?- n* t4 ?
替换
+ v' X+ \3 g, ~# t/ L require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';( s/ V7 m1 P+ s' Z8 y! m) c; Z
4 o' S% \' N1 |8 W) h3 c( I
|