网络安全研究人员展示了一种结合JavaScript注入与HTTP参数污染的高级技术,成功绕过Web应用防火墙(WAF),暴露出现代Web安全基础设施中的关键漏洞。
这项在自动化渗透测试中进行的研究揭示了攻击者如何利用WAF引擎与Web应用框架间的解析差异,在严格的安全配置下仍能执行恶意代码。漏洞是在测试一个受高度限制WAF保护的ASP.NET应用时发现的。
漏洞发现与利用机制
虽然基础的跨站脚本(XSS)漏洞原理简单——涉及突破单引号分隔的JavaScript字符串,但传统XSS载荷都被安全系统有效拦截。这给研究人员带来了经典挑战:在防御机制有效阻止传统利用方法时证明漏洞可利用性。
突破点来自对ASP.NET独特参数处理行为的理解。当多个HTTP参数同名时,ASP.NET会通过HttpUtility.ParseQueryString()方法用逗号连接它们的值。微软文档明确说明:"相同查询字符串参数的多次出现会被列为单个条目,各值间用逗号分隔"。
Ethiack分析师发现这种解析差异正是绕过WAF检测同时保持JavaScript有效执行的关键。攻击利用了JavaScript的逗号运算符特性——允许在单个语句中顺序执行多个表达式。通过将恶意代码分散到多个参数中,研究人员构建了看似无害但组合后可形成可执行JavaScript的载荷。
例如查询字符串/?q=1'&q=alert(1)&q='2
经ASP.NET处理后变为1',alert(1),'2
,在被插入漏洞上下文时会形成语法有效的JavaScript并执行alert函数。
技术分析与WAF规避机制
研究方法包括测试17种不同WAF配置,涵盖主要云服务商和安全厂商,揭示了检测能力的显著差异。
测试采用三种载荷类型,分别展示逐步提升的规避技术复杂度:
框架 | 输入示例 | 输出结果 |
---|---|---|
ASP.NET | param=val1¶m=val2 | param=val1,val2 |
ASP | param=val1¶m=val2 | param=val1,val2 |
Golang net/http | param=val1¶m=val2 | param=['val1','val2'] |
Python - Zope | param=val1¶m=val2 | param=['val1','val2'] |
Node.js | param=val1¶m=val2 | param=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被test\\';alert(1);//
载荷攻破,该载荷利用了WAF模式匹配与JavaScript解释器在转义字符处理上的解析差异。
研究强调WAF迫切需要实现框架特定的解析逻辑和上下文感知分析能力,尽管此类增强会显著影响生产环境性能。
参考来源:
Researchers Bypassed Web Application Firewall With JS Injection with Parameter Pollution
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)