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

4.5 KiB
Raw Blame History

Chrome缓存到XSS

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

更详细的细节请查看此篇文章

这里讨论的技术涉及理解两种主要缓存类型的行为和交互:后退/前进缓存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的文章Chromium关于磁盘缓存的设计文档

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