漏洞版本:
9 w8 u9 N% m& R0 WDedeCms 5.x漏洞描述:
J# Z- V( |' ?DedeCms是免费的PHP网站内容管理系统。
: l# ^( A5 G i0 f6 }6 |8 T4 Z9 a7 v5 Z; h- u
plus/carbuyaction.php里没有对变量进行严格的过滤6 D, T4 d8 Z' ^0 B3 `% S' T
. [( {3 ~% G P# c% A. V; s
出现漏洞的两个文件为:! v8 n4 j2 `- M3 O$ L
Include/payment/alipay.php
7 R4 y4 M$ b% b# K' l; ]; i7 Z9 ~Include/payment/yeepay.php6 c/ r1 K- t4 M. S/ H- Y9 P
漏洞均出现在respond方法里5 C' B8 e0 C, k3 H& j
. F) J* R( g2 x* |+ l" r6 ?
Include/payment/alipay.php
6 d a T) P0 D......function respond(){if (!empty($_POST)){foreach($_POST as $key => $data){$_GET[$key] = $data;}}/* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';......
# s" z$ ^: G8 e5 i- p' w / h' g6 |* ?+ W% j$ L# e
大概在133行左右,$_GET[‘code’]没有经过任何判断和过滤。% B5 S1 s0 _# I9 j9 ~" O
Include/payment/yeepay.php
5 e8 x/ P6 l1 w4 f* v: ?1 X% f......function respond(){ /* 引入配置文件 */require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php'; $p1_MerId = trim($payment['yp_account']);$merchantKey = trim($payment['yp_key']);......% W2 c! X1 D, k% M6 h4 v
9 F; w" p4 C# x" ?4 N大概在145行左右,$_REQUEST['code']没有经过任何判断和过滤。<* 参考
# K) x) ?& E* F$ d% \5 qhttp://bugscan.net/manage/node/83) z ?+ i2 H W) W5 i8 i* X
http://www.cnseay.com/2515/; y' I, [( ]3 x k5 @/ f: p
*>
; J' _, w0 `' x9 |9 K7 j4 a2 ~. r测试方法:5 c6 o3 _" S5 N( A5 n
1.http://www.dedecms.com/plus/carb ... amp;code=../../tags 上面的Exp是包含根目录下的tags.php文件包含其他后缀请自行构造截断, 使用exp测试时须要自己添加一个code等于alipay或yeepay的cookie
* M5 Y* i# o. D0 \9 _2.由于bank和cod这两个文件并没有respond方法,所以如果code等于bank或者cod时将会暴错泄露路径
2 L/ L5 u9 s% w+ P; d! a% U9 ]修复方法:: P i6 ^4 t4 k2 D5 R8 p# c
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
; R* s1 F: n9 ?0 ?http://www.dedecms.com/products/dedecms/- {' X8 J n# ~, p/ c+ q" |1 B
6 j2 Y; j- [9 P* E
临时修复:
* L" u' d a t/ Q, r' X7 Z3 m& \1)Include/payment/alipay.php5 p# \9 @9 U; o# X$ d. n m. T
大概133行左右5 e6 E# W3 U7 S4 J
require_once DEDEDATA.'/payment/'.$_GET['code'].'.php';1 \4 p! F5 z! h1 O0 t" ^
替换
. a7 R5 O, L$ F. i require_once DEDEDATA.'/payment/'.basename($_GET['code']).'.php';
; B& m9 f, {- j+ a% [9 b7 L2) Include/payment/yeepay.php
6 u# H* g. Z) k" n3 }& k大概在145行左右6 D6 X' X8 f9 T% o1 |' V
require_once DEDEDATA.'/payment/'.$_REQUEST['code'].'.php';
2 K- X0 L" p6 j- U5 u3 o. F 替换
( X \. P7 c4 w# k) E& ] require_once DEDEDATA.'/payment/'.basename($_REQUEST['code']).'.php';# j3 ?" G* E' S9 r+ r7 }* ^
' ?. B) P: B3 E# W3 X3 B |