hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md

67 lines
6.6 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# Chrome Cacheを利用したXSS攻撃
2023-01-12 13:44:25 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業**で働いていますか? **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)のコレクションを発見してください。
* [**公式のPEASSHackTricksグッズ**](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)**をフォロー**してください。
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2023-01-12 13:44:25 +00:00
</details>
2023-07-07 23:42:27 +00:00
このテクニックは、[**この解説記事**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote)から取得されました。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
キャッシュには2つの重要なタイプがあります
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
* **バック/フォワードキャッシュbfcache**
* 参照:[https://web.dev/i18n/en/bfcache/](https://web.dev/i18n/en/bfcache/)
* これは、**JavaScriptヒープを含む**ページの完全なスナップショットを保存します。
* キャッシュはバック/フォワードナビゲーションに使用されます。
* ディスクキャッシュよりも優先されます。
* **ディスクキャッシュ**
* 参照:[https://www.chromium.org/developers/design-documents/network-stack/disk-cache/](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/)
* これは、Webから取得したリソースを保存します。キャッシュには**JavaScriptヒープは含まれません**。
* キャッシュは通信コストをスキップするためにバック/フォワードナビゲーションにも使用されます。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
ディスクキャッシュの興味深い点として、キャッシュにはWebページにレンダリングされたHTTPレスポンスだけでなく、**`fetch`で取得したリソースも含まれます**。言い換えれば、**`fetch`で取得した**リソースのURLにアクセスすると、**ブラウザはそのリソースをページ上にレンダリング**します。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
もう1つ重要なポイントがあります。バック/フォワードナビゲーションでアクセスしたページが両方のキャッシュに有効な場合、**bfcacheがディスクキャッシュよりも優先されます**。したがって、両方のキャッシュに保存されたページにアクセスする必要がありますが、ディスクキャッシュを使用したい場合は、なんらかの方法で**bfcacheを無効にする必要があります**。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
### bfcacheの無効化
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
bfcacheは、puppeteerの[デフォルトオプション](https://github.com/puppeteer/puppeteer/blob/v19.2.0/packages/puppeteer-core/src/node/ChromeLauncher.ts#L175)によって無効にされます。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
このチャレンジで興味深い動作を試してみましょう。
2023-01-12 13:44:25 +00:00
2023-07-07 23:42:27 +00:00
まず、bfcache[\[2\]](https://blog.arkark.dev/2022/11/18/seccon-en/#fn2)を無効にする必要があります。bfcacheが無効になる条件は多くありますが、以下のリストがあります
2023-01-12 14:56:14 +00:00
* [https://source.chromium.org/chromium/chromium/src/+/main:out/mac-Debug/gen/third\_party/blink/renderer/core/inspector/protocol/page.cc?q=BackForwardCacheNotRestoredReasonEnum \&ss=chromium](https://source.chromium.org/chromium/chromium/src/+/main:out/mac-Debug/gen/third\_party/blink/renderer/core/inspector/protocol/page.cc?q=BackForwardCacheNotRestoredReasonEnum%20\&ss=chromium)
2023-07-07 23:42:27 +00:00
簡単な方法は、`RelatedActiveContentsExist`を使用することです。
2023-01-12 14:56:14 +00:00
2023-07-07 23:42:27 +00:00
* `RelatedActiveContentsExist``window.open()`で開かれ、`window.opener`の参照を持つページ。
* 参照:[https://web.dev/i18n/en/bfcache/#avoid-windowopener-references](https://web.dev/i18n/en/bfcache/#avoid-windowopener-references)
2023-01-12 14:56:14 +00:00
2023-07-07 23:42:27 +00:00
したがって、次の手順でこの動作を再現できます:
2023-01-12 14:56:14 +00:00
2023-07-07 23:42:27 +00:00
1. Webページにアクセスします`https://example.com`)。
2. `open("http://spanote.seccon.games:3000/api/token")`を実行します。
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-04.png)
* サーバーは500ステータスコードで応答します。
3. 開いたタブで`http://spanote.seccon.games:3000/`にアクセスします。
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-05.png)
* その後、`http://spanote.seccon.games:3000/api/token`のレスポンスがディスクキャッシュとしてキャッシュされます。
4. `history.back()`を実行します。
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-06.png)
* キャッシュされたJSONレスポンスがページ上にレンダリングされます
2023-01-12 14:56:14 +00:00
2023-07-07 23:42:27 +00:00
Google ChromeのDevToolsを使用して、ディスクキャッシュが使用されていることを確認できます\
2023-01-12 14:56:14 +00:00
![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-07.png)
2023-07-07 23:42:27 +00:00
* [💬](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をフォローしてください。
* ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
2023-01-12 13:44:25 +00:00
</details>