文章总结: 本文分享了利用Selenium模糊测试绕过AWSWAF的技巧。作者通过构建工具自动组合Payload、模拟交互及Hook捕获,发现WAF未拦截onbeforetoggle事件,成功验证XSSPOC。该方法适用于测试其他WAF,建议安全人员在合规环境下利用此类自动化技术挖掘漏洞,提升测试效率。 综合评分: 87 文章分类: 渗透测试,WEB安全,云安全,漏洞POC
【漏洞挖掘Tips】模糊测试和绕过AWS WAF
原创
Pwn1
漏洞集萃
2025年11月14日 17:56 山东
免责声明 本公众号所发布的文章内容仅供学习与交流使用,禁止用于任何非法用途。
-
前言
大佬们好,最近跟 WAF 和 CDN 磕上了,一直在研究。最近又发现了一个不错的思路,特来跟大佬们分享一下;
-
如何避免被黑客攻击
先在自己部署一个环境去搭建 WAF,方便后续测试;
在 AWS 控制台上设置 WAF 非常简单;在我们的测试中,我们构建了一个测试环境,该环境由一个托管实际 Web 应用程序的 EC2 实例、一个内置 AWS WAF 支持的负载均衡器以及一组预定义规则组成,具体如下:
顾名思义,这些规则集负责检测和阻止各种攻击:
深入了解 WAF
最初的计划是识别所有导致 WAF 拦截请求的输入因素。这需要使用各种技术进行一系列手动测试,并结合不同的标签和属性。
-
• 通用规则集用于处理 XSS 攻击,而识别恶意输入规则集则通过过滤已识别的路径和字符串(例如
/bin/bash、/etc/passwd等)来防止利用已知的漏洞,例如 Web 应用程序中的命令执行漏洞。最后,SQLi 规则集负责阻止 SQL 注入 -
•
AWS-AWSManagedRulesCommonRuleSet -
•
AWS-AWSManagedRulesKnownBadInputsRuleSet -
•
AWS-AWSManagedRulesSQLiRuleSet
-
同时,AWS WAF 为提供了规则说明,可以了解究竟匹配了哪些内容以及哪些规则触发了事件。
-
但是,由于标签和事件数量庞大,几乎不可能测试所有有效载荷的排列组合,以找出 WAF 未覆盖的极端情况。
所以,可以改变方法,直接构建 WAF 模糊测试器
使用 Selenium 进行 WAF 模糊测试
计划打造的模糊测试器基本上都是依赖 PortSwigger XSS 参考 ,其中主要包含已知可在最新浏览器上运行的最新有效载荷。
这个工具自动查找未被过滤的标签和属性,并将它们组合成可用的有效载荷。
首先遍历标签和属性,在识别出哪些词不能出现后,它会使用防火墙未屏蔽的关键词生成排列组合,以寻找可用的有效载荷。
从 PortSwigger XSS 生成有效载荷后,还得必须确保它在浏览器中执行并被触发。
为此,可以使用了 Selenium 来模拟操作,它既可以验证警报是否被弹出,也可以模拟用户点击输入框或按钮等元素的操作。
-
确保完 XSS 可以执行之后,还要确保可以检测这些 XSS 的发生,总不能人眼去看吧,毕竟太慢了;比如找到捕获警报的方法,以及检查是否可以通过用户交互触发 XSS。
为了克服这些问题,需要创建了一个简单的钩子来捕获每个
alert、confirm和prompt调用,如下所示:
<!DOCTYPE html>
<html>
<head>
<script>
window.alert_trigger = false;
window.alert = function() {
window.alert_trigger = true;
};
window.confirm = window.alert;
window.prompt = window.alert;
</script>
</head>
</html>
第二个问题(触发页面上每个元素的用户交互)通过注入另一个 JS 脚本来解决,该脚本负责触发诸如 blur 、 focus 、 click 、 drag & drop 等常见事件。
var ids = [IDs of the created elements]
for (var i = 0; i < ids.length; i++) {
var element = document.getElementById(ids[i]);
if(!element) continue;
// Trigger all possible events click, mouseover, etc.
var events = ['click', 'mouseover', 'mousedown', 'mouseup', 'mousemove', 'mouseout', 'mouseenter', 'mouseleave', 'dblclick', 'contextmenu', 'wheel', 'select', 'pointerdown', 'pointerup', 'pointermove', 'pointerover', 'pointerout', 'pointerenter', 'pointerleave', 'gotpointercapture', 'lostpointercapture'];
try {
for (var j = 0; j < events.length; j++) {
var event = new MouseEvent(events[j], {bubbles: true});
element.dispatchEvent(event);
}
element.focus();
element.blur();
element.dispatchEvent(new KeyboardEvent('keydown', {ctrlKey: true, altKey: true, key: 'x'}));
} catch (e) {}
}
除此之外,还可以使用不同的策略来尝试绕过基于正则表达式的规则例如使用空格和换行符分割标签,或者添加随机的 Unicode 字符,这些字符随后会被转换为它们的 ASCII 表示形式。(工具在最下面的参考链接)
## AWS WAF 绕过
模糊测试器发出了一条消息,可以识别出一个可能触发 JS 执行的有效载荷。
经过简单审查,发现它使用了 onbeforetoggle 事件,而模糊测试器发现,WAF 并没有捕获到该事件!
-
该 payload 成功绕过了 WAF 的防御,同时还弹出了一个警告框,从而验证了 poc。
payload 利用实验性的
onbeforetoggle事件将一个标准的 HTML 按钮链接到一个弹出框元素,并将它们的功能串联起来执行任意 JavaScript 代码。例如,以下有效载荷可以绕过现有的 WAF 保护。<button popovertarget=x>click me</button><test onbeforetoggle=alert(document.domain) popover id=x>aaa</test>如果在现实场景中被利用,此漏洞可能允许攻击者将恶意脚本注入到易受攻击的应用程序中,从而可能危及敏感用户数据和系统完整性。
文章到这里就结束了,这种方法除了可以使用在 AWS WAF ,如果在平时遇到了别的一些 waf 也可以使用这种方法尝试绕过;
参考
#
#
#
- • https://www.sysdig.com/blog/fuzzing-and-bypassing-the-aws-waf
- • https://github.com/sysdig/wafer
- • https://gosecure.ai/blog/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice
觉得本文内容对您有启发或帮助? 点个关注➕,获取更多深度分析与前沿资讯!
👉 往期精选
【漏洞挖掘tips】通过批量分配实现权限提升
【漏洞挖掘Tips】一种小众的边缘资产收集方式
【漏洞挖掘Tips】二次上下文路径遍历攻击
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:漏洞集萃 Pwn1《【漏洞挖掘Tips】模糊测试和绕过AWS WAF》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论