Bypassing SOP with Iframes - 2
SOP-2のIframes
このチャレンジの解決策では、@Strellic_が前のセクションと似た方法を提案しています。確認してみましょう。
このチャレンジでは、攻撃者はこれをバイパスする必要があります:
もし彼がそうすれば、サニタイズ(XSS)なしでページに書き込まれるHTMLコンテンツを持つpostmessageを送信できます。
最初のチェックをバイパスする方法は、**window.calc.contentWindow
をundefined
にし、e.source
をnull
**にすることです:
**
window.calc.contentWindow
は実際にはdocument.getElementById("calc")
です。document.getElementById
を<img name=getElementById />
**で上書きできます(Sanitizer API -こちら- は、デフォルト状態ではDOMの上書き攻撃に対して保護されていないことに注意してください)。したがって、**
document.getElementById("calc")
を<img name=getElementById /><div id=calc></div>
で上書きできます。その結果、window.calc
はundefined
**になります。そして、
e.source
をundefined
またはnull
にする必要があります(==
が使われているため、null == undefined
はTrue
です)。これを取得するのは「簡単」です。iframeを作成し、そこからpostMessageを送信し、すぐにiframeを削除すると、**e.origin
はnull
**になります。以下のコードを確認してください。
第二のチェックをバイパスするためには、**token
の値をnull
で送信し、window.token
の値をundefined
**にすることです:
値が
null
の**token
**をpostMessageで送信するのは簡単です。window.token
はdocument.cookie
を使用するgetCookie
関数を呼び出します。null
のオリジンページでdocument.cookie
にアクセスするとエラーが発生します。これにより**window.token
の値がundefined
**になります。
最終的な解決策は@terjanqによるもので、次のとなります:
Last updated