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をサポートする

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リッスンしていました:

javascript
window.addEventListener("message", (e) => {
if (e.data == "blob loaded") {
$("#previewModal").modal()
}
})

そのため、postmessageで大きな整数を送信することが可能であり、その比較で文字列に変換されるため、時間がかかります:

bash
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

正確にし、postmessageiframeが作成された、しかし親からデータを受け取る準備ができるに送信するためには、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をサポートする