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()万岁
.png)
几十年以来,跨站脚本 (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