唯快不破的分块传输绕WAF
字数 1007 2025-08-15 21:33:12
分块传输编码绕过WAF进行SQL注入攻击技术详解
1. 技术背景
分块传输编码(Chunked transfer encoding)是HTTP/1.1协议中的一种数据传输机制,允许服务器将数据分成多个部分发送给客户端。这种机制原本用于处理服务器无法预先确定响应内容总大小的情况,如大文件下载或动态生成内容。
2. 分块传输原理
2.1 标准HTTP传输
- 通常HTTP请求包含
Content-Length头部,指明报文体长度 - WAF通常依赖
Content-Length来检测恶意负载
2.2 分块传输特点
- 使用
Transfer-Encoding: chunked头部替代Content-Length - 数据被分解为一系列数据块发送
- 每个块包含长度前缀和实际数据
- 最后以零长度块表示传输结束
3. 分块传输绕过WAF的原理
- WAF通常设计为检查完整的HTTP请求
- 分块传输将恶意负载拆分为多个小块
- 每个单独的小块可能不触发WAF规则
- WAF可能无法正确重组分块数据进行检查
4. 实施步骤
4.1 准备工作
- 获取渗透测试授权书
- 准备测试环境:
- Burp Suite
- sqlmap
- Chunked-coding-converter插件
4.2 工具安装与配置
- 安装Burp Suite插件:
git clone https://github.com/c0ny1/chunked-coding-converter - 在Burp中加载插件并启用代理
4.3 攻击流程
- 使用Burp拦截正常请求
- 将请求保存为
post.txt文件 - 使用sqlmap通过Burp代理发送分块请求:
sqlmap.py -r post.txt --proxy=http://127.0.0.1:8080 --os-shell
5. 高级技巧
5.1 自动化模式
sqlmap.py -r post.txt --proxy=http://127.0.0.1:8080 --batch
5.2 多线程优化
sqlmap.py -r post.txt --proxy=http://127.0.0.1:8080 --batch --threads 10
5.3 修改sqlmap配置
编辑settings.py文件:
MAX_NUMBER_OF_THREADS = 9999 # 根据实际情况调整
6. 防御措施
6.1 对于防御方
- 部署能够正确解析分块传输的WAF
- 在应用层实现输入验证
- 监控异常的分块传输请求
6.2 对于渗透测试人员
- 确保获得合法授权
- 测试后及时清理痕迹
- 遵守约定的测试时间窗口
7. 注意事项
- 该方法仅适用于HTTP/1.1协议
- 并非所有WAF都容易受到此技术影响
- 实际效果取决于目标系统的具体配置
- 在授权测试中需严格遵守测试范围
8. 总结
分块传输编码绕过WAF是一种有效的SQL注入技术,特别适用于传统签名检测型WAF。通过将恶意负载拆分为多个小块,可以规避基于完整请求检测的安全机制。防御方需要部署能够正确解析HTTP协议的下一代WAF解决方案,而渗透测试人员应确保在合法授权范围内使用此技术。