# Ειδικοί κεφαλίδες HTTP
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερευνητής Ερυθράς Ομάδας AWS του HackTricks)! Άλλοι τρόποι υποστήριξης του 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) αποθετήρια του github.
## Λίστες Λέξεων & Εργαλεία * [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers) * [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble) ## Κεφαλίδες για Αλλαγή Τοποθεσίας Αναδιατύπωση **πηγής IP**: * `X-Originating-IP: 127.0.0.1` * `X-Forwarded-For: 127.0.0.1` * `X-Forwarded: 127.0.0.1` * `Forwarded-For: 127.0.0.1` * `X-Forwarded-Host: 127.0.0.1` * `X-Remote-IP: 127.0.0.1` * `X-Remote-Addr: 127.0.0.1` * `X-ProxyUser-Ip: 127.0.0.1` * `X-Original-URL: 127.0.0.1` * `Client-IP: 127.0.0.1` * `X-Client-IP: 127.0.0.1` * `X-Host: 127.0.0.1` * `True-Client-IP: 127.0.0.1` * `Cluster-Client-IP: 127.0.0.1` * `Via: 1.0 fred, 1.1 127.0.0.1` * `Connection: close, X-Forwarded-For` (Ελέγξτε τις κεφαλίδες hop-by-hop) Αναδιατύπωση **τοποθεσίας**: * `X-Original-URL: /admin/console` * `X-Rewrite-URL: /admin/console` ## Κεφαλίδες Hop-by-Hop Μια κεφαλίδα hop-by-hop είναι μια κεφαλίδα που σχεδιάστηκε να επεξεργαστεί και να καταναλωθεί από τον διακομιστή μεσολάβησης που χειρίζεται αυτήν την αίτηση, αντί για μια κεφαλίδα end-to-end. * `Connection: close, X-Forwarded-For` {% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} [abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md) {% endcontent-ref %} ## Χρήση Αιτήσεων HTTP Smuggling * `Content-Length: 30` * `Transfer-Encoding: chunked` {% content-ref url="../../pentesting-web/http-request-smuggling/" %} [http-request-smuggling](../../pentesting-web/http-request-smuggling/) {% endcontent-ref %} ## Κεφαλίδες Προσωρινής Αποθήκευσης **Κεφαλίδες Αποθήκευσης Διακομιστή**: * Το **`X-Cache`** στην απόκριση μπορεί να έχει την τιμή **`miss`** όταν η αίτηση δεν ήταν κρυφή και την τιμή **`hit`** όταν είναι κρυφή * Παρόμοια συμπεριφορά στην κεφαλίδα **`Cf-Cache-Status`** * Το **`Cache-Control`** υποδεικνύει αν ένας πόρος αποθηκεύεται και πότε θα αποθηκευτεί ξανά ο πόρος: `Cache-Control: public, max-age=1800` * Το **`Vary`** χρησιμοποιείται συχνά στην απόκριση για να **υποδείξει επιπλέον κεφαλίδες** που θεωρούνται **μέρος του κλειδιού της μνήμης cache** ακόμη κι αν συνήθως δεν είναι κλειδωμένες. * Το **`Age`** ορίζει τα δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην μνήμη cache του διακομιστή. * Το **`Server-Timing: cdn-cache; desc=HIT`** υποδεικνύει επίσης ότι ένας πόρος ήταν κρυφός {% content-ref url="../../pentesting-web/cache-deception/" %} [cache-deception](../../pentesting-web/cache-deception/) {% endcontent-ref %} **Τοπικές Κεφαλίδες Αποθήκευσης**: * `Clear-Site-Data`: Κεφαλίδα για να υποδείξει την μνήμη cache που πρέπει να αφαιρεθεί: `Clear-Site-Data: "cache", "cookies"` * `Expires`: Περιέχει ημερομηνία/ώρα πότε θα πρέπει να λήξει η απόκριση: `Expires: Wed, 21 Oct 2015 07:28:00 GMT` * `Pragma: no-cache` ίδιο με το `Cache-Control: no-cache` * `Warning`: Η γενική κεφαλίδα HTTP **`Warning`** περιέχει πληροφορίες για πιθανά προβλήματα με την κατάσταση του μηνύματος. Περισσότερες από μία κεφαλίδες `Warning` μπορεί να εμφανιστούν σε μια απόκριση. `Warning: 110 anderson/1.3.37 "Response is stale"` ## Συνθήκες * Οι αιτήσεις που χρησιμοποιούν αυτές τις κεφαλίδες: **`If-Modified-Since`** και **`If-Unmodified-Since`** θα απαντηθούν με δεδομένα μόνο εάν η κεφαλίδα απάντησης **`Last-Modified`** περιέχει διαφορετική ώρα. * Συνθήκες αιτήσεων χρησιμοποιώντας τις **`If-Match`** και **`If-None-Match`** χρησιμοποιούν μια τιμή Etag έτσι ώστε ο web διακομιστής να στείλει το περιεχόμενο της απόκρισης εάν τα δεδομένα (Etag) έχουν αλλάξει. Το `Etag` προέρχεται από την απόκριση HTTP. * Η τιμή **Etag** υπολογίζεται συνήθως με βάση το **περιεχόμενο** της απόκρισης. Για παράδειγμα, το `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` υποδηλώνει ότι το `Etag` είναι το **Sha1** των **37 bytes**. ## Αιτήσεις Εύρους * **`Accept-Ranges`**: Υποδεικνύει εάν ο διακομιστής υποστηρίζει αιτήσεις εύρους και, αν ναι, με ποιά μονάδα μπορεί να εκφραστεί το εύρος. `Accept-Ranges: ` * **`Range`**: Υποδεικνύει το τμήμα ενός εγγράφου που ο διακομιστής πρέπει να επιστρέψει. * **`If-Range`**: Δημιουργεί μια συνθήκη αιτήσεων εύρους που εκπληρώνεται μόνο εάν το δοθέν etag ή η ημερομηνία ταιριάζει με το απομακρυσμένο πόρο. Χρησιμοποιείται για να αποτρέψει τη λήψη δύο εύρων από ασύμβατες εκδόσεις του πόρου. * **`Content-Range`**: Υποδεικνύει πού σε ένα πλήρες μήνυμα σώματος ανήκει ένα μερικό μήνυμα. ## Πληροφορίες Σώματος Μηνύματος * **`Content-Length`:** Το μέγεθος του πόρου, σε δεκαδικό αριθμό bytes. * **`Content-Type`**: Υποδεικνύει τον τύπο μέσου του πόρου * **`Content-Encoding`**: Χρησιμοποιείται για να καθορίσει τον αλγόριθμο συμπίεσης. * **`Content-Language`**: Περιγράφει την ανθρώπινη γλώσσα(ες) που προορίζονται για το κοινό, έτσι ώστε να επιτρέπει στον χρήστη να διαφοροποιηθεί ανάλογα με την προτιμώμενη γλώσσα των χρηστών. * **`Content-Location`**: Υποδεικνύει μια εναλλακτική τοποθεσία για τα επιστρεφόμενα δεδομένα. Από την άποψη της δοκιμής διείσδυσης αυτές οι πληροφορίες είναι συνήθως "άχρηστες", αλλά αν ο πόρος είναι **προστατευμένος** από ένα 401 ή 403 και μπορείτε να βρείτε κάποιον **τρόπο** για να **αποκτήσετε** αυτήν τη **πληροφορία**, αυ ## Πληροφορίες Εξυπηρετητή * `Server: Apache/2.4.1 (Unix)` * `X-Powered-By: PHP/5.3.3` ## Ελέγχοι * **`Allow`**: Αυτή η κεφαλίδα χρησιμοποιείται για να επικοινωνήσει τις μεθόδους HTTP που μπορεί να χειριστεί ένας πόρος. Για παράδειγμα, μπορεί να καθοριστεί ως `Allow: GET, POST, HEAD`, υποδηλώνοντας ότι ο πόρος υποστηρίζει αυτές τις μεθόδους. * **`Expect`**: Χρησιμοποιείται από τον πελάτη για να μεταφέρει τις προσδοκίες που ο εξυπηρετητής πρέπει να πληροί για το αίτημα να επεξεργαστεί με επιτυχία. Ένα συνηθισμένο παράδειγμα περιλαμβάνει την κεφαλίδα `Expect: 100-continue`, η οποία υποδηλώνει ότι ο πελάτης προτίθεται να στείλει ένα μεγάλο φορτίο δεδομένων. Ο πελάτης αναμένει μια απάντηση `100 (Continue)` πριν συνεχίσει με τη μετάδοση. Αυτός ο μηχανισμός βοηθά στη βελτιστοποίηση της χρήσης του δικτύου περιμένοντας την επιβεβαίωση του εξυπηρετητή. ## Λήψεις * Η κεφαλίδα **`Content-Disposition`** στις απαντήσεις HTTP καθορίζει εάν ένα αρχείο πρέπει να εμφανιστεί **ενσωματωμένο** (εντός της ιστοσελίδας) ή να θεωρηθεί ως **συνημμένο** (κατεβασμένο). Για παράδειγμα: ``` Content-Disposition: attachment; filename="filename.jpg" ``` Αυτό σημαίνει ότι το αρχείο με το όνομα "filename.jpg" προορίζεται να ληφθεί και να αποθηκευτεί. ## Ασφαλείς Επικεφαλίδες ### Πολιτική Ασφάλειας Περιεχομένου (CSP) {% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} [content-security-policy-csp-bypass](../../pentesting-web/content-security-policy-csp-bypass/) {% endcontent-ref %} ### **Αξιόπιστοι Τύποι** Με την επιβολή των Αξιόπιστων Τύπων μέσω της CSP, οι εφαρμογές μπορούν να προστατευτούν από επιθέσεις DOM XSS. Οι Αξιόπιστοι Τύποι εξασφαλίζουν ότι μόνο συγκεκριμένα κατασκευασμένα αντικείμενα, συμμορφωμένα με καθιερωμένες πολιτικές ασφαλείας, μπορούν να χρησιμοποιηθούν σε επικίνδυνες κλήσεις ιστού API, εξασφαλίζοντας έτσι τον κώδικα JavaScript από προεπιλογή. ```javascript // Feature detection if (window.trustedTypes && trustedTypes.createPolicy) { // Name and create a policy const policy = trustedTypes.createPolicy('escapePolicy', { createHTML: str => str.replace(/\/g, '>'); }); } ``` ```javascript // Assignment of raw strings is blocked, ensuring safety. el.innerHTML = 'some string'; // Throws an exception. const escaped = policy.createHTML(''); el.innerHTML = escaped; // Results in safe assignment. ``` ### **X-Content-Type-Options** Αυτή η κεφαλίδα εμποδίζει τον έλεγχο τύπου MIME, μια πρακτική που θα μπορούσε να οδηγήσει σε ευπάθειες XSS. Βεβαιώνει ότι οι περηφάνιες σέβονται τους τύπους MIME που καθορίζονται από τον διακομιστή. ``` X-Content-Type-Options: nosniff ``` ### **X-Frame-Options** Για να αντιμετωπίσει το clickjacking, αυτή η κεφαλίδα περιορίζει τον τρόπο με τον οποίο τα έγγραφα μπορούν να ενσωματωθούν σε ετικέτες ``, `