# XSSにおけるiframes、CSP、SOP
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
## XSSにおけるiframes iframesのページの内容を示す方法は3つあります: * `src`を使用してURLを示す(URLはクロスオリジンまたは同一オリジンである可能性があります) * `src`を使用して`data:`プロトコルを使用してコンテンツを示す * `srcdoc`を使用してコンテンツを示す **親と子の変数にアクセスする** ```html ``` ```html ``` もし前のHTMLにHTTPサーバー(例:`python3 -m http.server`)を介してアクセスすると、すべてのスクリプトが実行されることがわかります(CSPがないため)。**親はいかなるiframe内の`secret`変数にもアクセスできず、元のウィンドウ内のsecretには、同一サイトと見なされるif2とif3のみがアクセスできます**。\ if4は`null`のオリジンと見なされることに注意してください。 ### CSPを使用したiframes {% hint style="info" %} 以下のバイパスでは、iframedページへのレスポンスにJSの実行を防ぐCSPヘッダーが含まれていないことに注意してください。 {% endhint %} `script-src`の`self`値は、`data:`プロトコルや`srcdoc`属性を使用したJSコードの実行を許可しません。\ しかし、CSPの`none`値でも、`src`属性にURL(完全なURLまたはパスのみ)を指定するiframesの実行は許可されます。\ したがって、以下の方法でページのCSPをバイパスすることが可能です: ```html ``` 前のCSPは、インラインスクリプトの実行のみを許可していることに注意してください。\ ただし、`if1`と`if2`のスクリプトのみが実行されますが、`if1`のみが親の秘密にアクセスできます。 ![](<../../.gitbook/assets/image (627) (1) (1).png>) したがって、`script-src 'none'`であっても、サーバーにJSファイルをアップロードし、iframeを介してロードすることができれば、CSPをバイパスすることが可能です。これは、同じサイトのJSONPエンドポイントを悪用することでも実現できます。 次のシナリオでこれをテストすることができます。`script-src 'none'`であっても、クッキーが盗まれます。アプリケーションを実行し、ブラウザでアクセスしてください。 ```python import flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): resp = flask.Response('') resp.headers['Content-Security-Policy'] = "script-src 'self'" resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET' return resp @app.route("/cookie_s.html") def cookie_s(): return "" if __name__ == "__main__": app.run() ``` ### 野生で見つかった他のペイロード ```html ``` ### Iframe sandbox `sandbox`属性は、iframe内のコンテンツに追加の制限を設定します。**デフォルトでは、制限は適用されません。** `sandbox`属性が存在する場合、以下の制限が適用されます。 - コンテンツを一意のオリジンとして扱う - フォームの送信をブロックする - スクリプトの実行をブロックする - APIを無効にする - リンクが他のブラウジングコンテキストをターゲットにしないようにする - コンテンツがプラグイン(``、``、``など)を使用しないようにする - コンテンツがトップレベルのブラウジングコンテキストをナビゲートしないようにする - 自動的にトリガーされる機能をブロックする(ビデオの自動再生やフォームコントロールの自動フォーカスなど) `sandbox`属性の値は、空にすることもできます(その場合、すべての制限が適用されます)。または、特定の制限を解除するための事前定義された値のスペース区切りのリストを指定することもできます。 ```html ``` ## SOP内のIframes 以下のページをチェックしてください: {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} [bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md" %} [bypassing-sop-with-iframes-2.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md" %} [blocking-main-page-to-steal-postmessage.md](../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %} [steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md) {% endcontent-ref %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。