WAF 绕过原理与业务侧规避方案
前言
很多企业安全团队存在一个误区:部署 WAF 就等于 Web 安全落地,只要开启防护规则,SQL 注入、XSS 就能全部拦截。但在渗透测试实战中,大量漏洞可以通过各类变形、编码、协议差异等手段绕过 WAF 检测。
WAF 本质是流量检测的 “守门员”,只能识别已知特征的攻击载荷。一旦攻击者对 Payload 进行混淆变形,利用 WAF 和后端中间件解析差异,就可能实现绕过。WAF 属于外层防御、虚拟补丁,不能替代业务代码层面的安全修复。
本文从 WAF 基础原理、常见绕过手段、底层根源,再到业务开发、架构、WAF 配置、测试审计给出完整规避方案,帮助开发、运维、安全人员理解绕过逻辑,从根源降低被绕过的风险。
免责声明:本文仅用于授权环境安全学习、红蓝对抗研究。严禁在未授权的网站上实施 WAF 绕过测试,未经授权的攻击行为违反《网络安全法》,需要承担法律责任。
一、WAF 基础工作原理
WAF(Web 应用防火墙)部署在用户与 Web 业务之间,对 HTTP/HTTPS 请求进行解析,匹配内置特征规则,识别 SQL 注入、XSS、命令执行、文件上传等攻击流量,执行告警、拦截、验证码操作。
WAF 检测流程:
- 接收 HTTP 请求,解析 URL、Header、请求 Body;
- 对内容进行解码(URL 解码、HTML 解码等);
- 正则 / 语义模型匹配攻击特征;
- 命中规则则拦截,未命中则转发请求到后端 Web 服务器;
- 记录日志。
WAF 绕过的核心本质:WAF 解析后的请求是无害内容,后端 Web / 数据库解析后变成恶意攻击 Payload。
简单说:WAF 看到的是 “正常字符串”,后端执行的是攻击代码,利用 WAF 和后端中间件、数据库解析逻辑不一致的缺陷实现逃逸。
二、主流 WAF 绕过手段与原理拆解
2.1 关键字混淆变形(最基础、最常用)
WAF 正则匹配连续关键字,攻击者拆分、改变大小写、替换空白符,破坏连续关键词,后端语法依然正常执行。
- 大小写混淆:SQL、JS 语法不区分大小写
sElEcT * frOm user where 1=1<ScRiPt>alert(1)</ScRiPt>- 注释拆分关键字,插入
/**/打断连续字符
un/**/ion se/**/lect 1,2MySQL 特有内联注释/*!50000 union*/select,WAF 识别为注释,MySQL 会执行注释内部代码。
3.空白字符替换:不用空格,使用 Tab (%09)、换行 (%0A)、垂直制表符等替代空格
1'%09or%091=1--2.2 各类编码绕过
利用多层编码,WAF 只做一次解码,后端会多次解码,最终还原恶意 Payload。
- URL 双重编码
单引号'一次编码%27,二次编码%2527。WAF 仅解码一次得到%27,不触发规则;后端二次解码还原为',注入生效。 - Unicode、全角字符编码
全角单引号%ef%bc%87,部分 WAF 不做字符归一化,数据库可自动兼容解析。 - HTML 实体编码、Hex、Base64 编码
XSS 场景大量使用,浏览器自动解码执行 JS。
2.3 HTTP 协议层面绕过(高级绕过)
利用 HTTP 协议解析差异,WAF 和后端服务器对报文解析结果不一致。
- 分块传输 Chunked
增加请求头Transfer-Encoding: chunked,将恶意 Payload 拆成多段。部分 WAF 不会重组全部分块内容再检测,后端 Nginx/Apache 会重组完整请求执行攻击。 - HPP HTTP 参数污染
同一个参数提交多次:id=1&id=union select 1,2
WAF 读取第一个参数id=1判定无害,后端语言(PHP)读取最后一个参数,拿到恶意 Payload。 - 多部分表单 multipart/form-data 边界混淆
文件上传接口,篡改 boundary 分隔符,把恶意内容拆分到多个表单区块,WAF 逐块检测无法发现完整攻击特征,后端合并解析。
2.4 语法替换与拼接绕过
不用被拦截关键字,使用等价语法、字符串拼接函数,实现相同攻击效果。
SQL 示例:OR替换为||,AND替换为&&;
使用CONCAT()、CHAR()函数拼接字符串:
select concat(CHAR(115),CHAR(101),CHAR(108),CHAR(101),CHAR(99),CHAR(116)) from user;CHAR 函数拼接出 select 字符串,WAF 无法匹配 select 关键字。
2.5 架构层面绕过(云 WAF 常见风险)
- 源站 IP 泄露:攻击者直接访问后端源 IP,流量不经过 WAF,WAF 防护完全失效;
- 子域名、测试站漏接入 WAF,同服务器横向攻击;
- 利用 CDN、多层代理,伪造 X-Forwarded-For 头绕过 IP 黑名单。
重点:所有 WAF 绕过的前提,是业务本身存在漏洞。如果代码层面不存在 SQL 注入、XSS 漏洞,Payload 再怎么变形,后端也无法执行攻击。WAF 绕过,只是利用变形手段触发业务原有漏洞,不是凭空创造漏洞。
三、业务侧规避 WAF 绕过风险(核心方案)
核心思路:业务侧加固是治本,WAF 只是兜底防护。不能依赖 WAF 拦截攻击,要让业务本身无法执行恶意载荷。
3.1 开发编码层:消除漏洞根源(优先级最高)
1. SQL 注入:强制使用参数化预编译查询
无论 WAF 规则是否完善,只要使用#{}预编译,用户输入永远作为数据,不会被解析 SQL 语法,再多变形 SQL payload 都无法触发注入。
- 禁止直接拼接 SQL 字符串;MyBatis 严格管控
${}使用,仅白名单表名、排序字段; - 数据库账号最小权限,业务账号不具备 drop、alter 等高权限。
2. XSS 防护:输出上下文编码,富文本使用 DOMPurify 净化
- 用户可控数据输出 HTML 页面,按不同上下文做对应转义;
- Vue/React 禁止随意使用
v-html、dangerouslySetInnerHTML渲染用户输入; - 开启 CSP 内容安全策略,即使存在 XSS 漏洞,恶意脚本无法执行,作为兜底;
- Cookie 增加 HttpOnly、Secure 属性,降低 Cookie 劫持危害。
3. 输入校验:白名单优先,拒绝黑名单过滤
所有用户输入(URL 参数、JSON、表单、Header),使用白名单校验:限定输入长度、允许字符集合、数据格式。
黑名单极易被编码、变形绕过,不能作为安全主防护。例如手机号只允许数字,用户名仅允许字母数字下划线。
4. 统一后端解码与归一化处理
后端接收参数时,统一做一次完整解码、字符标准化(Unicode 归一化),在业务逻辑处理前,还原所有编码字符。
好处:无论攻击者使用几层 URL/Unicode 编码,后端拿到原始明文,业务白名单校验直接拦截恶意字符,从源头规避编码类 WAF 绕过。
5. 文件上传接口加固
- 文件校验读取文件真实文件头,不是仅依靠后缀名;
- 上传目录禁止脚本执行权限;上传文件重命名,放到 Web 目录外;
- 限制文件大小、MIME 类型白名单。
3.2 WAF 配置层面优化,减少可绕过空间
- 开启全量解码与字符归一化
开启 WAF 多层解码检测(URL、HTML、Unicode),对请求内容做标准化,统一大小写、解析各类空白字符,避免编码混淆绕过。 - 完善规则,启用语义检测,不只依赖简单正则
单纯正则容易被注释、拆分绕过,开启语义分析、机器学习模型,识别变形后的攻击语义,而不是单纯匹配字符串。 - 防护分块传输、参数污染
开启 Chunked 重组检测,HPP 参数污染检测,对同名多参数全部检测,不只检测第一个参数。 - 模式上线流程:先观察模式,再切换拦截
新业务接入 WAF,先使用日志观测模式 7~14 天,收集误报,调优规则,再切换拦截,避免误拦截业务。 - 源站保护,禁止直接访问源 IP
云 WAF 必须开启源站保护,限制仅 WAF 回源 IP 可以访问后端服务器,防止攻击者绕过 WAF 直连源站。 - 防护范围全覆盖:主站、子域名、测试环境、API 接口全部接入 WAF,不要遗漏。
3.3 架构与运维层面加固
- 资产梳理,清理遗留测试接口、旧版本站点,这类站点往往没有 WAF 防护,漏洞多;
- 限制 HTTP 请求头、Body 最大长度,防止超长注释、垃圾填充字符消耗 WAF 正则引擎(ReDoS);
- 源站服务器禁止直接暴露公网,所有流量强制经过 WAF/CDN;
- 统一时间同步,完整留存 WAF 全量日志(原始请求包、Header、body),日志保存≥6 个月;
- 监控绕过行为:高频 403、大量编码异常请求、Payload 变形尝试,触发 IP 限流与告警。
3.4 安全测试:上线前主动做 WAF 绕过专项测试
常规漏洞扫描容易漏掉 WAF 绕过场景,上线前增加专项测试:
- 使用各类编码、注释、大小写变形 Payload 测试漏洞点;
- 测试分块传输、参数污染、multipart 表单绕过场景;
- 测试绕过成功后的危害,验证业务加固是否生效;
- 漏洞修复完成后,复测各类变形 Payload,确认无法触发漏洞。
重点:测试目标不是 “测试 WAF 能不能被绕过”,而是验证业务本身在各类变形输入下,不存在漏洞。
四、WAF 绕过风险自查清单(可直接用于安全评审)
表格
| 检查分类 | 检查项 | 说明 |
|---|---|---|
| 代码安全 | SQL 全部使用参数化查询,无字符串拼接 SQL | 根治注入类绕过 |
| 代码安全 | 用户输入采用白名单校验,不依赖黑名单过滤 | 防御关键字变形绕过 |
| 代码安全 | 输出页面做上下文编码,开启 CSP | 抵御 XSS 变形 Payload |
| 后端处理 | 后端参数统一归一化、全量解码 | 防御多重编码绕过 |
| WAF 配置 | 业务所有域名、测试站全部接入 WAF,开启源站保护 | 防止直连源站绕过 |
| WAF 配置 | WAF 开启多层解码、字符归一化、chunk 重组 | 减少协议解析差异 |
| 接口安全 | 文件上传校验文件头,上传目录禁止执行脚本 | 文件上传绕过防护 |
| 日志监控 | WAF 完整记录原始请求,异常编码请求告警 | 发现绕过尝试行为 |
| 安全测试 | 上线前完成 WAF 绕过专项测试 | 验证加固有效性 |
五、常见误区澄清
❌误区 1:WAF 开启最高防护等级,就能挡住所有攻击
WAF 只能识别已知特征,新型变形 Payload 依然可以绕过。业务存在漏洞时,WAF 只是临时补丁,漏洞修复才是根本。
❌误区 2:WAF 拦截普通 Payload = 业务没有漏洞
普通 Payload 被拦截,不代表变形 Payload 无法绕过,很多漏洞在标准 WAF 规则下可以被变形绕过。
❌误区 3:只在前端过滤特殊字符
前端校验完全可以抓包修改,后端校验不可缺少,前端过滤不能用来防御 WAF 绕过。
❌误区 4:绕过 WAF=WAF 产品不行
绝大多数绕过成功的核心原因:业务本身存在漏洞,WAF 规则未覆盖变形载荷。再好的 WAF,也不能替代代码安全。
六、总结
WAF 绕过的底层根源是WAF 和后端对 HTTP 请求、字符编码、语法解析的不一致,而实现绕过的前提是业务 Web 接口本身存在安全漏洞。
防护逻辑顺序:代码加固(消除漏洞) > 后端输入归一化校验 > WAF 兜底防护 > 安全测试 + 日志审计。
WAF 定位是纵深防御里的外层屏障,用来拦截自动化扫描器、基础攻击,不能作为唯一防护手段。
业务安全团队在做 Web 防护时,不要把全部安全寄托在 WAF 上,优先修复代码漏洞,配合后端归一化输入校验,缩小攻击面,从业务底层杜绝 WAF 绕过带来的入侵风险。
一句话记住:WAF 是拦攻击流量的盾牌,代码安全才是业务的承重墙;没有漏洞,再多变形 Payload 也无法实现 WAF 绕过。
最后
网络安全需要学习那些知识
网络安全零基础入门学习路线&规划
初级
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取!
7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。
8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。
网络安全工程师企业级学习路线
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
一些我自己买的、其他平台白嫖不到的视频教程:
要学习网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】