HTTP绕WAF之浅尝辄止
字数 1200 2025-08-11 23:05:55

HTTP绕WAF技术详解

0X00 前言

本文详细讲解如何通过HTTP首部字段绕过Web应用防火墙(WAF)的技术。WAF是攻防演练中常见的防护设备,理解其工作原理和绕过方法对安全测试至关重要。

0X01 WAF基础知识

WAF类型及特点

  1. 网络层WAF

    • 位于网络层,处理原始HTTP流量
    • 绕过方法:使用chunked编码等技术
  2. 应用层WAF

    • 位于应用层,处理经过Web服务器初步解析的请求
    • 绕过需研究Web服务器与后端语言的解析差异
  3. 云WAF(CDN+WAF)

    • 结合CDN和软件WAF的功能
    • 提供DDoS防护和流量清洗能力

0X02 Encoding相关绕过技术

Accept-Encoding与Content-Encoding

  • Accept-Encoding: 客户端声明支持的编码类型(请求头)
  • Content-Encoding: 服务端声明使用的编码类型(响应头)

绕过方法:

  1. 使用非常见编码(如ibm037、ibm500、cp875等)绕过字符检测
  2. 设置Content-Type: application/x-www-formmultipart/form-data;charset=ibm500

分块传输(Transfer-Encoding)

  • 使用Transfer-Encoding: chunked
  • 数据格式:
    [十六进制长度]
    [数据]
    [十六进制长度]
    [数据]
    0
    

0X03 Pipeline技术

  • HTTP基于TCP协议
  • Connection字段控制TCP连接:
    • close: 请求完成后断开连接
    • keep-alive: 保持连接用于后续请求

0X04 Content-Disposition绕过

多filename字段绕过

PHP会取最后一个filename值:

Content-Disposition: form-data; name="file1"; filename="1.txt";filename="1.php";

编码影响

Content-Type中的charset会影响filename的解析,可构造特殊编码绕过检测。

0X05 Content-Type绕过

三种主要类型

  1. application/x-www-form-urlencoded
  2. multipart/form-data
  3. text/plain

multipart/form-data绕过技术

  1. 双写上传描述行
  2. 双写整个Part开头
  3. 构造假的Part
  4. 双写Boundary
  5. 构造空Boundary
  6. 构造空格+Boundary
  7. 双写Content-Type
  8. Boundary+逗号绕过

核心思想: 让WAF误判参数是文件内容而非POST参数。

0X06 Filename绕过技术

  1. 截断绕过

    • 利用协议解析特性截断filename
  2. 空格+filename绕过

    filename ="1.jpg"
    
  3. 双引号+filename绕过

    filename""="1.jpg"
    

0X07 测试方法建议

  1. 搭建本地环境进行Fuzzing测试
  2. 结合代码审计和CTF技术进行白盒测试
  3. 研究Web服务器与后端语言解析差异

参考资源

  1. WAF绕过技术课程
  2. WAF绕过速查表
  3. 参数操作绕过WAF
  4. 深入WAF绕过技术
HTTP绕WAF技术详解 0X00 前言 本文详细讲解如何通过HTTP首部字段绕过Web应用防火墙(WAF)的技术。WAF是攻防演练中常见的防护设备,理解其工作原理和绕过方法对安全测试至关重要。 0X01 WAF基础知识 WAF类型及特点 网络层WAF 位于网络层,处理原始HTTP流量 绕过方法:使用chunked编码等技术 应用层WAF 位于应用层,处理经过Web服务器初步解析的请求 绕过需研究Web服务器与后端语言的解析差异 云WAF(CDN+WAF) 结合CDN和软件WAF的功能 提供DDoS防护和流量清洗能力 0X02 Encoding相关绕过技术 Accept-Encoding与Content-Encoding Accept-Encoding : 客户端声明支持的编码类型(请求头) Content-Encoding : 服务端声明使用的编码类型(响应头) 绕过方法 : 使用非常见编码(如ibm037、ibm500、cp875等)绕过字符检测 设置 Content-Type: application/x-www-form 或 multipart/form-data;charset=ibm500 分块传输(Transfer-Encoding) 使用 Transfer-Encoding: chunked 头 数据格式: 0X03 Pipeline技术 HTTP基于TCP协议 Connection 字段控制TCP连接: close : 请求完成后断开连接 keep-alive : 保持连接用于后续请求 0X04 Content-Disposition绕过 多filename字段绕过 PHP会取最后一个filename值: 编码影响 Content-Type中的charset会影响filename的解析,可构造特殊编码绕过检测。 0X05 Content-Type绕过 三种主要类型 application/x-www-form-urlencoded multipart/form-data text/plain multipart/form-data绕过技术 双写上传描述行 双写整个Part开头 构造假的Part 双写Boundary 构造空Boundary 构造空格+Boundary 双写Content-Type Boundary+逗号绕过 核心思想 : 让WAF误判参数是文件内容而非POST参数。 0X06 Filename绕过技术 截断绕过 利用协议解析特性截断filename 空格+filename绕过 双引号+filename绕过 0X07 测试方法建议 搭建本地环境进行Fuzzing测试 结合代码审计和CTF技术进行白盒测试 研究Web服务器与后端语言解析差异 参考资源 WAF绕过技术课程 WAF绕过速查表 参数操作绕过WAF 深入WAF绕过技术