SOME - Same Origin Method Execution
Same Origin Method Execution
ページ内で制限されたjavascriptを実行できる場合があります。例えば、 コールバック値を制御できる場合です。
その場合、最も良いことの一つは、DOMにアクセスして、そこにある任意の機密アクションを呼び出すことです(ボタンをクリックするなど)。しかし、通常、この脆弱性はDOMに興味深いものがない小さなエンドポイントで見つかります。
そのようなシナリオでは、この攻撃は非常に有用です。なぜなら、その目的は同じドメインの異なるページ内のDOMで制限されたJS実行を悪用することだからです。
基本的に、攻撃の流れは次のとおりです:
悪用できるコールバックを見つける([\w\._]に制限される可能性があります)。
制限がなく、任意のJSを実行できる場合は、通常のXSSとしてこれを悪用できます。
被害者に攻撃者が制御するページを開かせる。
ページは別のウィンドウで自分自身を開く(新しいウィンドウは最初のウィンドウを参照する**
opener
**オブジェクトを持ちます)。最初のページは、興味深いDOMがあるページを読み込みます。
二番目のページは、コールバックを悪用して脆弱なページを読み込み、
opener
オブジェクトを使用して最初のページでアクションを実行します(今や興味深いDOMを含んでいます)。
最初のページが二番目のページを作成した後に新しいURLにアクセスしても、二番目のページのopener
オブジェクトは新しいDOM内の最初のページへの有効な参照のままです。
さらに、二番目のページがopenerオブジェクトを使用できるためには、両方のページが同じオリジンに存在する必要があります。これが、この脆弱性を悪用するために同じオリジンのXSSを見つける必要がある理由です。
Exploitation
このフォームを使用して、このタイプの脆弱性を悪用するPoCを生成できます: https://www.someattack.com/Playground/SOMEGenerator
クリックでHTML要素へのDOMパスを見つけるには、このブラウザ拡張機能を使用できます: https://www.someattack.com/Playground/targeting_tool
Example
脆弱な例はhttps://www.someattack.com/Playground/で見つけることができます。
この例では、サーバーがjavascriptコードを生成し、コールバックパラメータの内容に基づいてそれをHTMLに追加しています:
<script>opener.{callbacl_content}</script>
。そのため、この例ではopener
の使用を明示的に示す必要はありません。また、このCTFの解説も確認してください: https://ctftime.org/writeup/36068
References
Last updated