hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md
2024-02-11 01:46:25 +00:00

3.8 KiB

Chrome Cache do XSS

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Więcej szczegółów w tym opracowaniu.

Omawiana tutaj technika polega na zrozumieniu zachowania i interakcji dwóch podstawowych typów pamięci podręcznej: pamięci podręcznej wstecz/przód (bfcache) i pamięci podręcznej dysku. Pamięć podręczna bfcache, która przechowuje kompletny zrzut strony, włącznie z stosem JavaScript, ma pierwszeństwo przed pamięcią podręczną dysku podczas nawigacji wstecz/przód ze względu na możliwość przechowywania bardziej kompleksowego zrzutu. Pamięć podręczna dysku natomiast przechowuje zasoby pobrane z sieci bez uwzględniania stosu JavaScript i jest wykorzystywana podczas nawigacji wstecz/przód w celu zmniejszenia kosztów komunikacji. Ciekawym aspektem pamięci podręcznej dysku jest uwzględnienie zasobów pobranych za pomocą fetch, co oznacza, że przeglądarka renderuje zasoby URL dostępne w pamięci podręcznej.

Kluczowe punkty:

  • Pamięć podręczna bfcache ma pierwszeństwo przed pamięcią podręczną dysku podczas nawigacji wstecz/przód.
  • Aby skorzystać z strony przechowywanej w pamięci podręcznej dysku zamiast bfcache, należy wyłączyć ten ostatni.

Wyłączanie pamięci podręcznej bfcache:

Domyślnie Puppeteer wyłącza pamięć podręczną bfcache, zgodnie z warunkami wymienionymi w dokumentacji Chromium. Skuteczną metodą wyłączenia pamięci podręcznej bfcache jest użycie RelatedActiveContentsExist, osiągnięte poprzez otwarcie strony za pomocą window.open(), która zachowuje odwołanie do window.opener.

Reprodukcja zachowania:

  1. Odwiedź stronę internetową, np. https://example.com.
  2. Wykonaj polecenie open("http://spanote.seccon.games:3000/api/token"), co skutkuje odpowiedzią serwera z kodem stanu 500.
  3. W nowo otwartej karcie przejdź do http://spanote.seccon.games:3000/. Ta czynność spowoduje zapisanie odpowiedzi z http://spanote.seccon.games:3000/api/token w pamięci podręcznej dysku.
  4. Użyj history.back(), aby przejść do poprzedniej strony. Spowoduje to wyrenderowanie zapisanej odpowiedzi JSON na stronie.

Potwierdzenie wykorzystania pamięci podręcznej dysku można sprawdzić za pomocą narzędzi DevTools w Google Chrome.

Aby uzyskać dalsze szczegóły na temat pamięci podręcznej bfcache i dysku, można odnaleźć odnośniki na stronach web.dev na temat bfcache i dokumentacji Chromium na temat pamięci podręcznej dysku.