找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2033

积分

0

好友

285

主题
发表于 7 天前 | 查看: 15| 回复: 0

在Web应用安全测试中,有效载荷(Payload)的构造与变形是绕过Web应用防火墙(WAF)的关键技术之一。近期出现了一个利用HTML onscrollsnapchange 事件属性来绕过Akamai和Cloudflare等主流WAF的XSS Payload,其构造思路具有一定的参考价值。

这个Payload的核心在于巧妙地组合了不常用的HTML事件属性、字符串拼接和JavaScript执行方法,旨在规避WAF基于正则表达式或语义分析的特征检测。

以下是该Payload的完整示例:

<address
onscrollsnapchange=window['ev'+'a'+ (['l','b','c'][0])](window['a'+'to'+(['b','c','d'] [0])]('YWxlcnQob3JpZ2luKQ==')); style=o verflow-y:hidden;scroll-snap-type:x><div style=scroll-snap-align:center>1337</div></
address>

我们来分解一下它的工作原理:

  1. 利用 onscrollsnapchange 事件:这是一个相对较新且不常见的事件属性,用于检测滚动吸附点(scroll snap)的变化。许多WAF的规则库可能尚未完全覆盖此类生僻事件,从而为绕过提供了机会。

  2. JavaScript 字符串拼接

    • window['ev'+'a'+ (['l','b','c'][0])]:数组 ['l','b','c'][0] 取第一个元素 'l',与前面的字符串拼接后,最终结果为 window['eval'],动态构造出 eval() 函数。
    • window['a'+'to'+(['b','c','d'] [0])]:同理,['b','c','d'][0] 取出 'b',拼接后得到 window['atob'],即 atob() 函数,用于解码Base64字符串。
  3. 执行代码

    • 待解码的Base64字符串为 'YWxlcnQob3JpZ2luKQ==',使用 atob() 解码后得到 alert(origin)
    • 最终,eval() 函数执行了 alert(origin) 这段JavaScript代码,弹窗显示当前页面的来源(origin)。
  4. 样式干扰:Payload中故意在 style=overflow-y:hiddenoverflow-y 中间插入了空格(o verflow-y),并在末尾设置了 scroll-snap-type:x。这些不符合常规的样式写法可能进一步干扰WAF的简单解析逻辑。

总结与思考

这个Payload展示了攻击者如何通过组合生僻属性、动态构造函数名和使用编码来规避安全检测。对于安全研究人员而言,理解此类高级混淆技术有助于完善防御策略和检测规则。在安全/渗透/逆向领域,持续关注和研究新的绕过手法是提升攻防能力的重要途径。对于防御方,则需要依赖能够进行深度语法解析和行为分析的安全解决方案,而不仅仅是依赖静态特征匹配。




上一篇:Rust RefCell内部可变性详解:Rc与RefCell在插件系统中的应用
下一篇:SSE (Server-Sent Events) 技术解析:实现服务器向浏览器单向实时推送
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 18:25 , Processed in 0.250923 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表