2.5 KiB
Chrome Cache to XSS
{{#include ../../banners/hacktricks-training.md}}
More in depth details in this writeup.
Technika omówiona tutaj polega na zrozumieniu zachowania i interakcji dwóch głównych typów pamięci podręcznej: back/forward cache (bfcache) i disk cache. bfcache, który przechowuje pełny zrzut strony, w tym stos JavaScript, ma pierwszeństwo przed pamięcią podręczną dysku w przypadku nawigacji wstecz/naprzód z powodu swojej zdolności do przechowywania bardziej kompleksowego zrzutu. Pamięć podręczna dysku, w przeciwieństwie do tego, przechowuje zasoby pobrane z sieci bez uwzględnienia stosu JavaScript i jest wykorzystywana do nawigacji wstecz/naprzód w celu zmniejszenia kosztów komunikacji. Interesującym aspektem pamięci podręcznej dysku jest jej uwzględnienie zasobów pobranych za pomocą fetch, co oznacza, że zasoby URL będą renderowane przez przeglądarkę z pamięci podręcznej.
Key Points:
- bfcache ma pierwszeństwo przed pamięcią podręczną dysku w nawigacji wstecz/naprzód.
- Aby wykorzystać stronę przechowywaną w pamięci podręcznej dysku zamiast bfcache, to ostatnie musi być wyłączone.
Disabling bfcache:
Domyślnie Puppeteer wyłącza bfcache, zgodnie z warunkami wymienionymi w dokumentacji Chromium. Jedną z efektywnych metod wyłączenia bfcache jest użycie RelatedActiveContentsExist, osiągnięte poprzez otwarcie strony za pomocą window.open(), która zachowuje odniesienie do window.opener.
Reproducing the behavior:
- Odwiedź stronę internetową, np.
https://example.com. - Wykonaj
open("http://spanote.seccon.games:3000/api/token"), co skutkuje odpowiedzią serwera z kodem statusu 500. - W nowo otwartej karcie przejdź do
http://spanote.seccon.games:3000/. Ta akcja buforuje odpowiedźhttp://spanote.seccon.games:3000/api/tokenjako pamięć podręczną dysku. - Użyj
history.back(), aby wrócić. Akcja ta skutkuje renderowaniem buforowanej odpowiedzi JSON na stronie.
Weryfikację, że pamięć podręczna dysku została wykorzystana, można potwierdzić za pomocą DevTools w Google Chrome.
Aby uzyskać więcej informacji na temat bfcache i pamięci podręcznej dysku, odniesienia można znaleźć na web.dev on bfcache oraz dokumentach projektowych Chromium na temat pamięci podręcznej dysku, odpowiednio.
{{#include ../../banners/hacktricks-training.md}}