Blocking main page to steal postmessage
Reading time: 4 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Winning RCs with Iframes
According to this Terjanq writeup blob documents created from null origins are isolated for security benefits, which means that if you maintain busy the main page, the iframe page is going to be executed.
基本的に、このチャレンジでは、孤立したiframeが実行され、その読み込みの直後に親ページがフラグを含むポストメッセージを送信します。
しかし、そのpostmessage通信はXSSに脆弱です(iframeはJSコードを実行できます)。
したがって、攻撃者の目標は、親がiframeを作成させることですが、親ページが機密データ(フラグ)を送信する前にそれを忙しくさせ、ペイロードをiframeに送信することです。親が忙しい間、iframeはペイロードを実行し、親の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]);
正確にし、postmessageをiframeが作成された後、しかし親からデータを受け取る準備ができる前に送信するためには、setTimeout
のミリ秒を調整する必要があります。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。