hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md

18 KiB
Raw Blame History

Ειδικοί κεφαλίδες HTTP

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

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

Λίστες Λέξεων & Εργαλεία

Κεφαλίδες για Αλλαγή Τοποθεσίας

Αναδιατύπωση πηγής 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 {% endcontent-ref %}

Χρήση Αιτήσεων HTTP Smuggling

  • Content-Length: 30
  • Transfer-Encoding: chunked

{% content-ref url="../../pentesting-web/http-request-smuggling/" %} 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 {% 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-unit>
  • 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 {% endcontent-ref %}

Αξιόπιστοι Τύποι

Με την επιβολή των Αξιόπιστων Τύπων μέσω της CSP, οι εφαρμογές μπορούν να προστατευτούν από επιθέσεις DOM XSS. Οι Αξιόπιστοι Τύποι εξασφαλίζουν ότι μόνο συγκεκριμένα κατασκευασμένα αντικείμενα, συμμορφωμένα με καθιερωμένες πολιτικές ασφαλείας, μπορούν να χρησιμοποιηθούν σε επικίνδυνες κλήσεις ιστού API, εξασφαλίζοντας έτσι τον κώδικα JavaScript από προεπιλογή.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

Αυτή η κεφαλίδα εμποδίζει τον έλεγχο τύπου MIME, μια πρακτική που θα μπορούσε να οδηγήσει σε ευπάθειες XSS. Βεβαιώνει ότι οι περηφάνιες σέβονται τους τύπους MIME που καθορίζονται από τον διακομιστή.

X-Content-Type-Options: nosniff

X-Frame-Options

Για να αντιμετωπίσει το clickjacking, αυτή η κεφαλίδα περιορίζει τον τρόπο με τον οποίο τα έγγραφα μπορούν να ενσωματωθούν σε ετικέτες <frame>, <iframe>, <embed> ή <object>, συστήνοντας σε όλα τα έγγραφα να καθορίζουν ρητά τις άδειες ενσωμάτωσής τους.

X-Frame-Options: DENY

Πολιτική Διασποράς Πόρων Από Διαφορετική Προέλευση (CORP) και Κοινή Χρήση Πόρων Από Διαφορετική Προέλευση (CORS)

Η CORP είναι κρίσιμη για τον καθορισμό των πόρων που μπορούν να φορτωθούν από ιστότοπους, μειώνοντας τις διαρροές μεταξύ ιστοσελίδων. Από την άλλη, το CORS επιτρέπει έναν πιο ευέλικτο μηχανισμό κοινής χρήσης πόρων από διαφορετική προέλευση, χαλαρώνοντας την πολιτική της ίδιας προέλευσης υπό συγκεκριμένες συνθήκες.

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Πολιτική Ενσωμάτωσης Διακορυφής Προέλευσης (COEP) και Πολιτική Άνοιγμας Διακορυφής Προέλευσης (COOP)

Το COEP και το COOP είναι ουσιώδη για την ενεργοποίηση της απομόνωσης διακορυφής προέλευσης, μειώνοντας σημαντικά τον κίνδυνο επιθέσεων παρόμοιων με το Spectre. Ελέγχουν τη φόρτωση πόρων διακορυφής προέλευσης και την αλληλεπίδραση με παράθυρα διακορυφής προέλευσης, αντίστοιχα.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

Τέλος, το HSTS είναι μια λειτουργία ασφαλείας που επιβάλλει στους browsers να επικοινωνούν με τους servers μόνο μέσω ασφαλών συνδέσεων HTTPS, βελτιώνοντας έτσι την απορρήτου και την ασφάλεια.

Strict-Transport-Security: max-age=3153600

Αναφορές

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

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