漏洞版本:0 d3 j4 D m/ ]; X$ q0 C, p
DedeCms 5.x漏洞描述:- ]+ k3 T* B* I7 L( S
DedeCms是免费的PHP网站内容管理系统。+ |- [. L$ I( L. a
2 z9 `; G2 |) d, T, r& i: F4 a/ dplus/carbuyaction.php里没有对变量进行严格的过滤
+ m" e) i1 g& \
7 b8 Y5 Y+ y$ B# k) J$ C. t) O7 }出现漏洞的两个文件为:3 b" R5 W4 U4 U' f. h" R9 P
Include/payment/alipay.php) ~ [+ ]7 k! i% w7 F, W1 |
Include/payment/yeepay.php
5 J% D( n: Z/ H% W4 h2 Q漏洞均出现在respond方法里4 s7 ]. m5 m8 y; h+ y7 N+ w
: U( O8 I$ E! x9 r( v8 @2 SInclude/payment/alipay.php
- ~, T) F* w0 Y. P" j......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......+ L- s1 L/ D$ D4 u% j+ t
& c* ~ S& Y8 g8 {, b
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。) M3 f" R! O C! K) N2 f
Include/payment/yeepay.php; I( L( ] w/ b) B
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......6 u7 s9 w8 I+ S4 [
. y& u& l, H) e) Z& b
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
$ M" F1 x, H) W; bhttp://bugscan.net/manage/node/83
4 C0 T @9 [" c' F% chttp://www.cnseay.com/2515/
3 t @! A% h+ F6 J6 |7 e' g*>, d' x3 |" e) B: ?9 V# ~& n2 G$ S
测试方法:
. f$ e' T& {' w/ X X6 t |1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie 1 E; i2 C% ]0 ]/ S @8 _! W5 U
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
2 k* I8 d+ R" ]& k! f修复方法:
5 J- w' i7 I! Z目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:2 M, p" i/ ~5 Z) H
http://www.dedecms.com/products/dedecms/
: J6 J5 C+ ]! {+ ]( p- v; C6 Q Y" A0 X
临时修复: ! B7 m1 C& }+ t. \5 D/ ?+ ^8 j
1)Include/payment/alipay.php! G2 s& {. U+ R" t" N8 T7 `* P0 Z
大概133行左右- c# @; L0 u1 B1 X. L% F* |
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
1 |' s% U# C, v! _替换
+ m0 [5 t4 Q& q2 V- u7 t' O. j require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
/ ?- _8 A; j" _* V2) Include/payment/yeepay.php- d+ B7 R0 t$ P4 m% D/ }# ]' r
大概在145行左右! ^: P* {: I. {
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
Y: H. n8 ^/ C& y$ @; E 替换+ k# {" S) X8 U( Z
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
' N0 Y# `- E- Q% T% `5 N% M
6 x" ?# {% X$ P |