mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
4.1 KiB
4.1 KiB
阻止主页面以窃取 postmessage
从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
- 您在网络安全公司工作吗? 想要看到您的公司在 HackTricks 中被宣传吗? 或者您想要访问PEASS 的最新版本或下载 HackTricks 的 PDF吗? 请查看订阅计划!
- 发现我们的独家NFTs 集合 - The PEASS Family
- 获得官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 电报群组 或在 Twitter 上关注我 🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享您的黑客技巧。
使用 iframe 赢得 RCs
根据这个Terjanq 的解说,从空源创建的 blob 文档出于安全考虑而被隔离,这意味着如果您让主页面保持繁忙状态,iframe 页面将被执行。
基本上,在这个挑战中,一个隔离的 iframe 被执行,并且在它加载完成后,父页面将发送一个带有标志的post消息。
然而,该 postmessage 通信容易受到 XSS 攻击(iframe 可以执行 JS 代码)。
因此,攻击者的目标是让父页面创建 iframe,但在让父页面发送敏感数据(标志)之前让其保持繁忙状态,并将有效负载发送到 iframe。在父页面忙碌时,iframe 执行有效负载,这将是一些 JS 代码,将监听父 postmessage 消息并泄漏标志。
最后,iframe 执行了有效负载,父页面停止忙碌,因此发送标志,有效负载泄漏了它。
但是,您如何让父页面在生成 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]);
为了准确地在iframe创建后但在其准备好接收来自父级的数据之前发送该postmessage,您需要通过setTimeout
的毫秒数进行调整。
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
- 您在网络安全公司工作吗? 想要看到您的公司在HackTricks中做广告吗? 或者您想要访问PEASS的最新版本或下载HackTricks的PDF吗? 请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入 💬 Discord群组 或 电报群组 或在Twitter上关注我 🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享您的黑客技巧。