Discuz! X 3.4 任意文件删除漏洞
一、漏洞简介
Discuz!X社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。
2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。
2017年9月29日,知道创宇404 实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到 Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号 ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。
经过分析确认,原有的利用方式已经被修复,添加了对属性的 formtype 判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他 unlink 条件,实现任意文件删除漏洞。
二、漏洞影响
版本<=3.4
三、复现过程
0x01 环境搭建
到github找版本小于3.4的库
下载discuz! 3.1版本
然后开启phpstudy
浏览器访问 localhost
设置安装条件
显示安装完成
0x02 漏洞复现
首先注册一个测试账号:bulangman
到根目录新建一个 test.txt文件
这是初始个人资料
抓包修改为test.txt:
0x03 任意文件删除
首先访问localhost/robots.txt 可见文件是存在的
在个人资料中,右击查看源代码,通过ctrl+F 搜索formhash,查找hash值:
然后新建一个名为: upload.html
的文件,将里面的ip地址和formhash改为我们自己的:localhost 872df170
双击打开我们创建的html:
然后任意上传一张图片,
然后任意选择一张图片并上传
最后发现文件被删除了。
四、漏洞分析
核心问题出在 DiscuzX-Common\DiscuzX-Common\source\include\spacecp
中
用vscode打开:
发现$_GET['deletefile']
没有任何处理,$space[$key]
来自:
所以我们需要在 $space
变量中找到一个存在需要被删除的文件的位置, 这里使用 birthprovince