漏洞版本:2 \- ~0 J/ i y/ i _' v
DedeCms 5.x漏洞描述:
8 N" G! y+ D4 t5 B9 v4 \% n3 ^DedeCms是免费的PHP网站内容管理系统。
6 H& G: l+ [: i$ R
4 v3 J4 |6 o' yplus/carbuyaction.php里没有对变量进行严格的过滤4 r% m0 v8 h8 f5 s
4 H J h$ L% y+ Q1 _4 Z# s3 A& C- i出现漏洞的两个文件为:% |9 s( r6 |0 i( S2 e0 A3 {
Include/payment/alipay.php. \7 p4 B3 ~9 |5 x E/ n
Include/payment/yeepay.php* a, D6 ~* \- W: q0 M+ P
漏洞均出现在respond方法里
! M: r: c' L+ d! g) [, X9 w. s
9 Z4 M: D9 b2 k" BInclude/payment/alipay.php
4 X, s& E4 Y6 A6 h......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
: Z6 F; \3 C }' s' F / _7 b; |2 e+ P9 n
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。 b. K5 O7 O" o2 i
Include/payment/yeepay.php5 l' v* P& s% [- ?
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
% k' i$ R& r1 S3 E% r ; n/ n! L1 r/ t
大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
& X9 h! |- k+ E: e! O/ I5 `http://bugscan.net/manage/node/83
9 a h0 q5 S5 g5 Ihttp://www.cnseay.com/2515/
2 T5 ?! t* U( u*>( X% L+ C0 z6 m; j6 K# L
测试方法:
+ r3 o; R! {1 I& T2 N1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie ' Z5 y$ X) h8 |3 u6 F7 W
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
% ?1 M" V1 B* y6 [0 n修复方法:
: m f- k" S/ l) Q9 o# J ?目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
9 r7 a4 \) `* D7 ?http://www.dedecms.com/products/dedecms/
4 T; K( i5 V# z0 I9 p; I% t- ]2 M% U k6 l! O
临时修复: 4 `# m: O. Y* V* k9 P/ |* d
1)Include/payment/alipay.php$ F4 ]$ c- b) H8 e' J
大概133行左右
: k6 k% P3 h8 z0 L, P require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';/ E3 c& j6 T$ }
替换 B3 e3 }- {6 Q- h5 f1 e ~5 I3 C( m
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';3 [+ I2 B' u* D
2) Include/payment/yeepay.php4 L y8 U$ w* t. Q* x
大概在145行左右
: {$ q) n* e( L6 p- z R require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
2 J/ A+ T0 H$ H# C8 i 替换0 E. {9 \, G% @/ v* F1 M
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';0 W3 u% K; z, G l$ l% s
* ^, j% g& E* y
|