绕过WAF规则的缓存欺骗攻击
为什么你的缓存欺骗有效载荷会被拦截以及如何调整它们
引言:
你找到了一个完美的端点。你为Web缓存欺骗WAF攻击精心制作了一个简单的.css有效载荷。你发送请求,然后…它被拦截了。
听起来很熟悉?
这不是另一个基础指南。这是关于当Web应用防火墙(WAF)阻碍你时如何调整的探讨。我们将探索绕过旨在阻止我们的安全系统的简单方法。
WAF如何发现你的测试
WAF并非魔法。它遵循规则。对于缓存欺骗绕过,它会寻找明显的模式:
- 敏感路径+扩展名:对/admin/style.css的请求是一个巨大的危险信号
- 错误位置的静态文件:从/user目录请求的.js文件看起来很可疑
- 明显的头部技巧:像X-Forwarded-Host这样的头部通常受到监控
理解这是绕过WAF规则的第一步。
简单的WAF绕过有效载荷
目标是改变请求,使WAF看到安全的内容,但缓存和服务器看到不同的内容。这是缓存密钥注入的核心。
混淆与编码
从WAF隐藏模式。
双重编码:
|
|
WAF可能解码一次并让其通过,而服务器完全解码它。
参数技巧
混淆查询以打乱逻辑。
缓存破坏参数:
|
|
WAF可能检查view参数,但缓存使用整个URL作为密钥。
路径混淆
使用特殊字符破坏WAF的解析器。
分号技巧:
|
|
WAF看到一个路径,但服务器可能将style.css解释为参数。
真实案例:从被拦截到绕过
让我们快速浏览一个发现过程。
- 发现:在/account/settings的用户资料页面
- 拦截:添加profile.css被Cloudflare WAF阻止
- 绕过:使用参数污染:/account/settings?theme=dark&file=profile.css
- 结果:WAF被绕过!缓存将敏感设置页面存储为CSS文件
这种从基于路径的方法到基于参数的方法的简单转变产生了巨大差异。
目标的快速检查
你可以使用简单命令大规模测试这个想法。它寻找端点并测试基本的分号有效载荷。
|
|
给开发者的建议:构建更强的防御
对于构建应用程序的人来说,理解这些技巧是防御的关键。这不仅仅是关于WAF缓存中毒;而是关于架构。
- 具体明确:明确定义哪些路径可以提供静态内容
- 调整缓存密钥:配置你的CDN忽略不可预测的查询参数
- 分离内容:在完全不同的子域上托管静态文件
结论:
绕过WAF规则是一个创造性的过程。它关乎理解系统如何工作并轻轻推动它,而不是强行突破。
随着防御的演变,技术也在发展。关键是不断学习和适应。