Iframes in XSS, CSP and SOP
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
有 3 种方式来指示 iframed 页面内容:
通过 src
指示一个 URL(该 URL 可以是跨源或同源)
通过 src
使用 data:
协议指示内容
通过 srcdoc
指示内容
访问父变量和子变量
如果您通过 http 服务器访问之前的 html(如 python3 -m http.server
),您会注意到所有脚本都会被执行(因为没有 CSP 阻止它)。父窗口无法访问任何 iframe 内部的 secret
变量,只有 if2 和 if3(被认为是同源的 iframe)可以访问原始窗口中的 secret。
请注意 if4 被认为具有 null
来源。
请注意,在以下绕过中,iframe 页面响应不包含任何阻止 JS 执行的 CSP 头。
script-src
的 self
值将不允许使用 data:
协议或 srcdoc
属性执行 JS 代码。
然而,即使 CSP 的 none
值也将允许执行在 src
属性中放置 URL(完整或仅路径)的 iframe。
因此,可以通过以下方式绕过页面的 CSP:
注意,之前的 CSP 仅允许执行内联脚本。
然而,只有 if1
和 if2
脚本将被执行,但只有 if1
能够访问父级秘密。
因此,如果您可以将 JS 文件上传到服务器并通过 iframe 加载,即使 script-src 'none'
,也有可能绕过 CSP。这也可能通过滥用同站 JSONP 端点来实现。
您可以通过以下场景进行测试,即使在 script-src 'none'
的情况下也会窃取 cookie。只需运行应用程序并使用浏览器访问它:
iframe 内的内容可以通过使用 sandbox
属性受到额外的限制。默认情况下,此属性不适用,这意味着没有限制。
当使用时,sandbox
属性施加了几个限制:
内容被视为来自唯一来源。
任何提交表单的尝试都被阻止。
禁止执行脚本。
禁用对某些 API 的访问。
防止链接与其他浏览上下文交互。
不允许通过 <embed>
、<object>
、<applet>
或类似标签使用插件。
防止内容自身导航到其顶级浏览上下文。
自动触发的功能,如视频播放或表单控件的自动聚焦,被阻止。
属性的值可以留空(sandbox=""
)以应用上述所有限制。或者,可以设置为以空格分隔的特定值列表,以使 iframe 免于某些限制。
检查以下页面:
Bypassing SOP with Iframes - 1Bypassing SOP with Iframes - 2Blocking main page to steal postmessageSteal postmessage modifying iframe location学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)