mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
2.0 KiB
2.0 KiB
阻止主页面以窃取 postmessage
{{#include ../../banners/hacktricks-training.md}}
使用 Iframes 赢得 RCs
根据这个 Terjanq writeup,从空源创建的 blob 文档出于安全考虑是隔离的,这意味着如果你让主页面保持忙碌,iframe 页面将会被执行。
基本上在这个挑战中,一个 隔离的 iframe 被执行,并且在它 加载后,父页面将会 发送一个 post 消息,包含 flag。
然而,这个 postmessage 通信是 易受 XSS 攻击的(iframe 可以执行 JS 代码)。
因此,攻击者的目标是 让父页面创建 iframe,但 在 让 父页面 发送 敏感数据(flag) 之前,保持它忙碌并将 有效载荷发送到 iframe。当 父页面忙碌时,iframe 执行有效载荷,这将是一些 JS 代码,用于监听 父 postmessage 消息并泄露 flag。
最后,iframe 执行了有效载荷,父页面停止忙碌,因此它发送 flag,而有效载荷泄露了它。
但是你如何能让父页面在 生成 iframe 后立即忙碌,并且在等待 iframe 准备好发送敏感数据时保持忙碌呢? 基本上,你需要找到 异步 操作,让父页面 执行。例如,在这个挑战中,父页面 监听 postmessages 是这样的:
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})
因此,可以在一个 postmessage 中发送一个 大整数,在该比较中将被 转换为字符串,这将需要一些时间:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
为了精确地发送该postmessage,在iframe创建后但在其准备好接收来自父级的数据之前,您需要调整setTimeout
的毫秒数。
{{#include ../../banners/hacktricks-training.md}}