漏洞版本:
, q$ v" p3 W" wDedeCms 5.x漏洞描述:
$ F" M8 S! b$ TDedeCms是免费的PHP网站内容管理系统。& j- [4 Z9 \( a+ F
9 y: g' h/ W& O$ x4 [plus/carbuyaction.php里没有对变量进行严格的过滤+ h- S, F& n0 Q
' x$ Y7 q% W( J! \ v4 D7 `出现漏洞的两个文件为:1 q9 a! c: ~7 [7 q; p/ H
Include/payment/alipay.php
* e) D/ T* _8 ]5 p' E/ I5 QInclude/payment/yeepay.php
5 l9 F' Q8 W* E. n: T$ h& Z漏洞均出现在respond方法里
: C3 i+ Y% ?$ K8 V3 y$ C) H7 U+ h$ U/ S: u
Include/payment/alipay.php
6 G- \. U1 r5 ]% S2 L, J......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......$ F$ i5 i# w! p* H+ L/ L
+ ^6 V$ W8 e0 L4 A% x& e3 k1 h" a
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。: B3 Z0 h$ c" }5 ~. K8 ]
Include/payment/yeepay.php% F6 H* W* u4 s$ C
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......8 Z' Q2 j' [/ p' E/ X
1 p* I) r9 c' e6 @
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考5 Z" h5 {) }; s" I1 M4 ]
http://bugscan.net/manage/node/83
$ x" h0 B$ h! w/ B8 [http://www.cnseay.com/2515/
0 M0 M* P# F* l*>
3 K& M2 t x- j测试方法:$ {, P" J! T; r# J5 Y
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
, Z& k. t- Z" d/ U5 Q2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
/ u1 q3 ^+ f; `8 [, X9 g6 h- [修复方法:
, u9 E; s+ _, L, w: I; X目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
& _3 H, M8 I2 _) v3 K* _http://www.dedecms.com/products/dedecms/
7 L& C. W0 X) r7 P' B: T
4 ~; r( ]5 B( k; ?9 G: t 临时修复: & t) u* Z7 F+ Q* E) N
1)Include/payment/alipay.php4 Z# E. `2 {! g/ O$ t) p
大概133行左右3 v" p9 F" R+ b5 Z! }7 z
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';3 G+ E# b; X* v% o2 i
替换2 j, |. s' G& i2 A- T. O
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
* b* v3 ?" j9 L; q' e2) Include/payment/yeepay.php
$ B+ I5 z/ I, E( |/ b/ d( T0 k大概在145行左右
5 P+ T1 P+ y$ }9 R# p# |3 A: n. K require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';* M# K& @: c6 d5 _- J$ _
替换$ `* q9 n- ^& B0 m4 V I
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
& D+ [9 Y3 G- e% x+ `, n" ?
) m& @+ e8 N! V/ E |