hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md
2023-06-06 18:56:34 +00:00

6.5 KiB

Cache do Chrome para XSS

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

Técnica retirada deste writeup.

Existem dois tipos importantes de cache:

Como um ponto interessante do cache de disco, o cache inclui não apenas a resposta HTTP renderizada em uma página da web, mas também aquelas obtidas com fetch. Em outras palavras, se você acessar a URL de um recurso obtido, o navegador renderizará o recurso na página.

Há outro ponto importante. Se tanto o cache de disco quanto o bfcache forem válidos para uma página acessada em navegações de avanço/retrocesso, o bfcache tem prioridade sobre o cache de disco. Portanto, se você precisar acessar uma página armazenada em ambos os caches, mas quiser usar o cache de disco, você precisa de alguma forma desativar o bfcache.

Desativar o bfcache

O bfcache é desativado pelas opções padrão do puppeteer.

Vamos tentar o comportamento interessante neste desafio.

Em primeiro lugar, você tem que desativar o bfcache[2]. Existem muitas condições em que o bfcache é desativado, a lista é:

A maneira fácil é usar RelatedActiveContentsExist.

Portanto, o seguinte procedimento reproduz o comportamento:

  1. Acesse uma página da web (por exemplo, https://example.com)
  2. Execute open("http://spanote.seccon.games:3000/api/token")
    • O servidor retorna uma resposta com código de status 500.
  3. Na guia aberta, acesse http://spanote.seccon.games:3000/
    • Em seguida, a resposta de http://spanote.seccon.games:3000/api/token é armazenada em cache como um cache de disco.
  4. Execute history.back()
    • A resposta JSON em cache é renderizada na página!

Você pode confirmar que o cache de disco é usado usando o DevTools no Google Chrome:

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