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

209 lines
18 KiB
Markdown
Raw Normal View History

2024-02-10 22:40:18 +00:00
# Ειδικοί κεφαλίδες HTTP
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερευνητής Ερυθράς Ομάδας AWS του HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Άλλοι τρόποι υποστήριξης του HackTricks:
2024-02-03 12:22:53 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
2024-02-10 22:40:18 +00:00
* Αποκτήστε το [**επίσημο 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.
2022-04-28 16:01:33 +00:00
</details>
## Λίστες Λέξεων & Εργαλεία
2021-09-19 15:52:48 +00:00
* [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)
2021-09-19 15:52:48 +00:00
## Κεφαλίδες για Αλλαγή Τοποθεσίας
2021-09-19 15:19:00 +00:00
Αναδιατύπωση **πηγής IP**:
2021-09-19 15:19:00 +00:00
2022-04-05 22:24:52 +00:00
* `X-Originating-IP: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `X-Forwarded-For: 127.0.0.1`
2022-04-19 22:38:50 +00:00
* `X-Forwarded: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Forwarded-For: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Forwarded-Host: 127.0.0.1`
2022-04-05 22:24:52 +00:00
* `X-Remote-IP: 127.0.0.1`
2021-09-19 15:19:00 +00:00
* `X-Remote-Addr: 127.0.0.1`
* `X-ProxyUser-Ip: 127.0.0.1`
* `X-Original-URL: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `Client-IP: 127.0.0.1`
2021-09-27 10:58:30 +00:00
* `X-Client-IP: 127.0.0.1`
* `X-Host: 127.0.0.1`
2021-09-19 15:52:48 +00:00
* `True-Client-IP: 127.0.0.1`
* `Cluster-Client-IP: 127.0.0.1`
2021-09-20 13:06:32 +00:00
* `Via: 1.0 fred, 1.1 127.0.0.1`
2024-02-10 22:40:18 +00:00
* `Connection: close, X-Forwarded-For` (Ελέγξτε τις κεφαλίδες hop-by-hop)
2021-09-19 15:19:00 +00:00
Αναδιατύπωση **τοποθεσίας**:
2021-09-19 15:19:00 +00:00
* `X-Original-URL: /admin/console`
* `X-Rewrite-URL: /admin/console`
## Κεφαλίδες Hop-by-Hop
2021-09-19 15:19:00 +00:00
Μια κεφαλίδα hop-by-hop είναι μια κεφαλίδα που σχεδιάστηκε να επεξεργαστεί και να καταναλωθεί από τον διακομιστή μεσολάβησης που χειρίζεται αυτήν την αίτηση, αντί για μια κεφαλίδα end-to-end.
2021-09-19 15:19:00 +00:00
* `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 %}
2021-09-19 15:19:00 +00:00
## Χρήση Αιτήσεων HTTP Smuggling
2021-09-19 15:19:00 +00:00
* `Content-Length: 30`
* `Transfer-Encoding: chunked`
2021-11-05 20:59:42 +00:00
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
{% endcontent-ref %}
2021-09-19 15:19:00 +00:00
## Κεφαλίδες Προσωρινής Αποθήκευσης
2021-09-19 15:52:48 +00:00
**Κεφαλίδες Αποθήκευσης Διακομιστή**:
2021-09-20 13:06:32 +00:00
* Το **`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`** υποδεικνύει επίσης ότι ένας πόρος ήταν κρυφός
2021-09-19 15:52:48 +00:00
{% 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-unit>`
* **`Range`**: Υποδεικνύει το τμήμα ενός εγγράφου που ο διακομιστής πρέπει να επιστρέψει.
* **`If-Range`**: Δημιουργεί μια συνθήκη αιτήσεων εύρους που εκπληρώνεται μόνο εάν το δοθέν etag ή η ημερομηνία ταιριάζει με το απομακρυσμένο πόρο. Χρησιμοποιείται για να αποτρέψει τη λήψη δύο εύρων από ασύμβατες εκδόσεις του πόρου.
* **`Content-Range`**: Υποδεικνύει πού σε ένα πλήρες μήνυμα σώματος ανήκει ένα μερικό μήνυμα.
## Πληροφορίες Σώματος Μηνύματος
* **`Content-Length`:** Το μέγεθος του πόρου, σε δεκαδικό αριθμό bytes.
* **`Content-Type`**: Υποδεικνύει τον τύπο μέσου του πόρου
* **`Content-Encoding`**: Χρησιμοποιείται για να καθορίσει τον αλγόριθμο συμπίεσης.
* **`Content-Language`**: Περιγράφει την ανθρώπινη γλώσσα(ες) που προορίζονται για το κοινό, έτσι ώστε να επιτρέπει στον χρήστη να διαφοροποιηθεί ανάλογα με την προτιμώμενη γλώσσα των χρηστών.
* **`Content-Location`**: Υποδεικνύει μια εναλλακτική τοποθεσία για τα επιστρεφόμενα δεδομένα.
Από την άποψη της δοκιμής διείσδυσης αυτές οι πληροφορίες είναι συνήθως "άχρηστες", αλλά αν ο πόρος είναι **προστατευμένος** από ένα 401 ή 403 και μπορείτε να βρείτε κάποιον **τρόπο** για να **αποκτήσετε** αυτήν τη **πληροφορία**, αυ
## Πληροφορίες Εξυπηρετητή
2021-09-20 13:06:32 +00:00
* `Server: Apache/2.4.1 (Unix)`
* `X-Powered-By: PHP/5.3.3`
2024-02-10 22:40:18 +00:00
## Ελέγχοι
2021-09-20 13:06:32 +00:00
* **`Allow`**: Αυτή η κεφαλίδα χρησιμοποιείται για να επικοινωνήσει τις μεθόδους HTTP που μπορεί να χειριστεί ένας πόρος. Για παράδειγμα, μπορεί να καθοριστεί ως `Allow: GET, POST, HEAD`, υποδηλώνοντας ότι ο πόρος υποστηρίζει αυτές τις μεθόδους.
* **`Expect`**: Χρησιμοποιείται από τον πελάτη για να μεταφέρει τις προσδοκίες που ο εξυπηρετητής πρέπει να πληροί για το αίτημα να επεξεργαστεί με επιτυχία. Ένα συνηθισμένο παράδειγμα περιλαμβάνει την κεφαλίδα `Expect: 100-continue`, η οποία υποδηλώνει ότι ο πελάτης προτίθεται να στείλει ένα μεγάλο φορτίο δεδομένων. Ο πελάτης αναμένει μια απάντηση `100 (Continue)` πριν συνεχίσει με τη μετάδοση. Αυτός ο μηχανισμός βοηθά στη βελτιστοποίηση της χρήσης του δικτύου περιμένοντας την επιβεβαίωση του εξυπηρετητή.
2021-09-20 13:06:32 +00:00
2024-02-10 22:40:18 +00:00
## Λήψεις
2021-09-20 13:06:32 +00:00
* Η κεφαλίδα **`Content-Disposition`** στις απαντήσεις HTTP καθορίζει εάν ένα αρχείο πρέπει να εμφανιστεί **ενσωματωμένο** (εντός της ιστοσελίδας) ή να θεωρηθεί ως **συνημμένο** (κατεβασμένο). Για παράδειγμα:
2024-02-08 21:36:15 +00:00
```
Content-Disposition: attachment; filename="filename.jpg"
```
Αυτό σημαίνει ότι το αρχείο με το όνομα "filename.jpg" προορίζεται να ληφθεί και να αποθηκευτεί.
2021-09-20 13:06:32 +00:00
## Ασφαλείς Επικεφαλίδες
2024-02-10 22:40:18 +00:00
### Πολιτική Ασφάλειας Περιεχομένου (CSP) <a href="#csp" id="csp"></a>
2022-04-19 22:38:50 +00:00
{% 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
2021-10-19 22:49:43 +00:00
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
2024-02-10 22:40:18 +00:00
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
2021-10-19 22:49:43 +00:00
}
```
```javascript
2024-02-08 21:36:15 +00:00
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
2021-10-19 22:49:43 +00:00
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
2024-02-08 21:36:15 +00:00
el.innerHTML = escaped; // Results in safe assignment.
2021-10-19 22:49:43 +00:00
```
2024-02-08 21:36:15 +00:00
### **X-Content-Type-Options**
2021-10-19 22:49:43 +00:00
Αυτή η κεφαλίδα εμποδίζει τον έλεγχο τύπου MIME, μια πρακτική που θα μπορούσε να οδηγήσει σε ευπάθειες XSS. Βεβαιώνει ότι οι περηφάνιες σέβονται τους τύπους MIME που καθορίζονται από τον διακομιστή.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
X-Content-Type-Options: nosniff
```
2024-02-08 21:36:15 +00:00
### **X-Frame-Options**
2021-10-19 22:49:43 +00:00
Για να αντιμετωπίσει το clickjacking, αυτή η κεφαλίδα περιορίζει τον τρόπο με τον οποίο τα έγγραφα μπορούν να ενσωματωθούν σε ετικέτες `<frame>`, `<iframe>`, `<embed>` ή `<object>`, συστήνοντας σε όλα τα έγγραφα να καθορίζουν ρητά τις άδειες ενσωμάτωσής τους.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
X-Frame-Options: DENY
```
### **Πολιτική Διασποράς Πόρων Από Διαφορετική Προέλευση (CORP) και Κοινή Χρήση Πόρων Από Διαφορετική Προέλευση (CORS)**
2021-10-19 22:49:43 +00:00
Η CORP είναι κρίσιμη για τον καθορισμό των πόρων που μπορούν να φορτωθούν από ιστότοπους, μειώνοντας τις διαρροές μεταξύ ιστοσελίδων. Από την άλλη, το CORS επιτρέπει έναν πιο ευέλικτο μηχανισμό κοινής χρήσης πόρων από διαφορετική προέλευση, χαλαρώνοντας την πολιτική της ίδιας προέλευσης υπό συγκεκριμένες συνθήκες.
2021-10-19 22:49:43 +00:00
```
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
### **Πολιτική Ενσωμάτωσης Διακορυφής Προέλευσης (COEP) και Πολιτική Άνοιγμας Διακορυφής Προέλευσης (COOP)**
Το COEP και το COOP είναι ουσιώδη για την ενεργοποίηση της απομόνωσης διακορυφής προέλευσης, μειώνοντας σημαντικά τον κίνδυνο επιθέσεων παρόμοιων με το Spectre. Ελέγχουν τη φόρτωση πόρων διακορυφής προέλευσης και την αλληλεπίδραση με παράθυρα διακορυφής προέλευσης, αντίστοιχα.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
Cross-Origin-Embedder-Policy: require-corp
2024-02-08 21:36:15 +00:00
Cross-Origin-Opener-Policy: same-origin-allow-popups
2021-10-19 22:49:43 +00:00
```
2024-02-08 21:36:15 +00:00
### **HTTP Strict Transport Security (HSTS)**
2021-10-19 22:49:43 +00:00
Τέλος, το HSTS είναι μια λειτουργία ασφαλείας που επιβάλλει στους browsers να επικοινωνούν με τους servers μόνο μέσω ασφαλών συνδέσεων HTTPS, βελτιώνοντας έτσι την απορρήτου και την ασφάλεια.
2024-02-08 21:36:15 +00:00
```
2021-10-19 22:49:43 +00:00
Strict-Transport-Security: max-age=3153600
```
2024-02-10 22:40:18 +00:00
## Αναφορές
2021-09-19 19:55:40 +00:00
2024-02-08 21:36:15 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
2021-09-19 19:55:40 +00:00
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
2021-10-19 22:49:43 +00:00
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
2024-02-08 21:36:15 +00:00
* [https://web.dev/articles/security-headers](https://web.dev/articles/security-headers)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Άλλοι τρόποι υποστήριξης του HackTricks:
2024-02-03 12:22:53 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
2024-02-10 22:40:18 +00:00
* Αποκτήστε το [**επίσημο 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.
2022-04-28 16:01:33 +00:00
</details>