云服务器促销,免费安装宝塔面板!
开启左侧

[DZ教程] Discuz!X ≤3.4 任意文件删除漏洞分析

[复制链接]
风雨兼程 发表于 2017-10-4 14:39:09 | 显示全部楼层 |阅读模式

本站会员必须 邮箱验证成功后 才能发帖。马上注册查阅更多教程,下载海量资源,让你轻松玩做站

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
0x01 简述
' m0 o) Q0 ?$ M( g" J  F
4 X: K/ A' c: A( h# I) w' h0 ~Discuz!X社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。
3 ?. y* I$ n. I* I  C5 S# W& @; d3 V* L3 m
2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。
" f3 c) F2 U: \6 m9 U" B  @9 K* ^# P8 W* y
2017年9月29日,知道创宇404 实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到 Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号 ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。
  k# F  u' s1 ^2 L- K7 O& q
* @/ w% D8 X$ L( c. _; o+ L; A/ v经过分析确认,原有的利用方式已经被修复,添加了对属性的 formtype 判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他 unlink 条件,实现任意文件删除漏洞。
. b9 m7 F1 w: d8 ?: ^, R
7 _, S( j1 r0 a% X, D- P0x02 复现9 Y2 E# ~$ V% F

, g# @. s# z# T0 [登陆DZ前台账户并在当前目录下新建 test.txt 用于测试
3 V. ~& N1 {( d# l$ J9 i  `! L/ A+ g

Discuz!X3.4漏洞

Discuz!X3.4漏洞
7 C" g5 v8 u. |% l' z" M  {
+ f, H5 J* I1 J' @2 d! g5 o1 B

Discuz!X3.4漏洞

Discuz!X3.4漏洞

: {8 V& \) p9 K# ]8 Y  Z8 d5 X$ a3 X$ A9 D' O9 u6 @' C0 }2 b, s
请求& }2 [$ P9 l% g) E
- Y+ I, ]  o; j, A& n8 ^
  1. home.php?mod=spacecp&ac=profile&op=base8 T' y% t$ q) Y7 }/ @) a  f1 Y4 P# w
  2. POST birthprovince=../../../test.txt&profilesubmit=1&formhash=b644603b
复制代码

8 n& c) ?8 u7 T7 [8 p; P其中formhash为用户hash
. j  V' U5 M% Q; G/ n8 n( [5 i修改成功之后出生地就会变为../../../test.txt3 J/ t  B- A" x" S* f! B$ n" t
9 c0 y5 p# w4 `  [: u$ E. [4 Z' f

Discuz!X3.4漏洞

Discuz!X3.4漏洞
# _! _$ m! U2 d1 y

& l9 X- {3 g$ H# A/ F7 [构造请求向home.php?mod=spacecp&ac=profile&op=base上传文件(普通图片即可)9 @/ q: v9 D0 |5 f9 c5 Q! R) I

* V% |+ F' J4 ~9 F* n$ L

Discuz!X3.4漏洞

Discuz!X3.4漏洞
# P/ \9 G/ l8 B$ G( ]

* F! D- [: B! M! D, U4 k请求后文件被删除
, c( o  ^, H% K  O$ o, P. y& p# P' I7 X5 C. T
0x03 漏洞分析
5 J  ~% m4 o# s/ j+ Q
" {( A; E" Y% `Discuz!X 的码云已经更新修复了该漏洞
: T$ p+ ^4 A0 c% M5 \; r" O" ?% O& E# C# w
https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574
/ [) x/ R- w! C  ]' l" g/ v/ P! B8 O4 V7 v4 d" H$ p- _
; ~4 K' g2 y4 `3 {1 G4 d! I& I6 N0 k

5 E! m9 _1 Y" p3 H- ^3 ^3 b0 a核心问题在upload/source/include/spacecp/spacecp_profile.php
4 B% J1 m  N. ~6 ^. h6 _8 A6 Y: G0 N. w# ~2 I% _) d

Discuz!X3.4漏洞

Discuz!X3.4漏洞

/ o- j, t( a6 @, t! |2 v* y; b
: E$ I0 a" j! |* f7 c跟入代码70行
% M0 X7 l6 H5 l9 y

  1. - F1 D$ L) i! u) u8 Y' d& I, `. ~
  2. if(submitcheck('profilesubmit')) {
复制代码

4 Q1 k- ?* W$ Q+ }/ O* m
* x2 k2 S% }) v  W: {7 C当提交 profilesubmit 时进入判断,跟入177行3 t" D" ]# ?- U! @4 z% T
  T5 f% A6 G- H# D2 f8 a

Discuz!X3.4漏洞

Discuz!X3.4漏洞
( m- F  k. C$ x+ \3 @/ }
  P* p1 s' i4 m0 H$ Q' A
我们发现如果满足配置文件中某个 formtype 的类型为 file,我们就可以进入判断逻辑,这里我们尝试把配置输出出来看看
/ T+ q( {/ U9 K
3 c& f7 K2 ?2 I4 P  V7 I% L2 S- n! }

, }) @1 n# V- N4 y( @, ^/ I0 d6 I我们发现formtype字段和条件不符,这里代码的逻辑已经走不进去了
; E. w* o) k9 x& K7 Q3 |) Y3 X% I+ M9 \0 i* H: p0 H. W
我们接着看这次修复的改动,可以发现228行再次引入语句 unlink; N" p+ S6 u1 j# g$ H3 z* I

" g4 o6 x( U' d( Q
  1. @unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]);
复制代码
5 W5 f6 f' t; h: C
回溯进入条件
( \2 x4 I) Q+ F! k; @# r
% ^/ N/ c( w% d$ k% D- i0 n& B+ q- Z- C

Discuz!X3.4漏洞

Discuz!X3.4漏洞
  h. k1 A* C1 c: C" k. d: b
当上传文件并上传成功,即可进入 unlink 语句
) V. W7 \5 V- x- T4 i- Y' s( c% z2 d0 b

Discuz!X3.4漏洞

Discuz!X3.4漏洞
2 K/ l; Y4 B2 k. s

( s$ b; x2 C9 ]' d( `3 X% A7 X然后回溯变量$space[$key],不难发现这就是用户的个人设置。3 }" v4 s. N& D) U9 e6 u

2 v# J5 i0 `2 Q' s) c只要找到一个可以控制的变量即可,这里选择了 birthprovince。
, L& g$ H: w4 l) V: y9 _# K: B2 w7 b6 J% j4 P" I
在设置页面直接提交就可以绕过字段内容的限制了。5 ~* y/ {; ]. b$ B# q6 v( y5 z

/ |( B$ l2 l; _  O" k4 ]

Discuz!X3.4漏洞

Discuz!X3.4漏洞

2 @- B, i' p3 V1 \6 p- W7 m( P# r4 D: ?7 K0 t3 s! B0 k
成功实现了任意文件删除
  {! H% m+ F$ e/ [6 v  Z/ R# C
8 y3 A5 I3 s. |" e, n5 ^0x04 说在最后' @1 |0 i4 y% g) Y3 c2 T* c6 }

6 k) v- a0 {/ G8 U( ^3 Y7 y4 B在更新了代码改动之后,通过跟踪漏洞点逻辑,我们逐渐发现,该漏洞点在 2014 年被白帽子提交到 Wooyun平台上,漏洞编号wooyun-2014-065513。
6 }$ C: y6 l8 Y; c, v0 J) s  V6 X$ Y- S
由于DZ的旧版代码更新流程不完整,已经没办法找到对应的补丁了,回溯到 2013 年的 DZ3 版本中,我们发现了旧的漏洞代码9 A( H* a; o- ]3 }% I, s$ q& c

! K6 y! {9 t" H, t) ~$ s

Discuz!X3.4漏洞

Discuz!X3.4漏洞
; K8 N# H9 q; w  X/ q4 M4 s
. i# y9 a- s, `+ o. H
在白帽子提出漏洞,可以通过设置个人设置来控制本来不可控制的变量,并提出了其中一种利用方式。
" ~5 L6 d7 k8 _1 n+ H( Q# ^8 ?5 D3 _, O
厂商仅对于白帽子的攻击 poc 进行了相应的修复,导致几年后漏洞再次爆出,dz 才彻底删除了这部分代码...
0 p8 e0 X# |  Y. n; h( J! B$ M# N3 X5 y, ?# n0 j
期间厂商对于安全问题的解决态度值得反思...
; Y9 U) \, T2 e0 c$ [& q
, N8 Z% W& j" f5 i+ _# Z6 O0x05 Reference- l* V, |) w% w
1 b/ t7 h) |. C$ t4 f: |
[1] Discuz!官网; ~, X& s/ E6 d
http://www.discuz.net
  r* C( y' s# M/ A. t1 o% S[2] Discuz!更新补丁
# x- {, Y& G. c+ |, e1 F7 jhttps://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574
0 @7 E3 U- ^0 f: F/ D. |  u  C[3] Seebug漏洞平台收录地址+ m8 G: {% W* K3 }  ?
https://www.seebug.org/vuldb/ssvid-93588
当流科技-专业Discuz建站、仿站业务,专注处理discuz!论坛挂马,专注提供论坛托管维护服务! 提供Discuz论坛空间、VPS、云服务器!咨询QQ 569160956 778521512
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩课程推荐

抱歉,当前存在网络问题或服务器繁忙,详细错

主讲:我心枫叶 Discuz!教程

Discuz!论坛网盘附件免跳转下载(手机版网

主讲:当流科技 Discuz插件

宝塔面板绑定域名无法访问后台怎么解决?

主讲:风雨兼程 服务器学院

discuz论坛搬家教程,如何搬迁到新服务器?

主讲:风雨兼程 Discuz!教程

Discuz!X3.3全新安装和升级后快速回复框丢

主讲:风雨兼程 Discuz!教程

宝塔面板phpmyadmin 数据库502 Bad Gateway

主讲:当流科技 服务器学院

宝塔面板mysql怎么用navicat 连接数据库呢

主讲:当流科技 服务器学院

Discuz! X3.4虚拟人气虚拟用户在线插件 完

主讲:执手天涯 Discuz插件

商务合作

0551-66191059
service#dangliu.net
点击这里给我发消息
dz论坛/Discuz!论坛新手

关注微信公众号

QQ扫码 加 DZ技术群