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

5.1 KiB
Raw Blame History

ポストメッセージを盗むためにメインページをブロックする

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

IframesでRCを獲得する

このTerjanqの解説によると、ヌル起源から作成されたblobドキュメントはセキュリティ上の利点のために分離されており、つまり、メインページをビジーにしておくと、iframeページが実行されます。

基本的に、そのチャレンジでは分離されたiframeが実行され、ロードされた直後ページがフラグを含むポストメッセージを送信します。
ただし、そのポストメッセージ通信はXSSに対して脆弱です(iframeはJSコードを実行できます

したがって、攻撃者の目標は、親がiframeを作成させるが、ページが機密データ(フラグ)を送信する前にそれをビジーにしてiframeにペイロードを送信することです。親がビジーである間iframeはペイロードを実行し、親のポストメッセージメッセージを盗み、フラグを漏洩します。
最後に、iframeがペイロードを実行し、親ページがビジーでなくなると、フラグを送信し、ペイロードが漏洩します。

しかし、親をiframeを生成した直後にビジーにさせ、iframeが準備完了して機密データを送信するのを待っている間だけビジーにさせる方法はどうすればよいでしょうか?基本的に、親が実行する非同期アクションを見つける必要があります。たとえば、そのチャレンジでは、親が次のようにポストメッセージリッスンしていました:

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のミリ秒を調整する必要があります。

htARTEHackTricks AWS Red Team Expertで**ゼロからヒーローまでのAWSハッキング**を学びましょう!