hacktricks/pentesting-web/hacking-with-cookies/cookie-tossing.md

9.1 KiB
Raw Blame History

Cookie Tossing

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Περιγραφή

Αν ένας επιτιθέμενος μπορεί να ελέγχει ένα υποτομέα ή τον τομέα μιας εταιρείας ή βρίσκει ένα XSS σε έναν υποτομέα θα μπορεί να πραγματοποιήσει αυτήν την επίθεση.

Όπως αναφέρθηκε στην ενότητα Hacking με Cookies, όταν ένα cookie ορίζεται σε έναν τομέα (καθορίζοντάς τον) θα χρησιμοποιηθεί στον τομέα και τους υποτομείς.

{% hint style="danger" %} Συνεπώς, ένας επιτιθέμενος θα μπορεί να ορίσει στον τομέα και τους υποτομείς ένα συγκεκριμένο cookie κάνοντας κάτι σαν document.cookie="session=1234; Path=/app/login; domain=.example.com" {% endhint %}

Αυτό μπορεί να είναι επικίνδυνο καθώς ο επιτιθέμενος μπορεί:

  • Να σταθεροποιήσει το cookie του θύματος στον λογαριασμό του επιτιθέμενου έτσι αν ο χρήστης δεν το παρατηρήσει, θα εκτελέσει τις ενέργειες στον λογαριασμό του επιτιθέμενου και ο επιτιθέμενος μπορεί να αποκτήσει κάποιες ενδιαφέρουσες πληροφορίες (ελέγξτε το ιστορικό των αναζητήσεων του χρήστη στην πλατφόρμα, το θύμα μπορεί να έχει ορίσει την πιστωτική του κάρτα στον λογαριασμό...)
  • Αν το cookie δεν αλλάζει μετά την σύνδεση, ο επιτιθέμενος μπορεί απλά να σταθεροποιήσει ένα cookie (session-fixation), να περιμένει μέχρι το θύμα συνδεθεί και μετά να χρησιμοποιήσει αυτό το cookie για να συνδεθεί ως το θύμα.
  • Μερικές φορές, ακόμα κι αν τα cookies συνεδρίας αλλάζουν, ο επιτιθέμενος μπορεί να χρησιμοποιήσει το προηγούμενο και θα λάβει επίσης το νέο.
  • Αν το cookie ορίζει μια αρχική τιμή (όπως στο flask όπου το cookie μπορεί να ορίσει το CSRF token της συνεδρίας και αυτή η τιμή θα διατηρηθεί μετά τη σύνδεση του θύματος), ο επιτιθέμενος μπορεί να ορίσει αυτήν την γνωστή τιμή και μετά να την καταχραστεί (σε αυτό το σενάριο, ο επιτιθέμενος μπορεί στη συνέχεια να κάνει τον χρήστη να κάνει ένα αίτημα CSRF καθώς γνωρίζει το CSRF token).
  • Όπως και με την ορισμό της τιμής, ο επιτιθέμενος θα μπορούσε επίσης να λάβει ένα μη εξουσιοδοτημένο cookie που δημιουργήθηκε από τον διακομιστή, να λάβει το CSRF token από αυτό και να το χρησιμοποιήσει.

Ταξινόμηση Cookies

Όταν ένας περιηγητής λαμβάνει δύο cookies με το ίδιο όνομα επηρεάζοντας μερικώς τον ίδιο πεδίο εφαρμογής (τομέας, υποτομείς και διαδρομή), ο περιηγητής θα στείλει και τις δύο τιμές του cookie όταν και οι δύο είναι έγκυρες για το αίτημα.

Ανάλογα με τον πιο συγκεκριμένο δρόμο ή ποιος είναι παλαιότερος, ο περιηγητής θα ορίσει πρώτα την τιμή του cookie και μετά την τιμή του άλλου όπως σε: Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;

Το περισσότερα websites θα χρησιμοποιήσουν μόνο την πρώτη τιμή. Έτσι, αν ένας επιτιθέμενος θέλει να ορίσει ένα cookie είναι καλύτερο να το ορίσει πριν οριστεί ένα άλλο ή να το ορίσει με έναν πιο συγκεκριμένο δρόμο.

{% hint style="warning" %} Επιπλέον, η δυνατότητα ορισμού ενός cookie σε έναν πιο συγκεκριμένο δρόμο είναι πολύ ενδιαφέρουσα καθώς θα μπορείτε να κάνετε το θύμα να λειτουργεί με το cookie του εκτός από τον συγκεκριμένο δρόμο όπου το κακόβουλο cookie που ορίστηκε θα σταλεί πριν. {% endhint %}

Παράκαμψη Προστασίας

Η πιθανή προστασία ενάντια σε αυτήν την επίθεση θα μπορούσε να είναι ότι ο web διακομιστής δεν θα δέχεται αιτήματα με δύο cookies με το ίδιο όνομα αλλά δύο διαφορετικές τιμές.

Για να παρακάμψει το σενάριο όπου ο επιτιθέμενος ορίζει ένα cookie μετά το ότι το θύμα έχει ήδη λάβει το cookie, ο επιτιθέμενος θα μπορούσε να προκαλέσει ένα cookie overflow και μετά, αφού το νόμιμο cookie διαγραφεί, να ορίσει το κακόβουλο.

{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}

Μια άλλη χρήσιμη παράκαμψη θα μπορούσε να είναι να κωδικοποιήσετε το όνομα του cookie όπως κάποιες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και τότε ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies.

Μια επίθεση Cookie Tossing μπορεί επίσης να χρησιμοποιηθεί για να πραγματοποιήσει μια επίθεση Cookie Bomb:

{% content-ref url="cookie-bomb.md" %} cookie-bomb.md {% endcontent-ref %}

Άμυνες

  • Αν ένα όνομα cookie έχει αυτό το πρόθεμα, θα γίνει δεκτό μόνο σε μια οδηγία Set-Cookie αν είναι σημειωμένο ως Secure, στάλθηκε από μια ασφαλή προέλευση, δεν περιλαμβάνει το χαρακτηριστικό Domain, και έχει το χαρακτηριστικό Path ορισμένο σε /
  • Αυτό εμποδίζει τους υποτομείς από το να επιβάλουν ένα cookie στον κορυφαίο τομέα καθώς αυτά τα cookies μπορούν να θεωρηθούν "κλειδωμένα στον τομέα"

Αναφορές