HTTP绕WAF之浅尝辄止
字数 1200 2025-08-11 23:05:55
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头 - 数据格式:
[十六进制长度] [数据] [十六进制长度] [数据] 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绕过
三种主要类型
application/x-www-form-urlencodedmultipart/form-datatext/plain
multipart/form-data绕过技术
- 双写上传描述行
- 双写整个Part开头
- 构造假的Part
- 双写Boundary
- 构造空Boundary
- 构造空格+Boundary
- 双写Content-Type
- Boundary+逗号绕过
核心思想: 让WAF误判参数是文件内容而非POST参数。
0X06 Filename绕过技术
-
截断绕过
- 利用协议解析特性截断filename
-
空格+filename绕过
filename ="1.jpg" -
双引号+filename绕过
filename""="1.jpg"
0X07 测试方法建议
- 搭建本地环境进行Fuzzing测试
- 结合代码审计和CTF技术进行白盒测试
- 研究Web服务器与后端语言解析差异