Awesome WAF 
从安全角度了解关于 Web 应用防火墙(WAF)的一切。🔥
前言: 这原本是我个人关于 WAF 的收藏。我将其开源,希望它能对渗透测试人员和研究人员有所帮助。俗话说,“社区就是相互学习。”

简明的定义: 防火墙是位于 Web 应用和客户端端点之间的安全策略执行点。此功能可以通过软件或硬件实现,运行在专用设备中,或运行在运行通用操作系统的典型服务器上。它可以是独立设备,也可以集成到其他网络组件中。(来源:PCI DSS IS 6.6)
Web 应用防火墙位于用户和 Web 应用之间,其任务是阻止任何恶意活动到达 Web 应用。WAF 要么过滤掉请求中的恶意部分,要么直接阻止该请求。
欢迎贡献。
目录:
简介:
WAF 工作方式:
- 使用一组规则来区分正常请求和恶意请求。
- 有时它们会使用学习模式,通过学习用户行为自动添加规则。
运行模式:
- 消极模型(基于黑名单) - 黑名单模型使用预设签名来阻止明显恶意的请求。采用消极模型的 WAF 的签名专门设计用于防止利用某些 Web 应用漏洞的攻击。黑名单模型 Web 应用防火墙非常适合面向公共互联网的 Web 应用,并且对主要漏洞非常有效。例如,阻止所有
<script>*</script> 输入的规则可以防止基本的跨站脚本攻击。
- 积极模型(基于白名单) - 白名单模型仅允许根据特定配置标准的 Web 流量。例如,可以配置为仅允许来自某些 IP 地址的 HTTP GET 请求。该模型对于阻止潜在的大规模攻击非常有效,但也会阻止大量合法流量。白名单模型防火墙可能最适合内部网络上的 Web 应用,这些应用仅供有限群体使用,例如员工。
- 混合模型(包容性模型) - 混合安全模型结合了白名单和黑名单。根据各种具体配置,混合防火墙对于内部网络上的 Web 应用和公共互联网上的 Web 应用可能都是最佳选择。一个很好的场景是:Web 应用面向公共互联网(使用黑名单),而管理面板只需要暴露给一部分用户(使用白名单)。
测试方法:
从何处入手:
- 始终注意可能暴露 WAF 的常见端口,即
80、443、8000、8080 和 8888 端口。但重要的是要注意,WAF 可以轻松部署在任何运行 HTTP 服务的端口上。最好先枚举 HTTP 服务端口,然后再寻找 WAF。
- 有些 WAF 会在请求中设置自己的 Cookie(例如 Citrix Netscaler、Yunsuo WAF)。
- 有些 WAF 会与单独的标头关联(例如 Anquanbao WAF、Amazon AWS WAF)。
- 有些 WAF 经常修改标头并打乱字符以迷惑攻击者(例如 Netscaler、Big-IP)。
- 有些 WAF 会在
Server 标头中暴露自己(例如 Approach、WTS WAF)。
- 有些 WAF 会在响应内容中暴露自己(例如 DotDefender、Armor、Sitelock)。
- 其他 WAF 在收到恶意请求时会回复不寻常的响应代码(例如 WebKnight、360 WAF)。
检测技术:
要识别 WAF,我们需要(假装)挑衅它。
- 从浏览器发出正常 GET 请求,拦截并记录响应标头(特别是 Cookie)。
- 从命令行发出请求(例如 cURL),测试响应内容和标头(不包含用户代理)。
- 向随机开放端口发出 GET 请求,抓取可能暴露 WAF 身份的标语。
- 在登录页面注入常见(易于检测)的有效载荷,例如
" or 1 = 1 --。
- 在搜索栏、联系表单和其他输入字段中注入嘈杂的有效载荷,例如
<script>alert()</script>。
- 在 URL 末尾的随机参数后附加一个虚拟的
../../../etc/passwd。
- 在 URL 末尾的任何随机参数后附加一些吸引人的关键字,例如
' OR SLEEP(5) OR '。
- 使用过时的协议(如
HTTP/0.9)发出 GET 请求(HTTP/0.9 不支持 POST 类型的查询)。
- 很多时候,WAF 会根据不同类型的交互更改
Server 标头。
- 丢弃动作技术 - 向服务器发送原始构造的 FIN/RST 数据包并识别响应。
提示: 此方法可以轻松使用 HPing3 或 Scapy 等工具实现。
- 侧信道攻击 - 检查请求和响应内容的时序行为。
提示: 更多详细信息可以在此博客文章中找到。