mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
30 lines
2.5 KiB
Markdown
30 lines
2.5 KiB
Markdown
# Chrome Cache to XSS
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
More in depth details [**in this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote).
|
|
|
|
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:
|
|
|
|
1. Odwiedź stronę internetową, np. `https://example.com`.
|
|
2. Wykonaj `open("http://spanote.seccon.games:3000/api/token")`, co skutkuje odpowiedzią serwera z kodem statusu 500.
|
|
3. W nowo otwartej karcie przejdź do `http://spanote.seccon.games:3000/`. Ta akcja buforuje odpowiedź `http://spanote.seccon.games:3000/api/token` jako pamięć podręczną dysku.
|
|
4. 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](https://web.dev/i18n/en/bfcache/) oraz [dokumentach projektowych Chromium na temat pamięci podręcznej dysku](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), odpowiednio.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|