0x01 前言
之前网上爆的的是Discuz!<=3.4的任意文件删除漏洞,为什么这里变成3.3了呢?因为厂商已经把3.4的修复了,不过3.3版本还是存在问题的。
0x02 漏洞复现
首先,在本地创建一个我们要删除的测试文件
注册一个账号
然后点击保存,用burp抓个包,就可以得到我们的formhash,并在birthprovince中修改成我们要删除的文件路径(../../../test.txt)
然后可以在本地创建一个文件上传的表单
1 | <!DOCTYPE html> |
然后点击上传
就完成了删除文件了~
![](/images/Discuz3.3任意文件删除漏洞7.png
0x03 漏洞分析
这里漏洞出现在/upload/source/include/spacecp/spacecp_profile.php
这里第182、183行有两个unlink()函数可以删除文件,但是需要formtype=file才可以,我们把这里的打印出来
发现并不是file,因此不能在这里进行删除,继续往下看,
第229行有一个unlink()函数,并且没有任何判断,也就是说只要程序运行到这里,就可以删除文件。看一下条件
1 | @unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]); |
这里向上回溯,看一下$space[$key]在哪里。
出现在第23行,发现这个就是用户的个人设置,我们可以选择birthprovince,修改成要删除的文件就好了,然后实现一个上传文件 的表单,就可以删除文件了。