15 KiB
Special HTTP headers
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Wordlists & Tools
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
Headers to Change Location
Rewrite IP source:
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
(Check hop-by-hop headers)
Rewrite location:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Hop-by-Hop headers
A hop-by-hop header is a header which is designed to be processed and consumed by the proxy currently handling the request, as opposed to an end-to-end header.
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 Request Smuggling
Content-Length: 30
Transfer-Encoding: chunked
{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}
Cache Headers
Server Cache Headers:
X-Cache
in the response may have the valuemiss
when the request wasn't cached and the valuehit
when it is cached- Similar behaviour in the header
Cf-Cache-Status
Cache-Control
indicates if a resource is being cached and when will be the next time the resource will be cached again:Cache-Control: public, max-age=1800
Vary
is often used in the response to indicate additional headers that are treated as part of the cache key even if they are normally unkeyed.Age
defines the times in seconds the object has been in the proxy cache.Server-Timing: cdn-cache; desc=HIT
also indicates that a resource was cached
{% content-ref url="../../pentesting-web/cache-deception/" %} cache-deception {% endcontent-ref %}
Local Cache headers:
Clear-Site-Data
: Header to indicate the cache that should be removed:Clear-Site-Data: "cache", "cookies"
Expires
: Contains date/time when the response should expire:Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
same asCache-Control: no-cache
Warning
: TheWarning
general HTTP header contains information about possible problems with the status of the message. More than oneWarning
header may appear in a response.Warning: 110 anderson/1.3.37 "Response is stale"
Conditionals
- Requests using these headers:
If-Modified-Since
andIf-Unmodified-Since
will be responded with data only if the response header**Last-Modified
** contains a different time. - Conditional requests using
If-Match
andIf-None-Match
use an Etag value so the web server will send the content of the response if the data (Etag) has changed. TheEtag
is taken from the HTTP response. - The Etag value is usually calculated based on the content of the response. For example,
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"
indicates that theEtag
is the Sha1 of 37 bytes.
Range requests
Accept-Ranges
: Indicates if the server supports range requests, and if so in which unit the range can be expressed.Accept-Ranges: <range-unit>
Range
: Indicates the part of a document that the server should return.If-Range
: Creates a conditional range request that is only fulfilled if the given etag or date matches the remote resource. Used to prevent downloading two ranges from incompatible version of the resource.Content-Range
: Indicates where in a full body message a partial message belongs.
Message body information
Content-Length
: Το μέγεθος του πόρου, σε δεκαδικούς αριθμούς byte.Content-Type
: Υποδεικνύει τον τύπο μέσου του πόρουContent-Encoding
: Χρησιμοποιείται για να προσδιορίσει τον αλγόριθμο συμπίεσης.Content-Language
: Περιγράφει τη γλώσσα(ες) που προορίζονται για το κοινό, ώστε να επιτρέπει σε έναν χρήστη να διαφοροποιεί σύμφωνα με την προτιμώμενη γλώσσα του.Content-Location
: Υποδεικνύει μια εναλλακτική τοποθεσία για τα επιστρεφόμενα δεδομένα.
Από την άποψη ενός pentest, αυτές οι πληροφορίες είναι συνήθως "άχρηστες", αλλά αν ο πόρος είναι προστατευμένος από 401 ή 403 και μπορείτε να βρείτε κάποιο τρόπο να πάρετε αυτές τις πληροφορίες, αυτό θα μπορούσε να είναι ενδιαφέρον.
Για παράδειγμα, ένας συνδυασμός Range
και Etag
σε ένα αίτημα HEAD μπορεί να διαρρεύσει το περιεχόμενο της σελίδας μέσω αιτημάτων HEAD:
- Ένα αίτημα με την κεφαλίδα
Range: bytes=20-20
και με μια απάντηση που περιέχειETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
διαρρέει ότι το SHA1 του byte 20 είναιETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
Server Info
Server: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
Controls
Allow
: Αυτή η κεφαλίδα χρησιμοποιείται για να επικοινωνήσει τις μεθόδους HTTP που μπορεί να χειριστεί ένας πόρος. Για παράδειγμα, μπορεί να καθοριστεί ωςAllow: GET, POST, HEAD
, υποδεικνύοντας ότι ο πόρος υποστηρίζει αυτές τις μεθόδους.Expect
: Χρησιμοποιείται από τον πελάτη για να μεταφέρει προσδοκίες που πρέπει να πληροί ο διακομιστής για να επεξεργαστεί επιτυχώς το αίτημα. Μια κοινή περίπτωση χρήσης περιλαμβάνει την κεφαλίδαExpect: 100-continue
, η οποία σηματοδοτεί ότι ο πελάτης σκοπεύει να στείλει ένα μεγάλο φορτίο δεδομένων. Ο πελάτης αναζητά μια απάντηση100 (Continue)
πριν προχωρήσει με τη μετάδοση. Αυτός ο μηχανισμός βοηθά στη βελτιστοποίηση της χρήσης του δικτύου περιμένοντας επιβεβαίωση από τον διακομιστή.
Downloads
- Η κεφαλίδα
Content-Disposition
στις απαντήσεις HTTP καθορίζει αν ένα αρχείο θα πρέπει να εμφανίζεται inline (μέσα στη σελίδα) ή να αντιμετωπίζεται ως συνημμένο (κατεβασμένο). Για παράδειγμα:
Content-Disposition: attachment; filename="filename.jpg"
Αυτό σημαίνει ότι το αρχείο με το όνομα "filename.jpg" προορίζεται να κατέβει και να αποθηκευτεί.
Security Headers
Content Security Policy (CSP)
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}
Trusted Types
Με την επιβολή Trusted Types μέσω CSP, οι εφαρμογές μπορούν να προστατευτούν από επιθέσεις DOM XSS. Τα Trusted Types διασφαλίζουν ότι μόνο ειδικά κατασκευασμένα αντικείμενα, που συμμορφώνονται με καθορισμένες πολιτικές ασφαλείας, μπορούν να χρησιμοποιηθούν σε επικίνδυνες κλήσεις web API, εξασφαλίζοντας έτσι τον κώδικα JavaScript από προεπιλογή.
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '<').replace(/>/g, '>');
});
}
// 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
Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)
Η CORP είναι κρίσιμη για τον καθορισμό ποιες πόροι μπορούν να φορτωθούν από ιστοσελίδες, μετριάζοντας τις διαρροές μεταξύ ιστότοπων. Η CORS, από την άλλη πλευρά, επιτρέπει έναν πιο ευέλικτο μηχανισμό διαμοιρασμού πόρων μεταξύ διαφορετικών προελεύσεων, χαλαρώνοντας την πολιτική της ίδιας προέλευσης υπό ορισμένες συνθήκες.
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Cross-Origin Embedder Policy (COEP) and Cross-Origin Opener Policy (COOP)
COEP και COOP είναι απαραίτητα για την ενεργοποίηση της απομόνωσης μεταξύ διαφορετικών προελεύσεων, μειώνοντας σημαντικά τον κίνδυνο επιθέσεων τύπου Spectre. Ελέγχουν τη φόρτωση πόρων από διαφορετικές προελεύσεις και την αλληλεπίδραση με παράθυρα από διαφορετικές προελεύσεις, αντίστοιχα.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
Τέλος, το HSTS είναι μια λειτουργία ασφαλείας που αναγκάζει τους περιηγητές να επικοινωνούν με τους διακομιστές μόνο μέσω ασφαλών συνδέσεων HTTPS, ενισχύοντας έτσι την ιδιωτικότητα και την ασφάλεια.
Strict-Transport-Security: max-age=3153600
Αναφορές
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.