HW 中如何利用 WAF 缺陷进行绕过
字数 1680 2025-08-19 12:40:48

WAF绕过技术深度解析

1. 利用WAF性能缺陷的绕过技术

1.1 垃圾字符填充技术

  • 原理:利用WAF对超大/超长数据包检测的性能限制
  • 实现方法
    • 在恶意payload前后填充大量无意义字符
    • 例如:/index.php?id=1/**/union/**/select/**/1,2,3,4/**/from/**/admin + 大量垃圾字符
  • 适用场景:通用型软WAF,特别是资源有限的部署环境

1.2 高并发请求攻击

  • 原理:利用WAF在高负载下可能放行部分请求的特性
  • 实现方法
    • 使用多线程/多进程同时发送大量请求
    • 结合延时技术增加成功率
  • 注意事项
    • 需要控制请求频率避免触发DDoS防护
    • 建议结合其他绕过技术使用

2. 利用WAF适配组件缺陷的绕过

2.1 IIS+ASP环境特性

  • 关键特性:IIS+ASP会忽略无效的百分号编码
  • 绕过示例
    xxx.asp?id=1 union se%lect 1,2,3,4 fro%m adm%in
    
    • WAF可能看到:包含%的异常语句
    • 后端实际执行:union select 1,2,3,4 from admin

2.2 Tomcat特性利用

2.2.1 空白字符插入

  • 可用空白字符
    %20 %09 %0a %0b %0c %0d %1c %1d %1e %1f
  • 示例
    %20filename%0a="1.jsp"
    

2.2.2 编码转换绕过

  • UTF-16编码
    • 将关键payload转换为UTF-16编码形式
  • CP037编码
    • 示例:原始payload ' and (7=len(db_name())) and 'a' = 'a
    • 转换为CP037编码形式

2.2.3 JSON Unicode编码

  • 实现方法
    • 将关键字符转换为\uXXXX形式
    • 例如:select\u0073\u0065\u006c\u0065\u0063\u0074

3. 利用WAF协议适配缺陷的绕过

3.1 畸形HTTP请求

  • 方法1:修改请求头为随机字符串
    xxxxT / HTTP/1.1
    
  • 方法2:请求方法后添加空字符
    GET%09/ HTTP/1.1
    
  • 方法3:GET请求携带POST体
    • 需要服务端支持解析

3.2 分块传输技术

  • 基本方法
    • 使用Transfer-Encoding: chunked
    • 将payload分割为多个小块
  • 高级技巧

3.3 非预期请求方式

  • Content-Type切换
    • application/x-www-form-urlencodedmultipart/form-data
  • HTTP方法切换
    • GET ↔ POST切换尝试
  • Header顺序调整
    • 改变标准Header顺序

4. 直接绕过WAF的访问技术

4.1 寻找真实IP绕过云WAF

  • 技术方法
    1. 证书查询:通过myssl.com等平台查询
    2. DNS历史记录:查询历史解析记录
    3. 子域名/C段扫描
      • 重点扫描未部署WAF的子域名
    4. 超级Ping:使用多地Ping服务
  • 实施步骤
    • 获取真实IP后修改hosts文件直接访问

4.2 寻找未部署WAF的反代节点

  • 操作流程
    1. 识别服务器IP段
    2. 扫描同C段其他服务器
    3. 测试是否存在可用的反向代理节点
    4. 通过该节点访问目标服务

5. WAF白名单利用技术

5.1 IP白名单绕过

  • 技术实现
    • 伪造X-Forwarded-For等头部
    • 使用工具:burpFakeIP
  • 常见伪造IP
    • 127.0.0.1
    • 内网IP段地址

5.2 爬虫User-Agent伪造

  • 常见爬虫UA
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
    
  • 实施要点
    • 收集各大搜索引擎爬虫UA
    • 根据目标业务特点选择合适的UA

6. 综合绕过策略建议

  1. 环境探测先行

    • 确定WAF类型和版本
    • 识别后端服务组件和版本
  2. 组合技术使用

    • 例如:分块传输+编码转换+延时传输
  3. 自动化工具辅助

    • 使用WAF测试工具如WAFW00F识别WAF
    • 利用自动化脚本测试多种绕过方式
  4. 流量分析验证

    • 对比拦截和放行的请求差异
    • 分析WAF规则匹配模式
  5. 持续更新技术库

    • 跟踪最新WAF绕过技术
    • 研究特定WAF产品的独有特性
WAF绕过技术深度解析 1. 利用WAF性能缺陷的绕过技术 1.1 垃圾字符填充技术 原理 :利用WAF对超大/超长数据包检测的性能限制 实现方法 : 在恶意payload前后填充大量无意义字符 例如: /index.php?id=1/**/union/**/select/**/1,2,3,4/**/from/**/admin + 大量垃圾字符 适用场景 :通用型软WAF,特别是资源有限的部署环境 1.2 高并发请求攻击 原理 :利用WAF在高负载下可能放行部分请求的特性 实现方法 : 使用多线程/多进程同时发送大量请求 结合延时技术增加成功率 注意事项 : 需要控制请求频率避免触发DDoS防护 建议结合其他绕过技术使用 2. 利用WAF适配组件缺陷的绕过 2.1 IIS+ASP环境特性 关键特性 :IIS+ASP会忽略无效的百分号编码 绕过示例 : WAF可能看到:包含%的异常语句 后端实际执行: union select 1,2,3,4 from admin 2.2 Tomcat特性利用 2.2.1 空白字符插入 可用空白字符 : %20 %09 %0a %0b %0c %0d %1c %1d %1e %1f 示例 : 2.2.2 编码转换绕过 UTF-16编码 : 将关键payload转换为UTF-16编码形式 CP037编码 : 示例:原始payload ' and (7=len(db_name())) and 'a' = 'a 转换为CP037编码形式 2.2.3 JSON Unicode编码 实现方法 : 将关键字符转换为 \uXXXX 形式 例如: select → \u0073\u0065\u006c\u0065\u0063\u0074 3. 利用WAF协议适配缺陷的绕过 3.1 畸形HTTP请求 方法1 :修改请求头为随机字符串 方法2 :请求方法后添加空字符 方法3 :GET请求携带POST体 需要服务端支持解析 3.2 分块传输技术 基本方法 : 使用Transfer-Encoding: chunked 将payload分割为多个小块 高级技巧 : 延时分块传输:在各chunk之间增加时间间隔 使用工具: chunked-coding-converter 3.3 非预期请求方式 Content-Type切换 : application/x-www-form-urlencoded → multipart/form-data HTTP方法切换 : GET ↔ POST切换尝试 Header顺序调整 : 改变标准Header顺序 4. 直接绕过WAF的访问技术 4.1 寻找真实IP绕过云WAF 技术方法 : 证书查询 :通过 myssl.com 等平台查询 DNS历史记录 :查询历史解析记录 子域名/C段扫描 : 重点扫描未部署WAF的子域名 超级Ping :使用多地Ping服务 实施步骤 : 获取真实IP后修改hosts文件直接访问 4.2 寻找未部署WAF的反代节点 操作流程 : 识别服务器IP段 扫描同C段其他服务器 测试是否存在可用的反向代理节点 通过该节点访问目标服务 5. WAF白名单利用技术 5.1 IP白名单绕过 技术实现 : 伪造X-Forwarded-For等头部 使用工具: burpFakeIP 常见伪造IP : 127.0.0.1 内网IP段地址 5.2 爬虫User-Agent伪造 常见爬虫UA : 实施要点 : 收集各大搜索引擎爬虫UA 根据目标业务特点选择合适的UA 6. 综合绕过策略建议 环境探测先行 : 确定WAF类型和版本 识别后端服务组件和版本 组合技术使用 : 例如:分块传输+编码转换+延时传输 自动化工具辅助 : 使用WAF测试工具如WAFW00F识别WAF 利用自动化脚本测试多种绕过方式 流量分析验证 : 对比拦截和放行的请求差异 分析WAF规则匹配模式 持续更新技术库 : 跟踪最新WAF绕过技术 研究特定WAF产品的独有特性