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