绕过WAF的5种方法_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

绕过WAF的5种方法

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


绕过WAF的5种方法

介绍 本文将介绍 Web 应用程序集群智慧云安服渗透测试人员和安全研究人员用来成功绕过 Web 应用程序防火墙 (WAF) 保护的工具和技术。 WAF 是一种用于过滤和阻止恶意网络流量的网络安全解决方案。常见的供应商包括 CloudFlare、AWS、Citrix、Akamai、Radware、Microsoft Azure 和 Barracuda。 根据防火墙使用的机制组合,绕过方法可能会有所不同。例如,WAF 可能使用正则表达式来检测恶意流量。正则表达式用于检测字符串中的模式。您可以在这里阅读有关它们的更多信息。https://docs.python.org/3/library/re.html WAF 还可以采用基于签名的检测,其中为已知的恶意字符串提供存储在数据库中的签名,并且防火墙将根据数据库的内容检查 Web 流量的签名。如果匹配,则流量被阻止。此外,一些防火墙使用基于启发式的检测。 识别WAF 手动 如前所述,WAF 通常会阻止明显的恶意流量,为了触发防火墙并验证其存在,可以向 Web 应用程序发出 HTTP 请求,并在 URL 中包含恶意查询,例如  https://example.com/?p4yl04d3=. 通过 Web 代理、cURL 或浏览器开发工具的“网络”选项卡,可以检测防火墙的其他指示: 标头中 WAF 的名称Server(例如Server: cloudflare)与 WAF 关联的其他 HTTP 响应标头(例如CF-RAY: xxxxxxxxxxx)看似由 WAF 设置的 Cookie(例如响应标头Set-Cookie: __cfduid=xxxxx)提交恶意请求时的唯一响应代码。(例如412) 除了制作恶意查询和评估响应之外,还可以通过FIN/RST向服务器发送 TCP 数据包或实施旁路攻击来检测防火墙。例如,针对不同负载的防火墙的计时可以提示正在使用的 WAF。 自动化 本文将讨论 3 种自动检测和识别 WAF 的方法。 1. 运行 Nmap 扫描 Nmap 脚本引擎 (NSE) 包括用于检测和指纹识别防火墙的脚本,下面可以看到这些脚本的使用情况。 $ nmap --script=http-waf-fingerprint,http-waf-detect -p443 example.comStarting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 21:43 PDTNmap scan report for example.com (xxx.xxx.xxx.xxx)Host is up (0.20s latency). PORT STATE SERVICE443/tcp open https| http-waf-detect: IDS/IPS/WAF detected:|_example.com:443/?p4yl04d3= Nmap done: 1 IP address (1 host up) scanned in 8.81 seconds 2. WafW00f Wafw00f 是一个命令行实用程序,它将常用标记的有效负载发送到给定的域名并评估 Web 服务器的响应,以在可能的情况下检测和识别防火墙。 https://github.com/Ekultek/WhatWaf $ wafw00f example.com 3. WhatWaf 除了检测防火墙之外,WhatWaf 还可以通过利用篡改脚本并评估 Web 服务器对各种有效负载的响应来尝试发现绕过。https://github.com/Ekultek/WhatWaf 绕过WAF 本节将通过示例概述一些潜在的 WAF 绕过技术。 1. 绕过正则表达式 此方法适用于WAF和Web服务器执行的正则表达式过滤。在黑盒集群智慧云安服渗透测试期间,查找 WAF 使用的正则表达式可能不是一个选择。如果正则表达式可以访问,本文将通过案例研究解释正则表达式绕过。 常见的绕过方法包括更改有效负载的大小写、使用各种编码、替换函数或字符、使用替代语法以及使用换行符或制表符等等。 下面的示例演示了一些使用注释绕过正则表达式的方法。 #changing the case of the tag< #prepending an additional "<" #using backticks instead of parenethesesjava%0ascript:alert(1) #using encoded newline characters