mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
30 lines
4.1 KiB
Markdown
30 lines
4.1 KiB
Markdown
# Chrome Cache to XSS
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
Περισσότερες λεπτομέρειες [**σε αυτή την αναφορά**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote).
|
||
|
||
Η τεχνική που συζητείται εδώ περιλαμβάνει την κατανόηση της συμπεριφοράς και της αλληλεπίδρασης δύο κύριων τύπων cache: η **back/forward cache (bfcache)** και η **disk cache**. Η bfcache, η οποία αποθηκεύει μια πλήρη εικόνα μιας σελίδας συμπεριλαμβανομένου του JavaScript heap, έχει προτεραιότητα σε σχέση με την disk cache για πλοηγήσεις πίσω/μπροστά λόγω της ικανότητάς της να αποθηκεύει μια πιο ολοκληρωμένη εικόνα. Αντίθετα, η disk cache αποθηκεύει πόρους που έχουν ληφθεί από το διαδίκτυο χωρίς να περιλαμβάνει το JavaScript heap, και χρησιμοποιείται για πλοηγήσεις πίσω/μπροστά για να μειώσει το κόστος επικοινωνίας. Ένα ενδιαφέρον στοιχείο της disk cache είναι η συμπερίληψη πόρων που έχουν ληφθεί χρησιμοποιώντας `fetch`, πράγμα που σημαίνει ότι οι πόροι URL που έχουν αποκτηθεί θα αποδοθούν από τον περιηγητή από την cache.
|
||
|
||
### Κύρια Σημεία:
|
||
|
||
- Η **bfcache** έχει προτεραιότητα σε σχέση με την disk cache σε πλοηγήσεις πίσω/μπροστά.
|
||
- Για να χρησιμοποιηθεί μια σελίδα που είναι αποθηκευμένη στην disk cache αντί της bfcache, η τελευταία πρέπει να απενεργοποιηθεί.
|
||
|
||
### Απενεργοποίηση bfcache:
|
||
|
||
Από προεπιλογή, το Puppeteer απενεργοποιεί την bfcache, ευθυγραμμισμένο με τις συνθήκες που αναφέρονται στην τεκμηρίωση του Chromium. Ένας αποτελεσματικός τρόπος για να απενεργοποιηθεί η bfcache είναι μέσω της χρήσης του `RelatedActiveContentsExist`, που επιτυγχάνεται ανοίγοντας μια σελίδα με `window.open()` που διατηρεί μια αναφορά στο `window.opener`.
|
||
|
||
### Αναπαραγωγή της συμπεριφοράς:
|
||
|
||
1. Επισκεφθείτε μια ιστοσελίδα, π.χ., `https://example.com`.
|
||
2. Εκτελέστε `open("http://spanote.seccon.games:3000/api/token")`, που έχει ως αποτέλεσμα μια απάντηση από τον διακομιστή με κωδικό κατάστασης 500.
|
||
3. Στην καινούργια καρτέλα που άνοιξε, πλοηγηθείτε στο `http://spanote.seccon.games:3000/`. Αυτή η ενέργεια αποθηκεύει την απάντηση του `http://spanote.seccon.games:3000/api/token` ως disk cache.
|
||
4. Χρησιμοποιήστε `history.back()` για να πλοηγηθείτε πίσω. Η ενέργεια αυτή έχει ως αποτέλεσμα την απόδοση της αποθηκευμένης JSON απάντησης στη σελίδα.
|
||
|
||
Η επιβεβαίωση ότι χρησιμοποιήθηκε η disk cache μπορεί να επιβεβαιωθεί μέσω της χρήσης του DevTools στο Google Chrome.
|
||
|
||
Για περισσότερες λεπτομέρειες σχετικά με την bfcache και την disk cache, αναφορές μπορούν να βρεθούν στο [web.dev για την bfcache](https://web.dev/i18n/en/bfcache/) και στα [έγγραφα σχεδίασης του Chromium για την disk cache](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), αντίστοιχα.
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|