头疼的上传绕过waf
字数 1242 2025-08-11 08:36:20

文件上传WAF绕过技术详解

1. 前言

本文详细分析了一次针对.NET环境下文件上传WAF的绕过过程,总结了多种有效的绕过技术和方法。

2. 环境探测

2.1 初始信息

  • 目标系统:某自来水公司平台
  • 系统架构:Windows + .NET
  • 登录方式:无验证码,MD5加密密码,可通过爆破进入

2.2 上传点发现

  1. 头像上传功能:可上传但回显路径复杂
  2. 资料上传功能:实际可利用的上传点
  3. 数据库管理功能:透明访问,可获取文件存储路径信息

3. 文件存储路径分析

文件存储路径结构:

/Resource/DocumentFile/ + /encode1/ + /time/ + /encode2+后缀/

其中:

  • encode1 = CreateUserId
  • time = 年月日格式
  • encode2 = 未知算法生成

4. WAF绕过技术详解

4.1 Content-Disposition字段绕过

  1. 大小写混淆

    • 示例:Content-Dispositioncontent-disposition
  2. 超长字符串填充

    • 在字段值前后添加冗余字符
  3. 特殊字符利用

    • 利用Windows文件名限制字符:/ \ : * ? " < > |
    • 示例:在filename中插入这些字符
  4. 边界修改

    • 改变filename边界使WAF匹配失败
  5. 多filename构造

    • 示例:filename="a.txt"; filename="b.asp"
  6. 位置变换

    • 调整字段顺序和位置

4.2 .NET特定绕过技术

基于.NET对multipart/form-data解析的特性:

  1. boundary处理特性

    • 分号、逗号和等于号都可作为分隔符
    • 可忽略某些空白字符
    • form-data字段可以省略
    • 可在filename和name前随意填充字段
  2. 有效绕过构造示例

Content-Type: multipart/form-data\u0085,;,,,,; boundary = ----WebKitFormBoundary3ah8K0kGYGlF1wE4
Content-Disposition: \u0;asdas\u008name="file"; filename==test.asp
Content-Type: !!!
  1. 其他变体
    • Unicode字符插入
    • 边界空格变化
    • 冗余分隔符

4.3 其他尝试方法

  1. 双文件构造:同时上传多个文件
  2. 参数间特殊字符:在参数间添加非常规字符
  3. 多写技术:重复关键字段

5. 技术原理

绕过成功基于以下原理:

  1. 规范实现差异

    • RFC1867 (基于表单的文件上传)
    • RFC7578 (multipart/form-data)
    • RFC2046 Section 5.1 (Multipart Media Type)
  2. WAF匹配缺陷

    • 正则表达式不完善
    • 解析逻辑与服务器不一致
  3. .NET解析特性

    • 宽松的边界处理
    • 非常规字符容忍度高

6. 防御建议

  1. 服务端防御

    • 严格校验文件内容和扩展名
    • 使用白名单机制
    • 重命名上传文件
  2. WAF配置

    • 更新规则库
    • 模拟服务器解析逻辑
    • 深度内容检测
  3. 系统加固

    • 限制上传目录执行权限
    • 定期安全审计

7. 总结

文件上传WAF绕过是一个需要耐心和技巧的过程,关键在于:

  1. 充分理解目标系统的解析逻辑
  2. 掌握各种规范和实现的差异
  3. 系统性地尝试各种可能的绕过技术
  4. 结合环境特性定制绕过方案

通过本文介绍的技术和方法,安全测试人员可以更有效地测试文件上传功能的安全性,同时也帮助开发人员更好地防御此类攻击。

文件上传WAF绕过技术详解 1. 前言 本文详细分析了一次针对.NET环境下文件上传WAF的绕过过程,总结了多种有效的绕过技术和方法。 2. 环境探测 2.1 初始信息 目标系统:某自来水公司平台 系统架构:Windows + .NET 登录方式:无验证码,MD5加密密码,可通过爆破进入 2.2 上传点发现 头像上传功能:可上传但回显路径复杂 资料上传功能:实际可利用的上传点 数据库管理功能:透明访问,可获取文件存储路径信息 3. 文件存储路径分析 文件存储路径结构: 其中: encode1 = CreateUserId time = 年月日格式 encode2 = 未知算法生成 4. WAF绕过技术详解 4.1 Content-Disposition字段绕过 大小写混淆 : 示例: Content-Disposition → content-disposition 超长字符串填充 : 在字段值前后添加冗余字符 特殊字符利用 : 利用Windows文件名限制字符: / \ : * ? " < > | 示例:在filename中插入这些字符 边界修改 : 改变filename边界使WAF匹配失败 多filename构造 : 示例: filename="a.txt"; filename="b.asp" 位置变换 : 调整字段顺序和位置 4.2 .NET特定绕过技术 基于.NET对multipart/form-data解析的特性: boundary处理特性 : 分号、逗号和等于号都可作为分隔符 可忽略某些空白字符 form-data字段可以省略 可在filename和name前随意填充字段 有效绕过构造示例 : 其他变体 : Unicode字符插入 边界空格变化 冗余分隔符 4.3 其他尝试方法 双文件构造 :同时上传多个文件 参数间特殊字符 :在参数间添加非常规字符 多写技术 :重复关键字段 5. 技术原理 绕过成功基于以下原理: 规范实现差异 : RFC1867 (基于表单的文件上传) RFC7578 (multipart/form-data) RFC2046 Section 5.1 (Multipart Media Type) WAF匹配缺陷 : 正则表达式不完善 解析逻辑与服务器不一致 .NET解析特性 : 宽松的边界处理 非常规字符容忍度高 6. 防御建议 服务端防御 : 严格校验文件内容和扩展名 使用白名单机制 重命名上传文件 WAF配置 : 更新规则库 模拟服务器解析逻辑 深度内容检测 系统加固 : 限制上传目录执行权限 定期安全审计 7. 总结 文件上传WAF绕过是一个需要耐心和技巧的过程,关键在于: 充分理解目标系统的解析逻辑 掌握各种规范和实现的差异 系统性地尝试各种可能的绕过技术 结合环境特性定制绕过方案 通过本文介绍的技术和方法,安全测试人员可以更有效地测试文件上传功能的安全性,同时也帮助开发人员更好地防御此类攻击。