【漏洞分析】Discuz!<=3.3 任意文件删除漏洞

0x01 前言

之前网上爆的的是Discuz!<=3.4的任意文件删除漏洞,为什么这里变成3.3了呢?因为厂商已经把3.4的修复了,不过3.3版本还是存在问题的。

0x02 漏洞复现

首先,在本地创建一个我们要删除的测试文件

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第1张图片

注册一个账号

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第2张图片

然后点击保存,用burp抓个包,就可以得到我们的formhash,并在birthprovince中修改成我们要删除的文件路径(../../../test.txt)

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第3张图片
【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第4张图片

然后可以在本地创建一个文件上传的表单




    Upload


【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第5张图片

然后点击上传

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第6张图片

就完成了删除文件了~


【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第7张图片

0x03 漏洞分析

这里漏洞出现在/upload/source/include/spacecp/spacecp_profile.php

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第8张图片

这里第182、183行有两个unlink()函数可以删除文件,但是需要formtype=file才可以,我们把这里的打印出来

发现并不是file,因此不能在这里进行删除,继续往下看,

【漏洞分析】Discuz!<=3.3 任意文件删除漏洞_第9张图片

第229行有一个unlink()函数,并且没有任何判断,也就是说只要程序运行到这里,就可以删除文件。看一下条件

@unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]);

这里向上回溯,看一下$space[$key]在哪里。

出现在第23行,发现这个就是用户的个人设置,我们可以选择birthprovince,修改成要删除的文件就好了,然后实现一个上传文件 的表单,就可以删除文件了。

你可能感兴趣的:(【漏洞分析】Discuz!<=3.3 任意文件删除漏洞)