文件上传/读取/包含漏洞技术说明
免责声明:本文所述技术仅供教育研究及安全防御参考,严禁用于任何非法用途。未经授权的网络攻击行为违反法律法规,后果自负。
一、文件上传漏洞
漏洞概述:文件上传漏洞源于未对用户上传的文件进行严格校验,攻击者可上传恶意文件(如Webshell)至服务器,导致服务器被控制、数据泄露等危害。
常见绕过技术:
1. MIME TYPE绕过
- 原理:服务端仅校验HTTP头的Content-Type(如image/jpeg),攻击者可伪造该字段。
- 防御:校验文件内容而非头部,结合文件签名检测。
2. getimagesize绕过
- 原理:服务端使用getimagesize()函数验证是否为图片,攻击者可在图片中嵌入恶意代码。
- 防御:二次渲染图片或使用专业图像处理库。
3. 黑名单绕过
- 原理:黑名单未覆盖所有危险后缀(如.php5, .phtml)。
- 防御:采用白名单机制(仅允许.jpg, .png等)。
4. 时间竞争条件绕过
- 原理:服务端先保存文件再校验,攻击者利用时间差执行恶意文件。
- 防御:校验完成后再保存文件,限制临时目录执行权限。
实战场景:
- 编辑器漏洞:如FCKeditor、UEditor等历史版本存在上传逻辑缺陷,可直接上传Webshell。
- 解析漏洞:
- IIS:test.asp;.jpg被解析为ASP文件。
- Apache/Nginx:多后缀解析特性(如test.php.jpg)。
二、文件包含/下载读取漏洞
漏洞概述:通过动态包含或下载服务器文件(如include($_GET['file'])),攻击者可读取敏感文件(如/etc/passwd)或执行远程代码。
利用条件:
- 服务端未对包含路径进行过滤。
- 允许包含远程文件(allow_url_include=On)。
常见利用方式:
1. 伪协议利用:
- PHP:php://filter/read=convert.base64-encode/resource=index.php(读取源码)。
- PHP:data://text/plain,<?php system("id");?>(执行代码)。
2. 路径遍历:
- 通过../../跳转目录读取敏感文件,如download.php?file=../../config.php。
防御措施:
- 禁用危险函数(如include动态参数)。
- 限制文件包含范围为指定目录,过滤../等特殊字符。
三、组合漏洞利用 — RCE(远程代码执行)
攻击链示例:
1. 通过文件上传漏洞植入恶意图片马(含Webshell代码)。
2. 利用解析漏洞(如IIS短文件名)将图片马解析为可执行脚本。
3. 通过文件包含漏洞动态加载恶意文件,触发RCE。
防御建议:
- 全流程校验:上传白名单 + 内容检测 + 存储重命名。
- 最小化服务器权限:禁止上传目录执行脚本。
- 定期更新中间件(Apache/Nginx/IIS)及编辑器版本。
注:本文仅从技术原理与防御角度分析,任何未经授权的漏洞利用均属违法行为。