# Cookie Tossing
Μάθετε το χάκινγκ στο 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) ή στην [**ομάδα τηλεγραφήματος**](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).
### Περιγραφή Αν ένας επιτιθέμενος μπορεί να **ελέγχει ένα υποτομέα ή τον τομέα μιας εταιρείας ή βρίσκει ένα 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](cookie-jar-overflow.md) {% endcontent-ref %} Μια άλλη χρήσιμη **παράκαμψη** θα μπορούσε να είναι να **κωδικοποιήσετε το όνομα του cookie** όπως κάποιες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και τότε ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies. ### Cookie Bomb Μια επίθεση Cookie Tossing μπορεί επίσης να χρησιμοποιηθεί για να πραγματοποιήσει μια επίθεση **Cookie Bomb**: {% content-ref url="cookie-bomb.md" %} [cookie-bomb.md](cookie-bomb.md) {% endcontent-ref %} ### Άμυνες #### **Χρησιμοποιήστε το πρόθεμα `__Host` στο όνομα του cookie** * Αν ένα όνομα cookie έχει αυτό το πρόθεμα, **θα γίνει δεκτό μόνο** σε μια οδηγία Set-Cookie αν είναι σημειωμένο ως Secure, στάλθηκε από μια ασφαλή προέλευση, δεν περιλαμβάνει το χαρακτηριστικό Domain, και έχει το χαρακτηριστικό Path ορισμένο σε / * **Αυτό εμποδίζει τους υποτομείς από το να επιβάλουν ένα cookie στον κορυφαίο τομέα καθώς αυτά τα cookies μπορούν να θεωρηθούν "κλειδωμένα στον τομέα"** ### Αναφορές * [**@blueminimal**](https://twitter.com/blueminimal) * [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the