漏洞版本:
2 E! z, j; p# r) X8 b3 xDedeCms 5.x漏洞描述:2 C( i4 v! N% W+ F
DedeCms是免费的PHP网站内容管理系统。 p& p6 S+ H( |4 k
4 H+ \- U" M6 M1 Jplus/carbuyaction.php里没有对变量进行严格的过滤) ?7 K) U$ y% y: y3 I
# ]1 g6 K/ {- z( }* l! O出现漏洞的两个文件为:6 M4 V( Q0 Z5 b5 I" {) Y7 h
Include/payment/alipay.php
, h# T7 m" L; T- kInclude/payment/yeepay.php; m% t* F8 ]+ _: x9 @
漏洞均出现在respond方法里
# _ G( M! r$ S4 \1 O" O6 O
+ }" _/ D4 y- T( ~# n. L. TInclude/payment/alipay.php ' ?; Z% |! d% W/ G) u* P0 q( {
......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
+ H# {! R( I6 o% B+ j 6 B* }; e5 C% i
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。 l9 ]' z( @$ k A
Include/payment/yeepay.php; p+ r% k0 W6 `" Y2 L1 I
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
5 f! G& i! P5 q7 M) M" v; W, o
9 x; |( d0 Q- H' j$ ?+ L" f大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考0 S& _) B3 [9 u9 P) D$ v. z1 l
http://bugscan.net/manage/node/83
' m2 ?: E1 `( B$ |http://www.cnseay.com/2515/* ^* P, [- v4 x. i7 ?, j( A' Y, m
*>+ `/ [! f2 c8 S3 v
测试方法:/ h0 t* r# e: d9 X3 A9 X. `" U
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
$ L" O: L1 v: a! g2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
+ i# t3 F( f: ^& G2 Y修复方法:
2 M0 B) v: v- r6 V# ?1 X目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
( j$ {, \# X6 u, q# zhttp://www.dedecms.com/products/dedecms/
4 i. U$ ^" k0 S A! u/ O0 h0 G4 _* G! f$ f; ^
临时修复: / u. z* j/ `0 J; W+ m% _
1)Include/payment/alipay.php
- c$ _# y5 n& t: g) q8 s F$ m3 ` 大概133行左右6 X) ~5 l8 h0 Q5 h6 O9 j- h
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
) A; C" ~2 n7 \! j0 X# o替换
# h% G5 a9 y, n6 O3 q+ S require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
2 O; X5 I6 f2 ~% y) m. `% ~+ w {2) Include/payment/yeepay.php& I* a$ R: K8 c# G) R" @
大概在145行左右
' L( u m9 u$ S% X; m( R& c' q* ^ require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
$ W' m' L/ q4 g! L2 g- Q 替换, f( V) I3 G6 E$ _# ?! N+ e
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';; J4 L0 n& x' Y
4 @" C! A' I- g7 P |