文件上传漏洞(绕过姿势)(新补充)
字数 1869 2025-08-29 08:31:41
文件上传漏洞绕过技术全面指南
一、文件上传校验机制
1. 客户端校验
- 校验方式:JavaScript脚本校验文件后缀名
- 特点:在文件选择后、上传前弹出提示
- 校验类型:白名单或黑名单形式
- 识别特征:未发送数据包即出现错误提示
2. 服务端校验
-
Content-Type字段校验
- 检查
$_FILES['userfile']['type']值 - 常见合法值:
image/gif,image/jpeg等
- 检查
-
文件头校验
- 通过文件头特征识别文件类型:
- JPEG:
JPGGraphic File - GIF:
GIF 89A - ZIP:
Zip Compressed - Office文档:
MS Compound Document v1
- JPEG:
- 通过文件头特征识别文件类型:
-
后缀名校验
- 黑名单:禁止危险扩展名
- 白名单:只允许特定扩展名
-
自定义正则校验
- 复杂的内容或文件名模式匹配
-
WAF设备校验
- 依赖具体WAF产品的规则集
二、绕过技术详解
1. 客户端绕过
- 方法:BurpSuite等工具拦截修改上传数据包
- 步骤:
- 上传合法类型文件(如GIF)
- 拦截数据包修改文件扩展名为php/asp/jsp
2. 服务端绕过技术
2.1 文件类型绕过
- 方法:修改Content-Type为合法值
- 示例:
Content-Type: image/gif (原为text/plain)
2.2 文件头绕过
- 方法:在恶意代码前添加合法文件头
- 示例:
GIF89a<?php phpinfo(); ?>
2.3 后缀名绕过(黑名单场景)
- 方法:
- 使用非常见扩展名:asa, cer等
- 大小写变异:aSp, pHp等
- 双重扩展名:file.php.jpg
- 特殊字符:file.asp., file.php(空格)
2.4 配合文件包含漏洞
- 前提:服务器存在文件包含漏洞
- 方法:
- 上传txt文件包含恶意代码
- 上传php文件包含该txt文件
- 各语言包含语法:
- PHP:
<?php Include("file.txt");?> - ASP:
<!--#include file="file.txt" --> - JSP:
<jsp:include page="file.txt"/>
- PHP:
2.5 利用服务器解析漏洞
- IIS6.0:
- 目录解析:/xx.asp/xx.jpg
- 分号解析:xx.asp;.jpg
- Apache:罕见扩展名解析(php3, php5等)
- Nginx:错误配置导致的解析漏洞
2.6 操作系统文件命名规则
- Windows特性:
- 自动去除非法字符:
test.asp.,test.php::$DATA - 流特性:
shell.php::$DATA
- 自动去除非法字符:
- Linux特性:大小写敏感,可尝试pHp等变异
2.7 CMS/编辑器漏洞
- 常见漏洞点:
- FCKeditor上传漏洞
- eWebEditor漏洞
- 各CMS特定上传组件漏洞
2.8 特殊绕过技术
- 0x00截断:
test.php%00.jpg- 路径截断:
/upload/1.php(0x00)/1.jpg
- HTTP参数污染:多个同名参数干扰WAF
3. WAF绕过技术
3.1 数据干扰
- 垃圾数据:在数据包开头或文件内容前添加大量无用数据
- 长文件名:超长非常规文件名干扰WAF
3.2 协议层绕过
- 修改请求方法:POST改为GET
- 编码变异:URL编码、双重编码特殊字符
3.3 Content-Type处理
- 删除字段:完全删除Content-Type行
- 部分删除:保留
C字符,如C.php - 大小写变异:
cOnTeNt-TyPe
3.4 边界不一致
- Boundary变异:前后boundary值不一致
- 添加空格:
boundary= xxx
3.5 多重Content-Disposition
- IIS特性:取第一个Content-Disposition值
- 方法:添加多个冲突的Content-Disposition字段
3.6 NTFS ADS特性
- 利用Windows流特性:
file.asp:jpg
三、防御建议
-
扩展名校验:
- 使用白名单而非黑名单
- 严格限制允许的文件类型
-
内容校验:
- 检查文件头与实际内容一致性
- 对图片进行重采样处理
-
文件处理:
- 上传文件重命名(如MD5值)
- 隐藏真实存储路径
- 设置不可执行权限
-
服务器配置:
- 及时修补解析漏洞
- 禁用危险HTTP方法(PUT等)
-
纵深防御:
- 结合WAF防护
- 定期安全审计
-
安全开发:
- 使用成熟的文件上传组件
- 避免直接使用用户提供的文件名
通过全面了解这些绕过技术和防御措施,安全人员可以更好地评估和加固文件上传功能的安全性。