漏洞版本:0 U6 S/ W* g# `: ~3 l7 R
DedeCms 5.x漏洞描述:; j0 F2 |4 T7 V2 M5 z
DedeCms是免费的PHP网站内容管理系统。9 H* a2 ]2 R3 x' Z/ p
. ^6 h8 q5 S: K( g$ C
plus/carbuyaction.php里没有对变量进行严格的过滤
2 E% ^2 V; z7 ]. \$ a- W
9 R% q% Q) g/ K" j出现漏洞的两个文件为:
4 Q& n% I. ]( L8 N- a+ ~1 c, {5 P% dInclude/payment/alipay.php# B) j9 J% O7 p6 R e
Include/payment/yeepay.php$ v3 ~8 h- c4 t! Y, J7 i
漏洞均出现在respond方法里
, v( a) a, C; p {4 q) g/ h, G% V* ^3 i
2 U* ~7 g: K r7 ~# hInclude/payment/alipay.php % I6 `. u/ f' B
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......$ o3 l6 S ~& D3 b5 u, m3 ?
$ l% Z2 k3 s4 Z5 p
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
) q4 B9 k7 _9 u3 i2 W PInclude/payment/yeepay.php
# R: ]- L4 f/ ?" \; j......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......0 L8 j* Q$ h9 F ]7 B
9 c i) C: u2 R0 y, T1 d
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考4 l$ s: V2 B& Y- i8 H
http://bugscan.net/manage/node/83' A% |/ l( T' ]; Q7 X: m: Q
http://www.cnseay.com/2515/
3 w! \7 s) p+ v8 ?*>- |7 h$ Q4 a4 c# _9 X
测试方法:
$ A& d& `. A% `1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
6 }8 k8 O l) d- A& e( I( [2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径4 d; Y2 o8 X5 x( R
修复方法:6 @8 m2 T& c' P; W) l5 u7 ~
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:9 N7 W9 l% @" H8 w; V4 Y3 L; g2 Z
http://www.dedecms.com/products/dedecms/
+ R, }5 _$ R8 p6 F: s1 _4 @
5 ?! A5 b, ]- W8 x( P2 w 临时修复: 1 W i# C r1 V: P
1)Include/payment/alipay.php
! m3 w" }3 E% l3 ^, r5 h" T 大概133行左右
- W5 B) a1 U, Y m; ]( u4 i require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';# ?1 g# r1 C% b' h# j( t. M
替换0 S/ X4 v; ?6 i$ p8 e
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
* L. l z: o4 _2) Include/payment/yeepay.php+ [ z& D5 |7 V# d
大概在145行左右
* @* E0 Q1 \. \" n. M0 v require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
( L* L% V; s% D 替换+ p1 E) P8 _; U+ ^3 j ^
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';" [! Y5 \# u1 o( L4 g# u- }* {
3 ^3 y0 x2 s; A3 m% T' y) {/ p
|