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)のコレクションを発見してください。
|
|
|
|
|
* [**公式の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)**をフォロー**してください。
|
|
|
|
|
* **ハッキングのトリックを共有するには、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>
|