一、文件上传漏洞核心原理:“恶意文件非法上传与执行”
文件上传漏洞是指服务器对用户上传的文件缺乏有效验证或过滤,导致攻击者可将恶意文件(如 webshell、病毒、后门程序)上传至服务器,进而通过访问该文件执行恶意代码,获取服务器权限甚至控制整个系统。其本质是 “信任边界的突破”—— 服务器错误地信任了用户上传的文件内容或属性,未对 “文件是否合法”“是否会被执行” 进行严格校验。
1. 漏洞产生的三大根源
(1)验证逻辑缺陷
服务器仅通过 “表面特征”(如文件扩展名、MIME 类型)判断文件合法性,而这些特征可被轻易伪造:
前端验证(客户端验证):仅通过 JS 限制上传文件类型(如accept="image/*"),攻击者禁用 JS 或修改前端代码即可绕过;
后端扩展名验证:使用黑名单限制(如禁止.php .asp),但黑名单不完整(漏判.php5 .phtml等)或可被混淆(如.php. .php_);
MIME 类型验证:仅检查Content-Type头(如image/jpeg),攻击者可通过 Burp 修改该字段绕过。
(2)服务器配置缺陷
即使文件本身合法,服务器的解析规则或路径配置可能导致恶意代码执行:
解析漏洞:如 IIS 对*.asp;.jpg的解析缺陷(将文件视为 ASP 执行)、Nginx 对*.php5的错误解析(当作 PHP 执行);
路径可控:攻击者可控制上传文件的保存路径(如../路径穿越),将文件写入网站根目录(可被访问执行);
权限过松:上传目录被配置为可执行权限(如chmod 777),导致上传的脚本文件被直接执行。
2. 与其他漏洞的关联(攻击链价值)
文件上传漏洞常作为 “初始突破点”,与其他漏洞结合形成攻击链:
文件上传 + 文件包含:上传的恶意文件(如shell.txt)通过文件包含漏洞(include($_GET['file']))执行;
文件上传 + 解析漏洞:上传shell.jpg(含 PHP 代码),利用服务器对shell.jpg.php的解析缺陷执行;
文件上传 + 提权漏洞:获取 webshell 后,通过内核漏洞(如Dirty Cow)提权至 root 权限。
SRC 中挖掘文件上传漏洞关注点
在 src 挖掘文件上传漏洞只需要证明此处存在文件上传漏洞即可,上传并打印一个 hello world 文件就行,不要控制人家的服务器那人家的 shell。--这是红线
SRC 中文件上传漏洞的挖掘核心是 “定位上传入口→测试验证绕过→证明文件可执行”
(1)前端验证绕过(最易突破)
原理:部分系统仅在前端通过 JS 限制文件类型(如只允许 .jpg,未在后端二次验证。
测试方法:
- 尝试上传 .php文件,观察是否弹出 “仅支持图片” 提示(确认存在前端验证);
- 禁用浏览器 JS(F12→设置→禁用 JavaScript)或删除前端`验证函数;
- 重新上传`.php文件,若能提交至服务器→前端验证可绕过。
(2)扩展名验证绕过(高频漏洞点)
原理:后端通过黑名单 / 白名单限制扩展名,但规则存在缺陷。
有的是这种:
目标仅禁止`.php 上传 shell.php5 若文件被保存且能通过http://target.com/upload/shell.php5 访问执行→存在漏洞。
(3)MIME 类型绕过
原理:后端仅检查Content-Type头(如image/jpeg),而非文件实际内容。
测试方法:
- 用 Burp 拦截上传请求,原始Content-Type 为 application/octet-stream(PHP 文件默认);
- 修改Content-Type 为 image/jpeg 或 image/png(对应白名单允许的类型);
- 若.php文件被成功上传→MIME 验证可绕过。

