# Χάκινγκ των Cookies
Μάθετε το χάκινγκ του 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.
Βρείτε ευπάθειες που έχουν μεγαλύτερη σημασία, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Ο Intruder παρακολουθεί την επιθετική επιφάνεια σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίβα, από APIs έως web εφαρμογές και συστήματα στο cloud. [**Δοκιμάστε το δωρεάν**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) σήμερα. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} *** ## Χαρακτηριστικά των Cookies Τα cookies έχουν αρκετά χαρακτηριστικά που ελέγχουν τη συμπεριφορά τους στον περιηγητή του χρήστη. Παρακάτω παρουσιάζονται αυτά τα χαρακτηριστικά με πιο παθητική φωνή: ### Λήξη και Max-Age Η ημερομηνία λήξης ενός cookie καθορίζεται από το χαρακτηριστικό `Expires`. Αντίστοιχα, το χαρακτηριστικό `Max-age` καθορίζει το χρόνο σε δευτερόλεπτα μέχρι το cookie να διαγραφεί. **Προτιμήστε το `Max-age`, καθώς αντικατοπτρίζει πιο σύγχρονες πρακτικές.** ### Domain Τα hosts που λαμβάνουν ένα cookie καθορίζονται από το χαρακτηριστικό `Domain`. Από προεπιλογή, αυτό ορίζεται στον host που εξέδωσε το cookie, χωρίς να περιλαμβάνει τα subdomains του. Ωστόσο, όταν το χαρακτηριστικό `Domain` ορίζεται ρητά, περιλαμβάνει επίσης και τα subdomains. Αυτό καθιστά τον καθορισμό του χαρακτηριστικού `Domain` μια λιγότερο περιοριστική επιλογή, χρήσιμη για περιπτώσεις όπου είναι απαραίτητος ο κοινός χρήσης των cookies σε subdomains. Για παράδειγμα, ορίζοντας `Domain=mozilla.org`, τα cookies είναι προσβάσιμα στα subdomains του όπως το `developer.mozilla.org`. ### Path Ένα συγκεκριμένο μονοπάτι URL που πρέπει να υπάρχει στο αιτούμενο URL για να αποσταλεί η κεφαλίδα `Cookie` υποδεικνύεται από το χαρακτηριστικό `Path`. Αυτό το χαρακτηριστικό θεωρεί τον χαρακτήρα `/` ως διαχωριστικό καταλόγου, επιτρέποντας αντιστοιχίες και σε υποκαταλόγους. ### Κανόνες Ταξινόμησης Όταν δύο cookies έχουν το ίδιο όνομα, το επιλεγόμενο για αποστολή βασίζεται στα εξής: - Το cookie που ταιριάζει με το μακρύτερο μονοπάτι στο αιτούμενο URL. - Το πιο πρόσφατα ορισμένο cookie, εάν τα μονοπάτια είναι ίδια. ### SameSite - Το χαρακτηριστικό `SameSite` καθορίζει εάν τα cookies αποστέλλονται σε αιτήσεις που προέρχονται απ ## Προθέματα Cookies Τα cookies που έχουν πρόθεμα `__Secure-` πρέπει να ορίζονται μαζί με τη σημαία `secure` από σελίδες που είναι ασφαλισμένες με HTTPS. Για τα cookies που έχουν πρόθεμα `__Host-`, πρέπει να ικανοποιούνται αρκετές προϋποθέσεις: - Πρέπει να ορίζονται με τη σημαία `secure`. - Πρέπει να προέρχονται από μια σελίδα που είναι ασφαλισμένη με HTTPS. - Απαγορεύεται η καθορισμός ενός τομέα για αυτά τα cookies, προκαλώντας έτσι τη μη μετάδοσή τους σε υποτομείς. - Το μονοπάτι για αυτά τα cookies πρέπει να οριστεί σε `/`. Είναι σημαντικό να σημειωθεί ότι τα cookies που έχουν πρόθεμα `__Host-` δεν επιτρέπεται να αποστέλλονται σε υπερτομείς ή υποτομείς. Αυτός ο περιορισμός βοηθά στην απομόνωση των cookies της εφαρμογής. Έτσι, η χρήση του προθέματος `__Host-` για όλα τα cookies της εφαρμογής μπορεί να θεωρηθεί ως μια καλή πρακτική για την ενίσχυση της ασφάλειας και της απομόνωσης. ## Επιθέσεις σε Cookies Εάν ένα προσαρμοσμένο cookie περιέχει ευαίσθητα δεδομένα, ελέγξτε το (ιδιαίτερα εάν παίζετε ένα CTF), καθώς μπορεί να είναι ευάλωτο. ### Αποκωδικοποίηση και Αλλοίωση Cookies Τα ευαίσθητα δεδομένα που ενσωματώνονται σε cookies πρέπει πάντα να ελέγχονται. Τα cookies που έχουν κωδικοποιηθεί σε Base64 ή παρόμοιες μορφές μπορούν συχνά να αποκωδικοποιηθούν. Αυτή η ευπάθεια επιτρέπει στους επιτιθέμενους να αλλάξουν το περιεχόμενο του cookie και να προσποιηθούν άλλους χρήστες κωδικοποιώντας τα τροποποιημένα δεδομένα πίσω στο cookie. ### Κλοπή Συνεδρίας Αυτή η επίθεση περιλαμβάνει την κλοπή του cookie ενός χρήστη για να αποκτήσει μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό του σε μια εφαρμογή. Χρησιμοποιώντας το κλεμμένο cookie, ένας επιτιθέμενος μπορεί να προσποιηθεί τον νόμιμο χρήστη. ### Σταθεροποίηση Συνεδρίας Σε αυτό το σενάριο, ένας επιτιθέμενος εξαπατά ένα θύμα να χρησιμοποιήσει ένα συγκεκριμένο cookie για να συνδεθεί. Εάν η εφαρμογή δεν αναθέτει ένα νέο cookie κατά τη σύνδεση, ο επιτιθέμενος, κατέχοντας το αρχικό cookie, μπορεί να προσποιηθεί το θύμα. Αυτή η τεχνική βασίζεται στο γεγονός ότι το θύμα συνδέεται με ένα cookie που παρέχεται από τον επιτιθέμενο. Εάν βρήκατε ένα **XSS σε έναν υποτομέα** ή ελέγχετε έναν **υποτομέα**, διαβάστε: {% content-ref url="cookie-tossing.md" %} [cookie-tossing.md](cookie-tossing.md) {% endcontent-ref %} ### Δωρεά Συνεδρίας Εδώ, ο επιτιθέμενος πείθει το θύμα να χρησιμοποιήσει το cookie συνεδρίας του επιτιθέμενου. Το θύμα, πιστεύοντας ότι είναι συνδεδεμένο στον δικό του λογαριασμό, θα εκτελέσει ακούσια ενέργειες στο πλαίσιο του λογαριασμού του επιτιθέμενου. Εάν βρήκατε ένα **XSS σε έναν υποτομέα** ή ελέγχετε έναν **υποτομέα**, διαβάστε: {% content-ref url="cookie-tossing.md" %} [cookie-tossing.md](cookie-tossing.md) {% endcontent-ref %} ### [JWT Cookies](../hacking-jwt-json-web-tokens.md) Κάντε κλικ στον προηγούμενο σύνδεσμο για να αποκτήσετε πρόσβαση σε μια σελίδα που εξηγεί δυνητικά σφάλματα στα JWT. Τα JSON Web Tokens (JWT) που χρησιμοποιούνται σε cookies μπορεί επίσης να παρουσιάζουν ευπάθειες. Για λεπτομερείς πληροφορίες σχετικά με πιθανά σφάλματα και τον τρόπο εκμετάλλευσής τους, συνίσταται η πρόσβαση στο συνδεδεμένο έγγραφο για την ανάλυση των JWT. ### Cross-Site Request Forgery (CSRF) Αυτή η επίθεση αναγκάζει έναν συνδεδεμένο χρήστη να εκτελέσει ανεπιθύμητες ενέργειες σε μια ιστοσελίδα στην οποία είναι ήδη πιστοποιημένος. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν τα cookies που αποστέλλονται αυτόματα με κάθε αίτηση προς την ευάλωτη ιστοσελίδα. ### Κενά Cookies (Ελέγξτε περαιτέρω λεπτομέρειες στην [αρχική έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Οι περιηγητές επιτρέπουν τη δημιουργία cookies χωρίς όνομα, το οποίο μπορεί να αποδειχθεί μέσω JavaScript ως εξής: ```js document.cookie = "a=v1" document.cookie = "=test value;" // Setting an empty named cookie document.cookie = "b=v2" ``` Το αποτέλεσμα στην κεφαλίδα του αποστελλόμενου cookie είναι `a=v1; test value; b=v2;`. Ενδιαφέροντος, αυτό επιτρέπει την παραπλάνηση των cookies εάν ένα cookie με κενό όνομα οριστεί, ενδεχομένως ελέγχοντας άλλα cookies με το να ορίσετε το κενό cookie σε μια συγκεκριμένη τιμή: ```js function setCookie(name, value) { document.cookie = `${name}=${value}`; } setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value ``` Αυτό οδηγεί στον περιηγητή να στέλνει έναν κεφαλίδα cookie που ερμηνεύεται από κάθε διακομιστή ιστού ως ένα cookie με όνομα `a` και τιμή `b`. #### Σφάλμα του Chrome: Πρόβλημα με τον κωδικό συνεχόμενης αντιστοίχισης Unicode Στο Chrome, εάν ένας κωδικός συνεχόμενης αντιστοίχισης Unicode είναι μέρος ενός συνόλου cookie, το `document.cookie` καταστρέφεται και επιστρέφει ένα κενό string στη συνέχεια: ```js document.cookie = "\ud800=meep"; ``` Αυτό έχει ως αποτέλεσμα την έξοδο του `document.cookie` ως κενή συμβολοσειρά, υποδεικνύοντας μόνιμη καταστροφή. #### Λεπτομέρειες για τον Κλοπιμαίο Μπισκότου λόγω Προβλημάτων Ανάλυσης (Ελέγξτε περαιτέρω λεπτομέρειες στην [αρχική έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Πολλοί διακομιστές ιστού, συμπεριλαμβανομένων αυτών από την Java (Jetty, TomCat, Undertow) και την Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), δεν χειρίζονται σωστά τις συμβολοσειρές των μπισκότων λόγω της ξεπερασμένης υποστήριξης του RFC2965. Διαβάζουν μια τιμή μπισκότου που είναι εντός διπλών εισαγωγικών ως μια μοναδική τιμή, ακόμα κι αν περιλαμβάνει ερωτηματικά, τα οποία θα έπρεπε να χωρίζουν κλειδιά-τιμές: ``` RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; ``` #### Ευπάθειες Εισαγωγής Μπισκότων (Ελέγξτε περαιτέρω λεπτομέρειες στην [αρχική έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Η εσφαλμένη ανάλυση των μπισκότων από τους διακομιστές, ιδιαίτερα το Undertow, το Zope και αυτούς που χρησιμοποιούν τα `http.cookie.SimpleCookie` και `http.cookie.BaseCookie` της Python, δημιουργεί ευκαιρίες για επιθέσεις εισαγωγής μπισκότων. Αυτοί οι διακομιστές αποτυγχάνουν να διαχωρίσουν σωστά την έναρξη νέων μπισκότων, επιτρέποντας στους επιτιθέμενους να παραποιήσουν μπισκότα: - Το Undertow περιμένει ένα νέο μπισκότο αμέσως μετά από μια παραθέση χωρίς έναν ερωτηματικό. - Το Zope αναζητά ένα κόμμα για να ξεκινήσει την ανάλυση του επόμενου μπισκότου. - Οι κλάσεις μπισκότων της Python ξεκινούν την ανάλυση με έναν χαρακτήρα κενού. Αυτή η ευπάθεια είναι ιδιαίτερα επικίνδυνη σε web εφαρμογές που βασίζονται στην προστασία CSRF με βάση τα μπισκότα, καθώς επιτρέπει στους επιτιθέμενους να εισάγουν παραποιημένα μπισκότα CSRF-token, πιθανώς παρακάμπτοντας τα μέτρα ασφαλείας. Το πρόβλημα επιδεινώνεται από την αντιμετώπιση της Python για διπλότυπα ονόματα μπισκότων, όπου η τελευταία εμφάνιση αντικαθιστά τις προηγούμενες. Επίσης, προκαλεί ανησυχίες για τα μπισκότα `__Secure-` και `__Host-` σε ανασφαλείς περιβάλλοντα και μπορεί να οδηγήσει σε παράκαμψη της εξουσιοδότησης όταν τα μπισκότα περνιούνται σε διακομιστές που είναι ευάλωτοι στην παραποίηση. ### Επιπλέον Έλεγχοι Ευπαθών Μπισκότων #### **Βασικοί έλεγχοι** * Το **μπισκότο** είναι το **ίδιο** κάθε φορά που **συνδέεστε**. * Αποσυνδεθείτε και προσπαθήστε να χρησιμοποιήσετε το ίδιο μπισκότο. * Προσπαθήστε να συνδεθείτε με 2 συσκευές (ή προγράμματα περιήγησης) στον ίδιο λογαριασμό χρησιμοποιώντας το ίδιο μπισκότο. * Ελέγξτε αν το μπισκότο περιέχει οποιαδήποτε πληροφορία και προσπαθήστε να το τροποποιήσετε. * Προσπαθήστε να δημιουργήσετε αρκετούς λογαριασμούς με σχεδόν το ίδιο όνομα χρήστη και ελέγξτε αν μπορείτε να δείτε ομοιότητες. * Ελέγξτε την επιλογή "**θυμήσου με**" αν υπάρχει για να δείτε πώς λειτουργεί. Αν υπάρχει και μπορεί να είναι ευάλωτη, χρησιμοποιήστε πάντα το μπισκότο του **θυμήσου με** χωρίς άλλο μπισκότο. * Ελέγξτε αν το προηγούμενο μπισκότο λειτουργεί ακόμα αφού αλλάξετε τον κωδικό πρόσβασης. #### **Προηγμένες επιθέσεις μπισκότων** Αν το μπισκότο παραμένει το ίδιο (ή σχεδόν) όταν συνδέεστε, αυτό πιθανότατα σημαίνει ότι το μπισκότο σχετίζεται με κάποιο πεδίο του λογαριασμού σας (πιθανώς το όνομα χρήστη). Τότε μπορείτε: * Να προσπαθήσετε να δημιουργήσετε πολλούς **λογαριασμούς** με πολύ **παρόμοια** ονόματα χρηστών και να προσπαθήσετε να **μαντέψετε** πώς λειτουργεί ο αλγόριθμος. * Να προσπαθήσετε να **δοκιμάσετε βίαια** το όνομα χρήστη. Αν το μπισκότο αποθηκεύει μόνο ως μέθοδο πιστοποίησης για το όνομα χρήστη σας, τότε μπορείτε να δημιουργήσετε έναν λογαριασμό με όνομα χρήστη "**Bmin**" και να δοκιμάσετε να βρείτε κάθε **bit** του μπισκότου σας, επειδή ένα από τα μπισκότα που θα δοκιμάσετε θα είναι αυτό που ανήκει στον "**admin**". * Να δοκιμάσετε το **Padding Oracle** (μπορείτε να αποκρυπτογραφήσετε το περιεχόμενο του μπισκότου). Χρησιμοποιήστε το **padbuster**. **Padding Oracle - Παραδείγματα Padbuster** ```bash padbuster # When cookies and regular Base64 padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies auth=u7bvLewln6PJPSAbMb5pFfnCHSEd6olf # If Base64 urlsafe or hex-lowercase or hex-uppercase --encoding parameter is needed, for example: padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2 ``` Ο Padbuster θα κάνει αρκετές προσπάθειες και θα σας ρωτήσει ποια συνθήκη είναι η συνθήκη σφάλματος (αυτή που δεν είναι έγκυρη). Στη συνέχεια, θα αρχίσει να αποκρυπτογραφεί το cookie (μπορεί να διαρκέσει αρκετά λεπτά). Εάν η επίθεση έχει πραγματοποιηθεί με επιτυχία, τότε μπορείτε να δοκιμάσετε να κρυπτογραφήσετε μια συμβολοσειρά της επιλογής σας. Για παράδειγμα, αν θέλατε να **κρυπτογραφήσετε** **user=administrator** ``` padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator ``` Αυτή η εκτέλεση θα σας δώσει το cookie σωστά κρυπτογραφημένο και κωδικοποιημένο με τον χαρακτήρα **user=administrator** μέσα. **CBC-MAC** Ίσως ένα cookie να έχει μια τιμή και να υπογράφεται χρησιμοποιώντας CBC. Έτσι, η ακεραιότητα της τιμής είναι η υπογραφή που δημιουργείται χρησιμοποιώντας CBC με την ίδια τιμή. Καθώς συνιστάται να χρησιμοποιείται ένα μηδενικό διάνυσμα ως αρχικοποίηση, αυτός ο τύπος ελέγχου ακεραιότητας μπορεί να είναι ευάλωτος. **Η επίθεση** 1. Αποκτήστε την υπογραφή του ονόματος χρήστη **administ** = **t** 2. Αποκτήστε την υπογραφή του ονόματος χρήστη **rator\x00\x00\x00 XOR t** = **t'** 3. Ορίστε στο cookie την τιμή **administrator+t'** (**t'** θα είναι μια έγκυρη υπογραφή του **(rator\x00\x00\x00 XOR t) XOR t** = **rator\x00\x00\x00** **ECB** Εάν το cookie κρυπτογραφείται χρησιμοποιώντας ECB, μπορεί να είναι ευάλωτο.\ Όταν συνδεθείτε, το cookie που λαμβάνετε πρέπει να είναι πάντα το ίδιο. **Πώς να ανιχνεύσετε και να επιτεθείτε:** Δημιουργήστε 2 χρήστες με σχεδόν τα ίδια δεδομένα (όνομα χρήστη, κωδικό πρόσβασης, email, κλπ.) και προσπαθήστε να ανακαλύψετε κάποιο πρότυπο μέσα στο δοσμένο cookie. Δημιουργήστε έναν χρήστη με το όνομα "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" και ελέγξτε αν υπάρχει κάποιο πρότυπο στο cookie (καθώς το ECB κρυπτογραφεί με τον ίδιο κλειδί κάθε μπλοκ, τα ίδια κρυπτογραφημένα bytes μπορεί να εμφανιστούν εάν το όνομα χρήστη κρυπτογραφηθεί). Θα πρέπει να υπάρχει ένα πρότυπο (με το μέγεθος ενός χρησιμοποιούμενου μπλοκ). Έτσι, γνωρίζοντας πώς κρυπτογραφούνται μια σειρά από "a", μπορείτε να δημιουργήσετε ένα όνομα χρήστη: "a"\*(μέγεθος του μπλοκ)+"admin". Στη συνέχεια, μπορείτε να διαγράψετε το κρυπτογραφημένο πρότυπο ενός μπλοκ από το cookie. Και θα έχετε το cookie του ονόματος χρήστη "admin". ## Αναφορές * [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/) * [https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
Βρείτε ευπάθειες που έχουν μεγαλύτερη σημασία, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Το Intruder παρακολουθεί την επιθετική επιφάνειά σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίχημα, από APIs έως web εφαρμογές και συστήματα cloud. [**Δοκιμάστε το δωρεάν**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) σήμερα. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Μάθετε το hacking του 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)**.** * **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.