Web应用防火墙(WAF)是一种用于保护Web应用免受各种攻击(如SQL注入、跨站脚本攻击等)的安全设备或服务。尽管WAF在很多情况下能有效防护Web应用,但其并非无懈可击,黑客有时可以通过多种技巧绕过WAF的检测。以下是一些常见的WAF绕过技巧的示例和详细说明:
1. 编码绕过
WAF通常会对请求的参数进行安全过滤和检查,但如果对输入内容进行编码,可能会绕过WAF的检测。
示例:
- URL编码:攻击者可以通过对输入进行URL编码,例如把空格替换为
%20
,或者将其他特殊字符进行类似处理,从而绕过WAF的关键字匹配。- 输入:
1=1
- 编码后:
1%3D1
- 输入:
- Unicode编码:WAF可能无法处理所有形式的Unicode字符,攻击者可以通过Unicode编码字符来绕过WAF。
- 输入:
<script>alert('XSS')</script>
- 编码后:
%3Cscript%3Ealert%28%27XSS%27%29%3C/script%3E
- 输入:
2. 分割攻击
攻击者通过分割恶意payload,以便WAF无法在数据中检测到完整的攻击。
示例:
- SQL注入分割:例如,攻击者可能通过插入SQL注入的部分和正常的SQL代码分割,使得WAF检测不到完整的注入攻击。
- 输入:
' OR 1=1 --
- 分割后:
' OR 1=1' --
- 输入:
3. 混淆关键字
攻击者可以通过混淆敏感的关键字,绕过WAF的规则。
示例:
- 使用大小写混淆:很多WAF通过匹配敏感关键字来过滤请求,攻击者可以通过改变字母的大小写绕过这些规则。
- 输入:
<scriPt>alert('XSS')</scriPt>
- 输入:
- 分词法:攻击者可以通过将关键字分成多个部分并插入一些无害的字符,来绕过WAF。
- 输入:
<scr"+"ipt>alert('XSS')</"+"scr"+"ipt>
- 输入:
4. 使用合法字符替代恶意字符
攻击者通过将一些恶意字符替换为WAF无法识别的合法字符,绕过WAF的检测。
示例:
- 使用多种语法来绕过SQL注入过滤:例如,WAF可能会过滤
SELECT
关键字,但攻击者可以使用其他语法来代替。- 输入:
UNION SELECT NULL, NULL, NULL
- 改写后:
UNION/*comment*/SELECT NULL,NULL,NULL
- 输入:
5. HTTP头注入
WAF通常检测HTTP请求中的常规内容(如URL、参数、Cookie等),但某些WAF并不总是检查HTTP头部的内容。攻击者可以利用这种漏洞进行攻击。
示例:
- 通过User-Agent或Referer注入恶意代码:攻击者可以利用
User-Agent
或Referer
字段注入恶意代码,这些字段往往不被WAF严格检测。- 输入:
User-Agent: <script>alert('XSS')</script>
- 输入:
6. 使用不同的HTTP方法
WAF通常仅检查常见的HTTP方法(如GET、POST),而忽视了其他方法。攻击者可能利用这些其他HTTP方法进行绕过。
示例:
- 使用PUT或PATCH方法:某些WAF可能未对PUT或PATCH请求进行严格检查,攻击者可以通过这些方法上传恶意脚本或文件。
- 请求:
PUT /upload/malicious.php HTTP/1.1
- 请求:
7. Web Shell上传
一些WAF可以检测文件上传漏洞,但攻击者可以通过变通方法上传恶意Web Shell。
示例:
- 文件后缀绕过:攻击者可能将PHP Web Shell伪装成图片文件上传(如
.jpg
或.png
),WAF检测不到文件内容,只对后缀名进行过滤。- 上传文件:
shell.jpg
,但文件内部仍然是PHP脚本。
- 上传文件:
8. 绕过WAF的时间延迟
某些攻击方法通过延迟响应的时间来绕过WAF的检测。这种方法通常用于反射型XSS和基于时间的盲注。
示例:
- 基于时间的SQL注入:攻击者通过引入延时函数来测试是否能够绕过WAF的防御。例如使用
SLEEP
语句进行延时,WAF可能会忽略带有延时的请求。- 输入:
1' AND SLEEP(5)--
- 输入:
9. 通过JavaScript执行攻击
WAF通常过滤常见的HTML和JavaScript注入,但某些JavaScript代码可以绕过这些过滤。
示例:
- 事件处理程序绕过:攻击者可以利用JavaScript的事件处理程序(如
onload
、onmouseover
等)来执行恶意代码。- 输入:
<img src="x" onerror="alert('XSS')">
- 输入:
10. 混淆SQL查询
一些攻击者通过改变SQL查询的结构,使得WAF无法正确识别恶意查询。
示例:
- 使用注释绕过:攻击者可以在SQL注入的代码中加入注释符号(
--
)来绕过WAF的检测。- 输入:
' OR 1=1 --
- 输入:
总结
以上列举了常见的WAF绕过技巧,包括编码绕过、关键字混淆、HTTP头注入、文件上传绕过等。WAF虽然能有效提高Web应用的安全性,但随着攻击技术的发展,WAF绕过技术也不断得到创新。要增强Web应用的安全性,除了依赖WAF外,还需要结合其他安全措施,如输入验证、输出编码、及时更新安全补丁等,形成多层防御。
如果你对网络安全入门感兴趣,那么你需要的话
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。