# XSS、CSP、およびSOPにおけるiframes
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](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**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)および[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
## XSSにおけるiframes iframedページのコンテンツを示す方法は3つあります: * `src`を使用してURLを示す(URLはクロスオリジンまたは同一オリジンである可能性があります) * `data:`プロトコルを使用してコンテンツを示す`src`を使用して * コンテンツを示す`srcdoc`を使用して ```html ``` ```html ``` 前のhtmlにhttpサーバー経由でアクセスすると(`python3 -m http.server`のように)、すべてのスクリプトが実行されることに気づくでしょう(CSPがそれを防いでいないため)。**親は任意のiframe内の`secret`変数にアクセスできない**ことに注意し、**元のウィンドウ内の秘密にアクセスできるのはif2とif3のみ(同一サイトと見なされる)**です。\ if4が`null`オリジンであると見なされることにも注目してください。 ### CSPを使用したiframes {% hint style="info" %} 次のバイパスで、iframedページへの応答にJS実行を防ぐCSPヘッダーが含まれていないことに注意してください。 {% endhint %} `script-src`の`self`値は、`data:`プロトコルや`srcdoc`属性を使用したJSコードの実行を許可しません。\ ただし、CSPの`none`値でも、`src`属性にURL(完全なものまたはパスのみ)を設定するiframeの実行を許可します。\ したがって、ページのCSPをバイパスすることが可能です。 ```html ``` 前のCSPは、**インラインスクリプトの実行のみを許可している**ことに注意してください。\ ただし、**`if1`と`if2`スクリプトのみが実行され、`if1`のみが親の秘密にアクセスできる**ようになります。 ![](<../../.gitbook/assets/image (627) (1) (1).png>) したがって、**サーバーにJSファイルをアップロードし、`script-src 'none'`であっても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=""`)、前述の制限をすべて適用することもできます。また、特定の制限からiframeを除外するために、スペースで区切られた特定の値のリストに設定することもできます。 ```html ``` ## SOP(Same Origin Policy)における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 %}
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**PEASSの最新バージョンにアクセス**したいですか?または**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけてください * [**公式PEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう * **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出**してください。