alert()已死, print()万岁
翻译
原文:https://portswigger.net/research/alert-is-dead-long-live-print
- name: 翻译
desc: 原文:https://portswigger.net/research/alert-is-dead-long-live-print
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# 1alert()已死, print()万岁
几十年以来,跨站脚本 (opens new window)与alert()函数齐头并进。想证明你可以执行任意 JavaScript 吗?那就弹出一个警告。想要以懒惰的方式查找 XSS 漏洞吗?注入一个alert()——在任何地方调用有效负载,看看是否有弹出什么内容。
然而,麻烦正在酝酿中。恶意广告一直在滥用我们心爱的alert来分散访问者的注意力,并从他们的内部iframe对访问者进行社会工程。Google Chrome 浏览器决定禁用跨域iframe中的alert (opens new window),从而解决这个问题。跨域iframe通常是故意内置到网站中的,也是某些相对高级的XSS攻击 (opens new window)的基本组成部分。
一旦 Chrome 92 于 2021 年 7 月 20 日发布,跨域 iframe 中的 XSS 漏洞将:
- 不再启用基于 alert 的 PoC。
- 使用基于 alert 的检测技术对任何人都不可见。
接下来呢?最直接的解决方法是使用prompt或confirm,但不幸的是,Chrome 的缓解措施阻止了所有对话框。OAST技术 (opens new window)是另一种潜在解决方案,其需要监听任何触发的DNS回调 (opens new window),但由于配置要求,不太适合作为 PoC。我们还排除了console.log(),因为控制台函数经常被 JavaScript 混淆器转发或禁用。
有趣的是,这种针对跨域显示对话框的 “保护” 会阻止alert和prompt,但正如Yosuke Hasegawa指出 (opens new window)的那样,他们忘记了 Basic 身份验证。这适用于当前版本的 Chrome Canary。不过,将来可能依然会被阻止。
我们需要一个 alert 替代方案:
- 简单、免设置,易于记忆
- 高度可见,即使在不可见的 iframe 中执行也是如此
经过数周的深入研究,我们很高兴为您带来...
# 2print()
我们将很快更新 我们的网络安全学院实验室,以支持基于print()的解决方案。XSS 备忘单也将更新,以反映使用跨域iframe时的新print()有效负载。当不涉及iframe时,我们将继续使用alert......暂时而已。
print 万岁!
- Gareth & James