漏洞版本:
9 x# k' K/ @" w s3 m# ZDedeCms 5.x漏洞描述:' Y9 X P/ w" W" }! N
DedeCms是免费的PHP网站内容管理系统。" H6 I) M. _9 Q( A5 F4 q
% x9 s& J: r/ F! Q# s) b0 N9 O
plus/carbuyaction.php里没有对变量进行严格的过滤
8 U/ M _0 k- T* h$ s
5 r5 s; v# c8 }: w* ^出现漏洞的两个文件为:
+ e; n% t; M1 ^* n CInclude/payment/alipay.php9 Z& o7 i8 W* I5 K, R
Include/payment/yeepay.php8 ?- D: s! ?- i# r( R9 T
漏洞均出现在respond方法里
+ k# @2 c0 `6 ~8 E' y Z; _4 _3 g2 V4 @. [) Y
Include/payment/alipay.php
7 M, C3 r! M8 g, ~6 n& m......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
5 ]$ B$ x! k E' }* S4 L' N 0 H1 O/ P( H4 P( n9 {. j
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。
2 }+ V; R2 A6 n( `3 U/ RInclude/payment/yeepay.php* e* {) j8 ?/ k
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
$ e8 T" I) \1 C* a' w+ u ( r/ C- t" S/ d# h8 ]
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
3 G$ Z6 q, q' z/ z- Dhttp://bugscan.net/manage/node/83
' l) y8 I' q+ h. L% f% Rhttp://www.cnseay.com/2515/
k1 _4 H h. ]/ B, \7 s* Y6 [*>
5 B& s/ J2 `5 {! C* Z" n( l3 l! U' C测试方法:3 r/ q* k" T6 k
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
# N3 Q( ]- {1 g; Q! U6 k$ ~2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径& k" X& u( U, T' Q: o* A& ]# a0 }
修复方法:
% ?$ F7 E* _0 r. c% M$ ?目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:' F" L# U4 F8 F$ i* T
http://www.dedecms.com/products/dedecms/
% g3 k( n" r! ^5 d0 j4 j: D$ t! A. _+ [# C/ Y2 a+ i% y, r
临时修复: 8 W- |) l: J: d: n+ K( C
1)Include/payment/alipay.php" q" ?) v- d& h# @8 g
大概133行左右
6 J! X" @' o" s/ M4 y- D require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';! X! v. G; k2 m
替换
2 O' b. j( Q& G+ u require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';. @ D. `, v& |+ [% |8 h. j" L2 w
2) Include/payment/yeepay.php- @) [2 }2 S) _4 X U! w
大概在145行左右4 R9 [9 l+ [! S# g. Y6 g% i2 Z: q
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
/ X2 M6 b5 D; X* |) h7 p2 H 替换# v! a8 ^5 C2 |
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
9 S! r" Z9 K- q; ^0 M8 z
: e6 ~8 d! p' Y* C: b) `, `, ^ |