30 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chrome Cache to XSS
{{#include ../../banners/hacktricks-training.md}}
更多详细信息 [**在这篇文章中**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote)。
这里讨论的技术涉及理解两种主要缓存类型的行为和交互:**后退/前进缓存 (bfcache)** 和 **磁盘缓存**。bfcache 存储页面的完整快照,包括 JavaScript 堆,由于其能够存储更全面的快照,因此在后退/前进导航中优先于磁盘缓存。相比之下,磁盘缓存存储从网络获取的资源,但不包括 JavaScript 堆,并用于后退/前进导航以减少通信成本。磁盘缓存的一个有趣方面是它包含使用 `fetch` 获取的资源,这意味着访问的 URL 资源将由浏览器从缓存中呈现。
### 关键点:
- **bfcache** 在后退/前进导航中优先于磁盘缓存。
- 要利用存储在磁盘缓存中的页面而不是 bfcache必须禁用后者。
### 禁用 bfcache
默认情况下Puppeteer 禁用 bfcache符合 Chromium 文档中列出的条件。禁用 bfcache 的一种有效方法是通过使用 `RelatedActiveContentsExist`,通过使用 `window.open()` 打开一个页面并保留对 `window.opener` 的引用来实现。
### 复制行为:
1. 访问一个网页,例如 `https://example.com`
2. 执行 `open("http://spanote.seccon.games:3000/api/token")`,这将导致服务器响应 500 状态码。
3. 在新打开的标签页中,导航到 `http://spanote.seccon.games:3000/`。此操作将 `http://spanote.seccon.games:3000/api/token` 的响应缓存为磁盘缓存。
4. 使用 `history.back()` 返回。此操作将导致页面上呈现缓存的 JSON 响应。
可以通过在 Google Chrome 中使用 DevTools 确认磁盘缓存的使用。
有关 bfcache 和磁盘缓存的更多详细信息,可以参考 [web.dev 上的 bfcache](https://web.dev/i18n/en/bfcache/) 和 [Chromium 的磁盘缓存设计文档](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/)。
{{#include ../../banners/hacktricks-training.md}}