技术讨论 | 在HTTP协议层面绕过WAF
字数 1514 2025-08-18 11:37:53

HTTP协议层面绕过WAF技术详解

一、背景介绍

随着Web应用安全意识的增强,许多企业通过部署Web应用防火墙(WAF)来保护网站安全。然而,老旧Web应用或追求低成本安全解决方案的系统往往仅依赖WAF作为唯一防护措施。本文详细讲解在HTTP协议层面绕过WAF的技术方法,适用于SQL注入、命令执行、代码执行等多种渗透测试场景。

二、实验环境

  • 测试环境:Win10 + XAMPP
  • WAF:某狗Web应用防火墙最新版
  • 测试脚本:使用$_REQUEST["id"]接收GET/POST数据
  • WAF配置:拦截URL和POST中的andor等SQL注入关键词

三、绕过技术详解

1. 利用HTTP Pipeline绕过

原理
HTTP协议基于TCP封装,Connection字段决定TCP连接是否保持。当值为keep-alive时,连接会保持直到传输结束。

步骤

  1. 关闭Burp Repeater的Content-Length自动更新
  2. 截获POST请求id=1 and 1=1(会被WAF拦截)
  3. 复制数据包并粘贴到原数据包后面
  4. 修改第一个数据包:
    • id=1+and+1%3D1改为id=1
    • 设置Content-Length为修改后内容长度(4)
    • 将Connection设为keep-alive

特点

  • 两个数据包都能到达服务器
  • 可能被某些WAF拦截,但可作为组合技术的一部分

2. 分块编码传输绕过

原理
使用Transfer-Encoding: chunked头部,将数据分块传输,每块包含十六进制长度值和数据。

步骤

  1. 开启Content-Length自动更新
  2. 添加Transfer-Encoding: chunked头部
  3. id=1 and 1=1进行分块编码:
    9       ← 十六进制长度值
    id=1 an  ← 数据
    3       ← 长度值
    d 1=1   ← 数据
    0       ← 结束标志
    

关键点

  • 必须将SQL关键词拆开编码
  • 长度值需包括空格
  • 0独占一行表示结束,后跟两个空行
  • 可有效绕过某狗WAF

3. 协议未覆盖绕过

原理
利用WAF未覆盖的Content-Type类型传输数据。

方法

  1. 修改Content-Type为:
    multipart/form-data; boundary=69
    
  2. 设置分割符内的Content-Disposition:
    --69
    Content-Disposition: form-data; name="id"
    
    1 and 1=1
    --69--
    

变体技巧

  • 使用小数点作为连接符:1.and 1=1
  • 适用于某些未检测此类变体的WAF

4. 组合技术绕过(分块编码+协议未覆盖)

步骤

  1. 在multipart/form-data数据包中添加Transfer-Encoding: chunked
  2. 对数据部分进行分块编码,需满足以下结构:
    • 第2块:包含Content-Disposition: name="id"和两个空行
    • 第3块:数据开始部分,包含长度值、空行和数据
    • 第7块:分割边界结束部分
    • 第8块:0后跟两个空行

关键要求

  • 严格计算每块长度(包括空行)
  • 确保分块格式正确
  • 这是最复杂的绕过方式,但效果最佳

四、技术要点总结

  1. 分块编码是最有效的独立绕过技术
  2. 协议未覆盖方法依赖于WAF的检测盲区
  3. Pipeline技术可作为辅助手段
  4. 组合技术提供了最高级别的绕过能力
  5. 关键词处理:拆分、变形(如使用小数点)可增强绕过效果

五、防御建议

  1. 不应仅依赖WAF作为唯一安全措施
  2. 应定期更新WAF规则以应对新型绕过技术
  3. 对输入数据进行严格验证和过滤
  4. 使用参数化查询防止SQL注入
  5. 监控异常HTTP请求格式

六、应用范围

这些技术不仅限于SQL注入测试,还可应用于:

  • 命令执行测试
  • 代码注入测试
  • 文件上传绕过
  • XSS攻击测试

通过深入理解HTTP协议特性和WAF工作原理,安全测试人员可以更有效地评估Web应用的真实安全性。

HTTP协议层面绕过WAF技术详解 一、背景介绍 随着Web应用安全意识的增强,许多企业通过部署Web应用防火墙(WAF)来保护网站安全。然而,老旧Web应用或追求低成本安全解决方案的系统往往仅依赖WAF作为唯一防护措施。本文详细讲解在HTTP协议层面绕过WAF的技术方法,适用于SQL注入、命令执行、代码执行等多种渗透测试场景。 二、实验环境 测试环境:Win10 + XAMPP WAF:某狗Web应用防火墙最新版 测试脚本:使用 $_REQUEST["id"] 接收GET/POST数据 WAF配置:拦截URL和POST中的 and 、 or 等SQL注入关键词 三、绕过技术详解 1. 利用HTTP Pipeline绕过 原理 : HTTP协议基于TCP封装,Connection字段决定TCP连接是否保持。当值为 keep-alive 时,连接会保持直到传输结束。 步骤 : 关闭Burp Repeater的Content-Length自动更新 截获POST请求 id=1 and 1=1 (会被WAF拦截) 复制数据包并粘贴到原数据包后面 修改第一个数据包: 将 id=1+and+1%3D1 改为 id=1 设置Content-Length为修改后内容长度(4) 将Connection设为 keep-alive 特点 : 两个数据包都能到达服务器 可能被某些WAF拦截,但可作为组合技术的一部分 2. 分块编码传输绕过 原理 : 使用 Transfer-Encoding: chunked 头部,将数据分块传输,每块包含十六进制长度值和数据。 步骤 : 开启Content-Length自动更新 添加 Transfer-Encoding: chunked 头部 对 id=1 and 1=1 进行分块编码: 关键点 : 必须将SQL关键词拆开编码 长度值需包括空格 以 0 独占一行表示结束,后跟两个空行 可有效绕过某狗WAF 3. 协议未覆盖绕过 原理 : 利用WAF未覆盖的Content-Type类型传输数据。 方法 : 修改Content-Type为: 设置分割符内的Content-Disposition: 变体技巧 : 使用小数点作为连接符: 1.and 1=1 适用于某些未检测此类变体的WAF 4. 组合技术绕过(分块编码+协议未覆盖) 步骤 : 在multipart/form-data数据包中添加 Transfer-Encoding: chunked 对数据部分进行分块编码,需满足以下结构: 第2块:包含 Content-Disposition: name="id" 和两个空行 第3块:数据开始部分,包含长度值、空行和数据 第7块:分割边界结束部分 第8块: 0 后跟两个空行 关键要求 : 严格计算每块长度(包括空行) 确保分块格式正确 这是最复杂的绕过方式,但效果最佳 四、技术要点总结 分块编码 是最有效的独立绕过技术 协议未覆盖 方法依赖于WAF的检测盲区 Pipeline技术 可作为辅助手段 组合技术 提供了最高级别的绕过能力 关键词处理 :拆分、变形(如使用小数点)可增强绕过效果 五、防御建议 不应仅依赖WAF作为唯一安全措施 应定期更新WAF规则以应对新型绕过技术 对输入数据进行严格验证和过滤 使用参数化查询防止SQL注入 监控异常HTTP请求格式 六、应用范围 这些技术不仅限于SQL注入测试,还可应用于: 命令执行测试 代码注入测试 文件上传绕过 XSS攻击测试 通过深入理解HTTP协议特性和WAF工作原理,安全测试人员可以更有效地评估Web应用的真实安全性。