网络安全研究人员展示了一种使用 JavaScript 注入结合 HTTP 参数污染绕过 Web 应用程序防火墙 (WAF) 的复杂技术,暴露了现代 Web 安全基础设施中的关键漏洞。
这项研究是在自主渗透测试期间进行的,揭示了攻击者如何利用 WAF 引擎和 Web 应用程序框架之间的解析差异来执行恶意代码,尽管有严格的安全配置。
该漏洞是在测试受高度限制性 WAF 保护的 ASP.NET 应用程序时出现的。
虽然底层的跨站脚本 (XSS) 漏洞很简单,涉及断开用单引号分隔的 JavaScript 字符串,但传统的 XSS 有效负载被安全系统有效地阻止了。
这种情况给研究人员带来了一个经典的挑战:当防御机制主动阻止传统利用方法时,展示可利用性。
突破来自于 ASP.NET 的独特参数处理行为。当多个 HTTP 参数共享相同的名称时,ASP.NET 通过 HttpUtility.ParseQueryString() 方法使用逗号连接它们的值。
此记录的 Microsoft 行为指出“同一查询字符串参数的多次出现列为单个条目,每个值之间用逗号分隔。
Ethiack 分析师认为,这种解析差异是绕过 WAF 检测同时保持有效 JavaScript 执行的关键。
该攻击利用 JavaScript 的逗号运算符,它允许多个表达式在单个语句中按顺序执行。
通过将恶意代码分布在多个参数中,研究人员可以构建单独看似良性的有效负载,但组合起来形成可执行的 JavaScript。
例如,查询字符串在 ASP.NET 处理后变为,创建语法有效的 JavaScript,该 JavaScript 在插入易受攻击的上下文时执行警报函数。/?q=1'&q=alert(1)&q='2
1',alert(1),'2
技术分析和 WAF 规避机制
研究方法涉及测试主要云提供商和安全供应商的 17 种不同的 WAF 配置,揭示了检测能力的显着差异。
该测试采用了三种不同的有效载荷类型,每种类型都表明规避技术越来越复杂。
框架参数污染行为:-
框架 | 输入示例 | 输出结果 |
---|---|---|
ASP.NET | 参数=val1¶m=val2 | 参数=val1,val2 |
ASP的 | 参数=val1¶m=val2 | 参数=val1,val2 |
Golang 网络/http | 参数=val1¶m=val2 | 参数=[‘val1’,’val2’] |
Python – Zope | 参数=val1¶m=val2 | 参数=[‘val1’,’val2’] |
Node.js | 参数=val1¶m=val2 | 参数=val1,val2 |
最有启发性的发现来自有效载荷复杂性分析。对测试的 WAF 进行简单的注入尝试仅实现了 17.6% 的旁路率,而复杂的参数污染技术达到了 70.6% 的成功率。
该研究确定了 WAF 漏洞的三个主要原因:没有关系理解的单个参数分析、缺乏特定于框架的解析模拟以及依赖传统的 XSS 签名,这些签名错过了功能上等效但结构上不同的有效负载。
有效载荷有效性分析:-
有效负载类型 | 例 | 成功率 |
---|---|---|
简单注射 | q=';alert(1),' |
17.6% |
污染 + 分号 | q=1'+1;let+asd=window&q=def='al'+'ert' |
52.9% |
污染 + 换行符 | q=1'%0aasd=window&q=def="al"+"ert" |
70.6% |
自主测试系统表现出卓越的适应性,为所谓的安全配置发现了以前未知的旁路。
值得注意的是,Azure WAF 是使用 有效负载 击败的,它利用了 WAF 模式匹配和 JavaScript 解释之间转义字符处理中的解析差异。test\\';alert(1);//
该研究强调了 WAF 实施特定于框架的解析逻辑和上下文感知分析功能的迫切需求,尽管此类增强功能将显着影响生产环境中的性能。
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。