文件上传漏洞(绕过姿势)(新补充)
字数 1869 2025-08-29 08:31:41

文件上传漏洞绕过技术全面指南

一、文件上传校验机制

1. 客户端校验

  • 校验方式:JavaScript脚本校验文件后缀名
  • 特点:在文件选择后、上传前弹出提示
  • 校验类型:白名单或黑名单形式
  • 识别特征:未发送数据包即出现错误提示

2. 服务端校验

  1. Content-Type字段校验

    • 检查$_FILES['userfile']['type']
    • 常见合法值:image/gif, image/jpeg
  2. 文件头校验

    • 通过文件头特征识别文件类型:
      • JPEG: JPGGraphic File
      • GIF: GIF 89A
      • ZIP: Zip Compressed
      • Office文档: MS Compound Document v1
  3. 后缀名校验

    • 黑名单:禁止危险扩展名
    • 白名单:只允许特定扩展名
  4. 自定义正则校验

    • 复杂的内容或文件名模式匹配
  5. WAF设备校验

    • 依赖具体WAF产品的规则集

二、绕过技术详解

1. 客户端绕过

  • 方法:BurpSuite等工具拦截修改上传数据包
  • 步骤
    1. 上传合法类型文件(如GIF)
    2. 拦截数据包修改文件扩展名为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 配合文件包含漏洞

  • 前提:服务器存在文件包含漏洞
  • 方法
    1. 上传txt文件包含恶意代码
    2. 上传php文件包含该txt文件
  • 各语言包含语法
    • PHP: <?php Include("file.txt");?>
    • ASP: <!--#include file="file.txt" -->
    • JSP: <jsp:include page="file.txt"/>

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

三、防御建议

  1. 扩展名校验

    • 使用白名单而非黑名单
    • 严格限制允许的文件类型
  2. 内容校验

    • 检查文件头与实际内容一致性
    • 对图片进行重采样处理
  3. 文件处理

    • 上传文件重命名(如MD5值)
    • 隐藏真实存储路径
    • 设置不可执行权限
  4. 服务器配置

    • 及时修补解析漏洞
    • 禁用危险HTTP方法(PUT等)
  5. 纵深防御

    • 结合WAF防护
    • 定期安全审计
  6. 安全开发

    • 使用成熟的文件上传组件
    • 避免直接使用用户提供的文件名

通过全面了解这些绕过技术和防御措施,安全人员可以更好地评估和加固文件上传功能的安全性。

文件上传漏洞绕过技术全面指南 一、文件上传校验机制 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 后缀名校验 黑名单:禁止危险扩展名 白名单:只允许特定扩展名 自定义正则校验 复杂的内容或文件名模式匹配 WAF设备校验 依赖具体WAF产品的规则集 二、绕过技术详解 1. 客户端绕过 方法 :BurpSuite等工具拦截修改上传数据包 步骤 : 上传合法类型文件(如GIF) 拦截数据包修改文件扩展名为php/asp/jsp 2. 服务端绕过技术 2.1 文件类型绕过 方法 :修改Content-Type为合法值 示例 : 2.2 文件头绕过 方法 :在恶意代码前添加合法文件头 示例 : 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"/> 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防护 定期安全审计 安全开发 : 使用成熟的文件上传组件 避免直接使用用户提供的文件名 通过全面了解这些绕过技术和防御措施,安全人员可以更好地评估和加固文件上传功能的安全性。