Blocking main page to steal postmessage

支持 HackTricks

使用 Iframes 赢得 RCs

根据这篇 Terjanq 文章,从空源创建的 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的毫秒数

支持 HackTricks

Last updated