Discuz!X ≤3.4 任意文件删除漏洞分析

作者:LoRexxar'@知道创宇404实验室

发表时间:2017年9月30日

0x01 简述

Discuz!X社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。

2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。

2017年9月29日,知道创宇404 实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到 Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号 ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。

经过分析确认,原有的利用方式已经被修复,添加了对属性的 formtype 判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他 unlink 条件,实现任意文件删除漏洞。

0x02 复现

登陆DZ前台账户并在当前目录下新建 test.txt 用于测试

请求

home.php?mod=spacecp&ac=profile&op=base
POST birthprovince=../../../test.txt&profilesubmit=1&formhash=b644603b
其中formhash为用户hash

修改成功之后出生地就会变为../../../test.txt

构造请求向home.php?mod=spacecp&ac=profile&op=base上传文件(普通图片即可)

请求后文件被删除

0x03 漏洞分析

Discuz!X 的码云已经更新修复了该漏洞

https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574

核心问题在upload/source/include/spacecp/spacecp_profile.php

跟入代码70行

if(submitcheck('profilesubmit')) {

当提交 profilesubmit 时进入判断,跟入177行

我们发现如果满足配置文件中某个 formtype 的类型为 file,我们就可以进入判断逻辑,这里我们尝试把配置输出出来看看

我们发现formtype字段和条件不符,这里代码的逻辑已经走不进去了

我们接着看这次修复的改动,可以发现228行再次引入语句 unlink

@unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]);

回溯进入条件

当上传文件并上传成功,即可进入 unlink 语句

然后回溯变量$space[$key],不难发现这就是用户的个人设置。

只要找到一个可以控制的变量即可,这里选择了 birthprovince。

在设置页面直接提交就可以绕过字段内容的限制了。

成功实现了任意文件删除

0x04 说在最后

在更新了代码改动之后,通过跟踪漏洞点逻辑,我们逐渐发现,该漏洞点在 2014 年被白帽子提交到 Wooyun平台上,漏洞编号wooyun-2014-065513。

由于DZ的旧版代码更新流程不完整,已经没办法找到对应的补丁了,回溯到 2013 年的 DZ3 版本中,我们发现了旧的漏洞代码

在白帽子提出漏洞,可以通过设置个人设置来控制本来不可控制的变量,并提出了其中一种利用方式。

厂商仅对于白帽子的攻击 poc 进行了相应的修复,导致几年后漏洞再次爆出,dz 才彻底删除了这部分代码...

期间厂商对于安全问题的解决态度值得反思...

0x05 Reference

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 zhuanlan_guanli@qq.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端笔记

【新手科普】windows和wordpress的“上帝模式”你知道嘛?

一、Windows 上帝模式 这个玩意出来很久很久了,估计不用多说,知道的同学还是挺多的,不知道的也只要百度一下,你就知道了。 方法很简单,在 Windows ...

2344
来自专栏finleyMa

electron 快速开始

阅读 https://github.com/electron/electron 要运行一个最小demo,只需

341
来自专栏张戈的专栏

解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题

昨天一个网友通过 QQ 联系我,说按照我博客之前分享的 http2 配置教程不能生效,想请我帮忙看看。 经过测试,使用谷歌浏览器访问他的测试站点,确实没有开启 ...

3227
来自专栏pangguoming

centos7 开机自动连网

新安装好的CentOS7桌面版,默认的网络都是关闭的,在图形页面中,开启后,重启后网络又关闭了。下面配置开机自动连网。

812
来自专栏情情说

单点登录与权限管理本质:cookie安全问题

继续介绍「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,前一篇文章介绍了单点登录概念,以CAS协议的基本流程为例讲解了系统间的交互过程,过程中,c...

35713
来自专栏信安之路

浅谈Session机制及CSRF攻防

在讲解CSRF攻击原理及流程之前,我想先花点时间讲讲浏览器信息传递中的Session机制。

530
来自专栏Seebug漏洞平台

Wordpress <= 4.6.1 使用语言文件任意代码执行 漏洞分析

Author: p0wd3r (知道创宇404安全实验室) 0x00 漏洞概述 1.漏洞简介 WordPress是一个以PHP和MySQL为平台的自由开源的博...

2974
来自专栏农夫安全

【端口渗透】21端口vsftpd服务后门

准备写一个专门关于端口渗透的一些小集合,每一篇代表一个端口对应的渗透方法,算不上什么牛逼的技术,但是对于实战时候还是具有一定的参考价值,之前已经发放了大概4-5...

3094
来自专栏技术博文

查看Linux内核版本之lsb_release

lsb_release命令 LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息,可通过yum -...

2534
来自专栏FreeBuf

添加Metasploit-payload到已有的Android项目中

*本文原创作者:xiaohuanshu,本文属FreeBuf原创奖励计划,未经许可禁止转载 metasploit在写这篇文章之前,笔者可以说是对java一窍...

2088

扫描关注云+社区