mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-14 07:13:01 +00:00
6 KiB
6 KiB
Chrome缓存到XSS
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中看到你的公司广告吗?或者想要获得PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
从这篇文章中获取的技术。
有两种重要的缓存类型:
- 后退/前进缓存(bfcache)
- 参考https://web.dev/i18n/en/bfcache/
- 它存储了页面的完整快照,包括JavaScript堆。
- 缓存用于后退/前进导航。
- 它优先于磁盘缓存。
- 磁盘缓存
- 参考https://www.chromium.org/developers/design-documents/network-stack/disk-cache/
- 它存储了从网络获取的资源。缓存不包括JavaScript堆。
- 缓存也用于后退/前进导航以跳过通信成本。
作为磁盘缓存的一个有趣点,缓存包括不仅是渲染到网页的HTTP响应,还包括使用fetch
获取的响应。换句话说,如果你访问了一个已获取的资源的URL,浏览器将在页面上渲染该资源。
还有另一个重要的点。如果后退/前进导航时访问的页面同时在磁盘缓存和bfcache中都有效,bfcache优先于磁盘缓存。因此,如果你需要访问同时存储在两个缓存中的页面,但想要使用磁盘缓存中的页面,你需要以某种方式禁用bfcache。
禁用bfcache
puppeteer的默认选项会禁用bfcache。
让我们在这个挑战中尝试这个有趣的行为。
首先,你需要禁用bfcache[2]。有很多情况下bfcache会被禁用,列表如下:
简单的方法是使用RelatedActiveContentsExist
。
RelatedActiveContentsExist
:使用window.open()
打开的页面,并且它引用了window.opener
。- 参考https://web.dev/i18n/en/bfcache/#avoid-windowopener-references
因此,以下步骤可以重现这个行为:
- 访问一个网页(例如
https://example.com
) - 执行
open("http://spanote.seccon.games:3000/api/token")
- 在打开的标签中访问
http://spanote.seccon.games:3000/
- 执行
history.back()
你可以使用Google Chrome的DevTools确认使用了磁盘缓存:
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中看到你的公司广告吗?或者想要获得PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入 💬 Discord 群组 或 Telegram 群组 或在 Twitter 上 关注我 🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。