hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md
2023-07-07 23:42:27 +00:00

6.6 KiB
Raw Blame History

Chrome Cacheを利用したXSS攻撃

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

このテクニックは、この解説記事から取得されました。

キャッシュには2つの重要なタイプがあります

  • バック/フォワードキャッシュbfcache
  • 参照:https://web.dev/i18n/en/bfcache/
  • これは、JavaScriptヒープを含むページの完全なスナップショットを保存します。
  • キャッシュはバック/フォワードナビゲーションに使用されます。
  • ディスクキャッシュよりも優先されます。
  • ディスクキャッシュ
  • 参照:https://www.chromium.org/developers/design-documents/network-stack/disk-cache/
  • これは、Webから取得したリソースを保存します。キャッシュにはJavaScriptヒープは含まれません
  • キャッシュは通信コストをスキップするためにバック/フォワードナビゲーションにも使用されます。

ディスクキャッシュの興味深い点として、キャッシュにはWebページにレンダリングされたHTTPレスポンスだけでなく、fetchで取得したリソースも含まれます。言い換えれば、fetchで取得したリソースのURLにアクセスすると、ブラウザはそのリソースをページ上にレンダリングします。

もう1つ重要なポイントがあります。バック/フォワードナビゲーションでアクセスしたページが両方のキャッシュに有効な場合、bfcacheがディスクキャッシュよりも優先されます。したがって、両方のキャッシュに保存されたページにアクセスする必要がありますが、ディスクキャッシュを使用したい場合は、なんらかの方法でbfcacheを無効にする必要があります

bfcacheの無効化

bfcacheは、puppeteerのデフォルトオプションによって無効にされます。

このチャレンジで興味深い動作を試してみましょう。

まず、bfcache[2]を無効にする必要があります。bfcacheが無効になる条件は多くありますが、以下のリストがあります

簡単な方法は、RelatedActiveContentsExistを使用することです。

したがって、次の手順でこの動作を再現できます:

  1. Webページにアクセスしますhttps://example.com)。
  2. open("http://spanote.seccon.games:3000/api/token")を実行します。
  • サーバーは500ステータスコードで応答します。
  1. 開いたタブでhttp://spanote.seccon.games:3000/にアクセスします。
  • その後、http://spanote.seccon.games:3000/api/tokenのレスポンスがディスクキャッシュとしてキャッシュされます。
  1. history.back()を実行します。
  • キャッシュされたJSONレスポンスがページ上にレンダリングされます

Google ChromeのDevToolsを使用して、ディスクキャッシュが使用されていることを確認できます