文件上传漏洞是指:攻击者通过 Web 应用提供的文件上传功能,上传恶意文件(如脚本、后门、WebShell、木马),并在服务器端执行或利用其控制服务器、窃取数据、发起横向攻击等行为。
📌 文件上传漏洞危害极大,直接导致远程代码执行(RCE) 是最常见的严重后果。
很多 Web 应用提供上传功能,例如:
后台通常会将文件存储在某个目录,并通过 URL 进行访问。
.php.jpg)。攻击者上传一个包含恶意代码的文件(如 shell.php),然后通过访问路径执行命令:
<?php system($_GET['cmd']); ?>
访问方式:
http://target.com/upload/shell.php?cmd=whoami
攻击者上传伪装后缀的脚本文件:
shell.php.jpgshell.jpg%00.php(空字节绕过)shell.phtml、shell.phar(变种扩展)一些服务器以最后一个扩展名判断类型:
shell.jpg.php → 实际为 PHP 文件,但通过 jpg 验证绕过
上传文件名包含 ../ 可能导致任意文件覆盖或写入:
../../../webroot/index.jsp
<?php @eval($_POST[cmd]); ?>| 技巧 | 说明 |
|---|---|
| 双扩展 | a.jpg.php |
| MIME 伪造 | Content-Type: image/png |
| 文件头欺骗 | 文件开头加入 \x89PNG 等合法图片头 |
| Null 字节 | shell.php%00.jpg(需低版本 PHP) |
| 大小写混淆 | .PHP, .PhP |
| 利用特殊扩展 | .phtml, .phar, .shtml, .jsp 等 |
| 拓展名白名单绕过 | 上传 .svg、.pdf 嵌入 JavaScript |
| 文件名覆盖 | 上传 .htaccess,修改目录执行规则 |
| 漏洞编号 | 漏洞描述 | 影响 |
|---|---|---|
| CVE-2018-9206 | DedeCMS 任意文件上传 | 可上传 PHP Shell |
| CVE-2018-10299 | WordPress Plugin Arbitrary File Upload | 插件上传未校验 |
| CNVD-2019-44150 | 若依管理系统任意文件上传 | 上传 JSP 导致 RCE |
| CVE-2022-22965 | Spring4Shell 任意写文件 | 可写入任意路径文件 |
| 防御措施 | 说明 |
|---|---|
| ✅ 白名单文件类型校验 | 仅允许 .jpg, .png, .pdf 等 |
| ✅ 文件内容检测 | 使用魔术头(magic bytes)或 MIME 检查 |
| ✅ 隔离上传目录 | 设置上传目录为不可执行 |
| ✅ 文件重命名 | 上传后用随机 UUID 命名,防止伪造 |
| ✅ 不信任客户端 | 不要依赖前端 JS 的限制 |
| ✅ 加强权限控制 | 上传接口仅限认证用户 |
| ✅ 文件后处理 | 对图片类使用图像处理库(如 PIL)转码防脚本嵌入 |
| ✅ WAF & 审计日志 | 阻止已知 payload,记录上传行为 |
| 项目 | 内容 |
|---|---|
| 漏洞名称 | 文件上传漏洞(File Upload Vulnerability) |
| 危害等级 | 高危(可能导致远程代码执行) |
| 攻击方式 | 上传恶意脚本并访问或利用执行 |
| 常见绕过 | 双扩展、MIME伪造、Null字节、白名单绕过 |
| 防御手段 | 类型校验、路径隔离、禁执行、重命名等 |
✅ 文件上传漏洞是Web 安全中最危险的漏洞之一,必须在设计阶段就考虑上传功能的安全控制。
📝 作者:ahlien 📧 邮箱:mfs24@mails.tsinghua.edu.cn
🏫 单位:Tsinghua University
📅 最后更新时间:2025-08-01