Web应用防火墙(WAF)是防止网络攻击的重要防线,但攻击者往往能通过各种技术绕过它的保护。
以下是10种常见的绕过方法,并结合技术细节和代码示例,帮助您深入理解这些技术。
1. Payload 编码与混淆
通过对攻击载荷进行编码或混淆,攻击者可以使WAF难以检测到恶意模式。
常见编码技术:
- 十六进制编码:将字符替换为其十六进制表示。
- Base64编码:将整个载荷转换为Base64字符串。
- URL编码 :将特定字符编码为
%xx
形式。
代码示例
普通SQL语句:
sql
SELECT * FROM users WHERE id = 1;
十六进制编码后:
text
%53%45%4C%45%43%54%20%2A%20%46%52%4F%4D%20%75%73%65%72%73%20%57%48%45%52%45%20%69%64%20%3D%201;
如果WAF未正确解码,将漏检此SQL注入。
2. HTTP参数污染 (HTTP Parameter Pollution, HPP)
发送同名多个参数,部分WAF可能只检查第一个参数。
代码示例
攻击者发送:
http
GET /login?username=admin&password=admin123&password=malicious_payload
服务器可能处理第二个password
参数,导致绕过。
3. 大小写转换
一些WAF对关键字匹配区分大小写。攻击者可以通过变换关键字大小写避开检测。
代码示例
原始SQL注入:
sql
SELECT * FROM users WHERE username = 'admin';
转换大小写后:
sql
SeLeCt * FrOm users WhErE username = 'admin';
低级WAF可能无法识别此SQL注入。
4. IP分片
通过将请求拆分为多个小的IP数据包,绕过未能重组数据包的WAF。
代码示例
完整HTTP请求:
http
GET /fragments/part1
与
http
GET /fragments/part2
每个片段可能单独被WAF忽略,完整恶意载荷在服务器重组后执行。
5. JSON与XML载荷攻击
现代API经常使用JSON或XML格式传输数据,攻击者可以在这些格式中嵌入恶意代码。
代码示例
JSON示例:
json
{
"username": "admin",
"password": "<script>alert('XSS')</script>"
}
如果WAF未深度解析这些格式,攻击可能成功。
6. 绕过会话感知
一些WAF无状态处理每个请求。攻击者分多次发送无害请求,最后注入恶意载荷。
代码示例
- 请求1:
GET /login
- 请求2:
POST /login
(发送合法凭据) - 请求3:
POST /profile?id=1'; DROP TABLE users;--
如果WAF逐个请求处理,不会发现SQL注入。
7. 404绕过
攻击者请求不存在的资源,部分WAF可能降低对404响应的检查力度。
代码示例
攻击请求:
http
GET /nonexistentpage?payload=<script>alert('XSS')</script>
虽然资源不存在,恶意脚本可能仍被服务器执行。
8. 基于DNS的攻击
WAF通常基于域名过滤,攻击者可直接请求服务器的IP地址。
代码示例
绕过域名:
http
GET http://192.168.1.1/login
避免了WAF基于域名的规则检测。
9. 绕过速率限制
通过分布式攻击(如使用僵尸网络)或降低请求频率,避开WAF速率限制。
代码示例
- 短时间发送大量请求:
1000 requests/sec
- 改为分布式低频率:
1 request/sec per IP
使用僵尸网络IP池模拟正常用户行为,绕过限制。
10. 利用零日漏洞
攻击者发现应用程序或依赖库中的新漏洞,而WAF无相应规则时,即可成功绕过。
代码示例
Apache Struts漏洞利用(示例):
http
Content-Type: %{(#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','test'))}
在WAF规则更新前,攻击将继续有效。
总结
绕过WAF的技术涉及编码、混淆、协议细节利用等多种策略。通过深度了解WAF的工作原理和攻击载荷的表现形式,可以设计更有效的防御策略。此外,以下几点对增强WAF的防护能力尤为重要:
- 深度检测:确保WAF能解析各种编码和协议格式。
- 会话感知:追踪多次请求之间的上下文关系。
- 快速响应:及时更新规则库以应对零日漏洞。
通过结合这些策略,可显著提高Web应用的安全性。