文件上传漏洞
一句话定义
1 | 文件上传漏洞是系统对上传文件的后缀、MIME、内容、路径和执行权限限制不严格,导致攻击者上传恶意脚本文件,最终可能获取 WebShell 或执行命令。 |
测试流程
- 上传正常图片,确认上传流程。
- Burp 抓包,判断前端校验还是后端校验。
- 测试后缀黑白名单。
- 测试 MIME 类型。
- 测试文件头。
- 测试大小写、双后缀、特殊后缀。
- 判断上传目录是否能访问。
- 判断上传目录是否有脚本执行权限。
- 根据中间件和语言环境选择 payload。
常见绕过
- 前端 JS 校验绕过。
- MIME 绕过。
- 文件头绕过,如
GIF89a。 - 后缀绕过,如
.php3、.php5、.phtml。 - 大小写绕过。
- 双后缀。
- 图片马。
- 解析差异。
- 条件竞争。
- 配置文件配合。
PHP 场景
关注:
.php.php3.php5.phtml.htaccess.user.ini
.htaccess 主要适用于 Apache 且允许目录配置覆盖。.user.ini 主要与 PHP-FPM 场景相关。
.NET/IIS 场景
关注:
.aspx.ashx.asmx.asp.asa.cer- IIS 解析配置。
- 上传目录执行权限。
web.config配置风险。
Java/Tomcat 场景
关注:
.jsp.jspx- war 包部署。
- Tomcat 管理后台弱口令。
- 上传目录是否会被 JSP 引擎解析。
关键理解
上传成功不等于 getshell。必须满足:
- 文件可访问。
- 上传目录有对应脚本执行权限。
- 文件能被对应中间件解析。
修复方案
- 后端白名单限制。
- 校验真实文件内容。
- 文件重命名。
- 上传目录禁止脚本执行。
- 文件放到对象存储或静态资源域。
- 限制文件大小和上传频率。
- 不返回可预测路径。
- 做病毒/恶意文件扫描。
面试标准回答
1 | 文件上传漏洞是因为系统对上传文件的后缀、MIME、内容、路径和执行权限限制不严格,导致攻击者上传恶意脚本。 |