hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md
2023-06-03 13:10:46 +00:00

6.5 KiB

Chrome Cache to XSS

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

Technique tirée de ce writeup.

Il existe deux types de cache importants :

Un point intéressant du cache disque est que le cache inclut non seulement la réponse HTTP rendue sur une page web, mais aussi celles récupérées avec fetch. En d'autres termes, si vous accédez à l'URL d'une ressource récupérée, le navigateur rendra la ressource sur la page.

Il y a un autre point important. Si à la fois le cache disque et le bfcache sont valides pour une page consultée lors de navigations avant/arrière, le bfcache a la priorité sur le cache disque. Ainsi, si vous devez accéder à une page stockée dans les deux caches mais que vous voulez utiliser celui du disque, vous devez d'une manière ou d'une autre désactiver le bfcache.

Désactiver le bfcache

Le bfcache est désactivé par les options par défaut de puppeteer.

Essayons le comportement intéressant dans ce défi.

Tout d'abord, vous devez désactiver le bfcache[2]. Il existe de nombreuses conditions où le bfcache est désactivé, la liste est la suivante :

La manière la plus simple est d'utiliser RelatedActiveContentsExist.

Par conséquent, la procédure suivante reproduit le comportement :

  1. Accédez à une page web (par exemple https://example.com)
  2. Exécutez open("http://spanote.seccon.games:3000/api/token")
    • Le serveur renvoie une réponse avec un code d'état 500.
  3. Dans l'onglet ouvert, accédez à http://spanote.seccon.games:3000/
    • Ensuite, la réponse de http://spanote.seccon.games:3000/api/token est mise en cache en tant que cache disque.
  4. Exécutez history.back()
    • La réponse JSON mise en cache est rendue sur la page !

Vous pouvez confirmer que le cache disque est utilisé en utilisant DevTools dans Google Chrome :

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