mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
4.8 KiB
4.8 KiB
阻塞主页面以窃取postmessage
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中看到你的公司广告吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或者 Telegram群组 或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
使用Iframes赢得RCs
根据这个Terjanq的解析,从空源创建的blob文档是为了安全起见而被隔离的,这意味着如果你保持主页面繁忙,iframe页面将会被执行。
基本上,在这个挑战中,一个被隔离的iframe被执行,并且在它加载完毕后,父页面将会发送一个带有标志的post消息。
然而,这种postmessage通信是容易受到XSS攻击的(iframe可以执行JS代码)。
因此,攻击者的目标是让父页面创建iframe,但是在父页面发送敏感数据(标志)之前,让父页面保持繁忙并将有效载荷发送到iframe。而父页面忙碌时,iframe执行有效载荷,该有效载荷将是一些监听父页面postmessage消息并泄露标志的JS代码。
最后,iframe执行了有效载荷,父页面停止忙碌,所以它发送了标志,而有效载荷泄露了它。
但是,你如何让父页面在生成iframe后立即忙碌,并且只在等待iframe准备好发送敏感数据时忙碌呢?基本上,你需要找到异步操作,你可以让父页面执行。例如,在这个挑战中,父页面正在监听像这样的postmessage:
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
的毫秒数进行调整。
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 您在一家网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品-The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享您的黑客技巧。