hacktricks/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md

4.5 KiB
Raw Blame History

Blocking main page to steal postmessage

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

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が実行され読み込まれた後ページがフラグを含むpostメッセージを送信します。
しかし、そのpostmessage通信はXSSに脆弱です(iframeはJSコードを実行できます

したがって、攻撃者の目標は親にiframeを作成させることですが、ページが機密データ(フラグ)を送信する前にそれを忙しくさせペイロードをiframeに送信させることです。親が忙しい間iframeはペイロードを実行し、これは親のpostmessageメッセージをリッスンし、フラグを漏洩させるJSになります。
最終的に、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]);

そして、正確にpostmessageiframeが作成された、しかし親からデータを受け取る準備ができる送信するためには、setTimeoutのミリ秒を調整する必要があります。

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}