漏洞版本:
+ s& q9 K }4 x) C. ]7 HDedeCms 5.x漏洞描述:
+ C! M6 Z9 M" t% k% GDedeCms是免费的PHP网站内容管理系统。
) o* W7 h: U% g2 X1 {" x
% Z8 r% P4 F( Q( F' L- Y" iplus/carbuyaction.php里没有对变量进行严格的过滤
. _7 ^0 S; u$ _ t$ `
6 k0 l' H8 j# `, v* H& k出现漏洞的两个文件为:6 k/ @+ F/ m. y$ T7 ?1 l
Include/payment/alipay.php
9 X& V3 Y' P( oInclude/payment/yeepay.php
) D& w; i5 n4 M0 B7 D: A: ~( K漏洞均出现在respond方法里* r! Q- Q8 s( o$ |8 q$ T k8 Z
5 [4 g/ g3 y4 l4 q K: S
Include/payment/alipay.php m$ U- w* J9 I- k5 k
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......) H0 _+ t4 P3 C& A+ m. U3 f
- A* ~8 B8 }- n U$ w. A @5 s大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。( R; R5 _& i8 y
Include/payment/yeepay.php V% v- R @7 I0 V: u2 G
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......& R/ i3 k- R4 X- \
) \ }( k i* o5 ^. L; {7 T) d( D大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
P4 H0 X# n) E. whttp://bugscan.net/manage/node/83
1 M) W5 b: d+ i2 k _/ \http://www.cnseay.com/2515/
/ D _" _+ ^5 t) p/ O*> d+ Y% k; v( }; l. z" v
测试方法:* h% b" Y; l o7 R% s1 E) K
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie ( l6 ^1 p6 @0 y; V3 l# q5 B- v# t: M
2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
. F" c3 Q0 B& Q% v2 j4 s修复方法:
" x# `7 n, w$ ?$ r$ [! G" h" x目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
2 w% l C; a3 a8 q3 j2 z; Nhttp://www.dedecms.com/products/dedecms/
9 a9 N) } B; I/ V8 g# }! [+ \, l2 \5 v# ?9 X; f
临时修复:
5 P( X0 ~ u* U0 w4 y. _ I6 Q1)Include/payment/alipay.php
7 M1 ^ w; b; J& m3 K$ k) Q" t 大概133行左右
2 f" M) c9 e- B2 @& e require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
5 x1 g/ O* z7 V( o5 {" e替换
5 j; l& J: ~, O0 W$ m5 c require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';$ m2 n" P I3 \3 {# X* u
2) Include/payment/yeepay.php
$ s8 }5 o5 ?5 Q大概在145行左右
" U! b$ s. C8 `/ R. n require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
% D# O7 E' A% P 替换
, f1 C( a/ C& M require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';- ]) Y9 B$ U: M
# K( Y, K$ h2 s' s8 X1 W |