漏洞版本:, F! g- v: X* S1 }7 A. I+ ?
DedeCms 5.x漏洞描述:
( C; n7 ^8 C! z5 RDedeCms是免费的PHP网站内容管理系统。
( f% i5 h9 }" E3 s& l0 B- ^1 I! y$ N- @/ e
plus/carbuyaction.php里没有对变量进行严格的过滤$ Y) X6 s7 J; a/ ] W
" u# s( o6 l g! K$ n2 Z* I. y# T7 w
出现漏洞的两个文件为:
: u+ j6 ~7 d& U9 I, ?1 ZInclude/payment/alipay.php: k8 [3 N# G$ B, }2 ^+ {3 b
Include/payment/yeepay.php* M# R, D, M% i9 c& k
漏洞均出现在respond方法里9 r7 d2 r) J6 F3 h; x: x' i
- V, U. ]# l$ ]' k% f/ G/ ~
Include/payment/alipay.php
- P' U# q$ V# U% e: k......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......- h' e' F% \! [3 A$ ^) d& |
: ~) x- Y: V6 \; o# v* c$ p
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。3 ~0 w, L( w) k; x9 f( b
Include/payment/yeepay.php. M, X' e* H0 Q: L- C; ~% L0 D. N
......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......
0 O) A9 O: ?; H( [' Q* d8 L
8 G P! |+ X( `$ M. e, c, f& [/ |大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考- T+ u8 I, j; v3 ^, E
http://bugscan.net/manage/node/83
9 i# n, V3 _, [; W) Dhttp://www.cnseay.com/2515/- J0 t; n8 c+ B
*>2 ~/ y! f1 q X5 J1 d1 R( J8 y
测试方法:' ^& P Q. }# u9 c2 D) U
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
; g, m* P8 g/ c4 d/ {7 C2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径; e" j: w; |& y7 s# `& u
修复方法:5 K8 Z3 m) f& k' o( U
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
5 w0 g+ S2 E8 chttp://www.dedecms.com/products/dedecms/3 q, s# @, p. U/ I
3 G" l7 w5 O0 c& N2 u
临时修复:
* f7 X1 [9 R, z* u1)Include/payment/alipay.php3 l4 T+ }, D q. I, ^2 Q
大概133行左右
0 A4 ^6 [% W0 l' ~ require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';
+ n" g, q* T0 e" j1 A4 |/ X, `替换: i/ L d& e* v! b7 x8 d
require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';3 u) a* H K5 T$ z
2) Include/payment/yeepay.php- ?: c0 P0 j1 h& \8 ?; Y
大概在145行左右+ m0 a# U) |' P9 M7 n* H4 |
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';1 `' _9 d/ q$ ]$ F/ p
替换- N! G5 ?2 L0 r
require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';
' c& i( u+ M# a" s3 j8 D
2 C3 }5 G5 E6 p2 E% |/ _% \ |