mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 13:43:24 +00:00
Translated ['network-services-pentesting/pentesting-web/special-http-hea
This commit is contained in:
parent
c64cffa13d
commit
421562712b
2 changed files with 46 additions and 47 deletions
|
@ -4,13 +4,13 @@
|
|||
|
||||
<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 formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique 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.
|
||||
* **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** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,7 +19,7 @@ Outras formas de apoiar o HackTricks:
|
|||
* [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)
|
||||
|
||||
## Cabeçalhos para Alterar a Localização
|
||||
## Cabeçalhos para Alterar Localização
|
||||
|
||||
Reescrever **IP de origem**:
|
||||
|
||||
|
@ -47,7 +47,7 @@ Reescrever **localização**:
|
|||
|
||||
## Cabeçalhos Hop-by-Hop
|
||||
|
||||
Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consumido pelo proxy que está manipulando a solicitação, em oposição a um cabeçalho de ponta a ponta.
|
||||
Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consumido pelo proxy que está manipulando a solicitação, em oposição a um cabeçalho end-to-end.
|
||||
|
||||
* `Connection: close, X-Forwarded-For`
|
||||
|
||||
|
@ -69,6 +69,7 @@ Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consum
|
|||
**Cabeçalhos de Cache do Servidor**:
|
||||
|
||||
* **`X-Cache`** na resposta pode ter o valor **`miss`** quando a solicitação não foi armazenada em cache e o valor **`hit`** quando está em cache
|
||||
* Comportamento semelhante no cabeçalho **`Cf-Cache-Status`**
|
||||
* **`Cache-Control`** indica se um recurso está sendo armazenado em cache e quando será a próxima vez que o recurso será armazenado em cache novamente: `Cache-Control: public, max-age=1800`
|
||||
* **`Vary`** é frequentemente usado na resposta para **indicar cabeçalhos adicionais** que são tratados como **parte da chave de cache** mesmo que normalmente não sejam chaveados.
|
||||
* **`Age`** define o tempo em segundos que o objeto esteve em cache no proxy.
|
||||
|
@ -82,12 +83,12 @@ Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consum
|
|||
|
||||
* `Clear-Site-Data`: Cabeçalho para indicar o cache que deve ser removido: `Clear-Site-Data: "cache", "cookies"`
|
||||
* `Expires`: Contém a data/hora em que a resposta deve expirar: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
|
||||
* `Pragma: no-cache` mesmo que `Cache-Control: no-cache`
|
||||
* `Warning`: O cabeçalho geral **`Warning`** HTTP contém informações sobre possíveis problemas com o status da mensagem. Mais de um cabeçalho `Warning` pode aparecer em uma resposta. `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
* `Pragma: no-cache` igual a `Cache-Control: no-cache`
|
||||
* `Warning`: O cabeçalho geral **`Warning`** contém informações sobre possíveis problemas com o status da mensagem. Mais de um cabeçalho `Warning` pode aparecer em uma resposta. `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
|
||||
## Condicional
|
||||
|
||||
* Solicitações usando estes cabeçalhos: **`If-Modified-Since`** e **`If-Unmodified-Since`** serão respondidas com dados apenas se o cabeçalho de resposta\*\*`Last-Modified`\*\* contiver um horário diferente.
|
||||
* Solicitações usando esses cabeçalhos: **`If-Modified-Since`** e **`If-Unmodified-Since`** serão respondidas com dados apenas se o cabeçalho de resposta **`Last-Modified`** contiver um horário diferente.
|
||||
* Solicitações condicionais usando **`If-Match`** e **`If-None-Match`** usam um valor Etag para que o servidor da web envie o conteúdo da resposta se os dados (Etag) tiverem mudado. O `Etag` é retirado da resposta HTTP.
|
||||
* O valor **Etag** é geralmente **calculado com base** no **conteúdo** da resposta. Por exemplo, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` indica que o `Etag` é o **Sha1** de **37 bytes**.
|
||||
|
||||
|
@ -95,7 +96,7 @@ Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consum
|
|||
|
||||
* **`Accept-Ranges`**: Indica se o servidor suporta solicitações de intervalo e, em caso afirmativo, em qual unidade o intervalo pode ser expresso. `Accept-Ranges: <range-unit>`
|
||||
* **`Range`**: Indica a parte de um documento que o servidor deve retornar.
|
||||
* **`If-Range`**: Cria uma solicitação de intervalo condicional que só é atendida se o etag ou data fornecida corresponder ao recurso remoto. Usado para evitar o download de dois intervalos de versões incompatíveis do recurso.
|
||||
* **`If-Range`**: Cria uma solicitação de intervalo condicional que é atendida apenas se o etag ou data fornecida corresponder ao recurso remoto. Usado para evitar o download de dois intervalos de versões incompatíveis do recurso.
|
||||
* **`Content-Range`**: Indica onde em uma mensagem de corpo completo uma mensagem parcial pertence.
|
||||
|
||||
## Informações do Corpo da Mensagem
|
||||
|
@ -106,11 +107,10 @@ Um cabeçalho hop-by-hop é um cabeçalho projetado para ser processado e consum
|
|||
* **`Content-Language`**: Descreve o(s) idioma(s) humano(s) destinado(s) ao público, permitindo que um usuário diferencie de acordo com o idioma preferido dos usuários.
|
||||
* **`Content-Location`**: Indica uma localização alternativa para os dados retornados.
|
||||
|
||||
Do ponto de vista de um pentest, essas informações geralmente são "inúteis", mas se o recurso for **protegido** por um 401 ou 403 e você conseguir encontrar alguma **maneira** de **obter** essas **informações**, isso pode ser **interessante.**\
|
||||
Do ponto de vista de um pentest, essas informações geralmente são "inúteis", mas se o recurso for **protegido** por um 401 ou 403 e você conseguir encontrar alguma **maneira** de **obter** essas **informações**, isso poderia ser **interessante**.\
|
||||
Por exemplo, uma combinação de **`Range`** e **`Etag`** em uma solicitação HEAD pode vazar o conteúdo da página via solicitações HEAD:
|
||||
|
||||
* Uma solicitação com o cabeçalho `Range: bytes=20-20` e com uma resposta contendo `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` está vazando que o SHA1 do byte 20 é `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
|
||||
|
||||
## Informações do Servidor
|
||||
|
||||
* `Server: Apache/2.4.1 (Unix)`
|
||||
|
@ -119,7 +119,7 @@ Por exemplo, uma combinação de **`Range`** e **`Etag`** em uma solicitação H
|
|||
## Controles
|
||||
|
||||
* **`Allow`**: Este cabeçalho é usado para comunicar os métodos HTTP que um recurso pode manipular. Por exemplo, pode ser especificado como `Allow: GET, POST, HEAD`, indicando que o recurso suporta esses métodos.
|
||||
* **`Expect`**: Utilizado pelo cliente para transmitir expectativas que o servidor precisa atender para que a solicitação seja processada com sucesso. Um caso de uso comum envolve o cabeçalho `Expect: 100-continue`, que sinaliza que o cliente pretende enviar uma grande carga de dados. O cliente aguarda uma resposta `100 (Continue)` antes de prosseguir com a transmissão. Esse mecanismo ajuda a otimizar o uso da rede aguardando a confirmação do servidor.
|
||||
* **`Expect`**: Utilizado pelo cliente para transmitir expectativas que o servidor precisa atender para que a solicitação seja processada com sucesso. Um caso de uso comum envolve o cabeçalho `Expect: 100-continue`, que sinaliza que o cliente pretende enviar uma carga de dados grande. O cliente aguarda uma resposta `100 (Continue)` antes de prosseguir com a transmissão. Esse mecanismo ajuda a otimizar o uso da rede aguardando a confirmação do servidor.
|
||||
|
||||
## Downloads
|
||||
|
||||
|
@ -127,8 +127,6 @@ Por exemplo, uma combinação de **`Range`** e **`Etag`** em uma solicitação H
|
|||
```
|
||||
Content-Disposition: attachment; filename="filename.jpg"
|
||||
```
|
||||
Isto significa que o arquivo chamado "filename.jpg" é destinado a ser baixado e salvo.
|
||||
|
||||
## Cabeçalhos de Segurança
|
||||
|
||||
### Política de Segurança de Conteúdo (CSP) <a href="#csp" id="csp"></a>
|
||||
|
@ -139,7 +137,7 @@ Isto significa que o arquivo chamado "filename.jpg" é destinado a ser baixado e
|
|||
|
||||
### **Tipos Confiáveis**
|
||||
|
||||
Ao fazer cumprir Tipos Confiáveis através do CSP, as aplicações podem ser protegidas contra ataques DOM XSS. Os Tipos Confiáveis garantem que apenas objetos especificamente elaborados, em conformidade com políticas de segurança estabelecidas, possam ser usados em chamadas perigosas de API da web, garantindo assim o código JavaScript por padrão.
|
||||
Ao fazer cumprir Tipos Confiáveis através do CSP, as aplicações podem ser protegidas contra ataques DOM XSS. Os Tipos Confiáveis garantem que apenas objetos especificamente criados, em conformidade com políticas de segurança estabelecidas, possam ser usados em chamadas perigosas de API da web, garantindo assim o código JavaScript por padrão.
|
||||
```javascript
|
||||
// Feature detection
|
||||
if (window.trustedTypes && trustedTypes.createPolicy) {
|
||||
|
@ -176,16 +174,16 @@ Cross-Origin-Resource-Policy: same-origin
|
|||
Access-Control-Allow-Origin: https://example.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
### **Cross-Origin Embedder Policy (COEP) e Cross-Origin Opener Policy (COOP)**
|
||||
### **Política de Incorporação de Origem Cruzada (COEP) e Política de Origem Cruzada do Opener (COOP)**
|
||||
|
||||
COEP e COOP são essenciais para habilitar o isolamento entre origens, reduzindo significativamente o risco de ataques semelhantes ao Spectre. Eles controlam o carregamento de recursos de origens diferentes e a interação com janelas de origens diferentes, respectivamente.
|
||||
COEP e COOP são essenciais para habilitar o isolamento de origem cruzada, reduzindo significativamente o risco de ataques semelhantes ao Spectre. Eles controlam o carregamento de recursos de origens cruzadas e a interação com janelas de origens cruzadas, respectivamente.
|
||||
```
|
||||
Cross-Origin-Embedder-Policy: require-corp
|
||||
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
||||
```
|
||||
### **HTTP Strict Transport Security (HSTS)**
|
||||
|
||||
Por último, o HSTS é um recurso de segurança que obriga os navegadores a se comunicarem apenas por conexões seguras HTTPS, aumentando assim a privacidade e segurança.
|
||||
Por último, o HSTS é uma funcionalidade de segurança que obriga os navegadores a se comunicarem apenas com servidores por meio de conexões seguras HTTPS, aumentando assim a privacidade e segurança.
|
||||
```
|
||||
Strict-Transport-Security: max-age=3153600
|
||||
```
|
||||
|
@ -205,7 +203,7 @@ Outras formas de apoiar o HackTricks:
|
|||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique 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 repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **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>
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
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 PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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 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)**.**
|
||||
* **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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -17,7 +17,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as ferramentas comunitárias mais avançadas do mundo.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas comunitárias mais avançadas do mundo**.\
|
||||
Acesse hoje:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -35,23 +35,21 @@ O envenenamento de cache tem como objetivo manipular o cache do lado do cliente
|
|||
|
||||
A execução de um ataque de envenenamento de cache envolve várias etapas:
|
||||
|
||||
1. **Identificação de Entradas Não-Chaveadas**: Estes são parâmetros que, embora não sejam necessários para que uma solicitação seja armazenada em cache, podem alterar a resposta retornada pelo servidor. Identificar essas entradas é crucial, pois elas podem ser exploradas para manipular o cache.
|
||||
|
||||
2. **Exploração das Entradas Não-Chaveadas**: Após identificar as entradas não-chaveadas, o próximo passo envolve descobrir como abusar desses parâmetros para modificar a resposta do servidor de uma forma que beneficie o atacante.
|
||||
|
||||
1. **Identificação de Entradas Não Chaveadas**: Estes são parâmetros que, embora não sejam necessários para que uma solicitação seja armazenada em cache, podem alterar a resposta retornada pelo servidor. Identificar essas entradas é crucial, pois elas podem ser exploradas para manipular o cache.
|
||||
2. **Exploração das Entradas Não Chaveadas**: Após identificar as entradas não chaveadas, o próximo passo envolve descobrir como abusar desses parâmetros para modificar a resposta do servidor de uma forma que beneficie o atacante.
|
||||
3. **Garantir que a Resposta Envenenada seja Armazenada em Cache**: O último passo é garantir que a resposta manipulada seja armazenada em cache. Dessa forma, qualquer usuário que acesse a página afetada enquanto o cache estiver envenenado receberá a resposta contaminada.
|
||||
|
||||
### Descoberta: Verificar cabeçalhos HTTP
|
||||
|
||||
Normalmente, quando uma resposta foi **armazenada em cache** haverá um **cabeçalho indicando isso**, você pode verificar quais cabeçalhos você deve prestar atenção neste post: [**Cabeçalhos de Cache HTTP**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
Normalmente, quando uma resposta foi **armazenada em cache** haverá um **cabeçalho indicando isso**, você pode verificar quais cabeçalhos deve prestar atenção neste post: [**Cabeçalhos de Cache HTTP**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
|
||||
### Descoberta: Armazenamento de código 400 em cache
|
||||
|
||||
Se você suspeitar que a resposta está sendo armazenada em um cache, você poderia tentar **enviar solicitações com um cabeçalho ruim**, que deveria ser respondido com um **código de status 400**. Em seguida, tente acessar a solicitação normalmente e se a **resposta for um código de status 400**, você saberá que está vulnerável (e até poderia realizar um DoS).\
|
||||
Se você suspeitar que a resposta está sendo armazenada em cache, você poderia tentar **enviar solicitações com um cabeçalho ruim**, que deveria ser respondido com um **código de status 400**. Em seguida, tente acessar a solicitação normalmente e se a **resposta for um código de status 400**, você saberá que está vulnerável (e até poderia realizar um DoS).\
|
||||
Um cabeçalho mal configurado poderia ser apenas `\:` como cabeçalho.\
|
||||
_Obs: Às vezes esses tipos de códigos de status não são armazenados em cache, então este teste será inútil._
|
||||
|
||||
### Descoberta: Identificar e avaliar entradas não-chaveadas
|
||||
### Descoberta: Identificar e avaliar entradas não chaveadas
|
||||
|
||||
Você poderia usar o [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) para **forçar parâmetros e cabeçalhos** que podem estar **alterando a resposta da página**. Por exemplo, uma página pode estar usando o cabeçalho `X-Forwarded-For` para indicar ao cliente para carregar o script de lá:
|
||||
```markup
|
||||
|
@ -65,7 +63,7 @@ Com o parâmetro/cabeçalho identificado, verifique como ele está sendo **sanit
|
|||
|
||||
Depois de ter **identificado** a **página** que pode ser abusada, qual **parâmetro**/**cabeçalho** usar e **como** abusar dele, você precisa obter a página em cache. Dependendo do recurso que você está tentando colocar em cache, isso pode levar algum tempo, talvez seja necessário tentar por vários segundos.\
|
||||
O cabeçalho **`X-Cache`** na resposta pode ser muito útil, pois pode ter o valor **`miss`** quando a solicitação não foi colocada em cache e o valor **`hit`** quando está em cache.\
|
||||
O cabeçalho **`Cache-Control`** também é interessante para saber se um recurso está sendo colocado em cache e quando será a próxima vez que o recurso será colocado em cache novamente: `Cache-Control: public, max-age=1800`\
|
||||
O cabeçalho **`Cache-Control`** também é interessante para saber se um recurso está em cache e quando será a próxima vez que o recurso será colocado em cache novamente: `Cache-Control: public, max-age=1800`\
|
||||
Outro cabeçalho interessante é o **`Vary`**. Esse cabeçalho é frequentemente usado para **indicar cabeçalhos adicionais** que são tratados como **parte da chave de cache** mesmo que normalmente não sejam chaveados. Portanto, se o usuário conhece o `User-Agent` da vítima que está visando, ele pode envenenar o cache para os usuários que usam esse `User-Agent` específico.\
|
||||
Mais um cabeçalho relacionado ao cache é o **`Age`**. Ele define o tempo em segundos que o objeto está no cache do proxy.
|
||||
|
||||
|
@ -90,9 +88,13 @@ GET / HTTP/1.1
|
|||
Host: vulnerable.com
|
||||
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
||||
```
|
||||
### Envenenamento de cache com travessia de caminho para roubar chave de API <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**Este artigo explica**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) como foi possível roubar uma chave de API da OpenAI com uma URL como `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` porque qualquer coisa que corresponda a `/share/*` será armazenada em cache sem o Cloudflare normalizar a URL, o que foi feito quando a solicitação chegou ao servidor web.
|
||||
|
||||
### Usando vários cabeçalhos para explorar vulnerabilidades de envenenamento de cache na web <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
Às vezes, você precisará **explorar várias entradas não chaveadas** para poder abusar de um cache. Por exemplo, você pode encontrar um **redirecionamento aberto** se definir `X-Forwarded-Host` para um domínio controlado por você e `X-Forwarded-Scheme` para `http`. **Se** o **servidor** estiver **encaminhando** todas as **solicitações HTTP** para HTTPS e usando o cabeçalho `X-Forwarded-Scheme` como o nome de domínio para o redirecionamento. Você pode controlar para onde a página é apontada pelo redirecionamento.
|
||||
Às vezes, você precisará **explorar várias entradas não-chaveadas** para poder abusar de um cache. Por exemplo, você pode encontrar um **redirecionamento aberto** se definir `X-Forwarded-Host` para um domínio controlado por você e `X-Forwarded-Scheme` para `http`. **Se** o **servidor** estiver **encaminhando** todas as **solicitações HTTP** para HTTPS e usando o cabeçalho `X-Forwarded-Scheme` como o nome de domínio para o redirecionamento. Você pode controlar para onde a página é apontada pelo redirecionamento.
|
||||
```markup
|
||||
GET /resources/js/tracking.js HTTP/1.1
|
||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||
|
@ -101,7 +103,7 @@ X-Forwarded-Scheme: http
|
|||
```
|
||||
### Explorando com cabeçalho `Vary` limitado
|
||||
|
||||
Se você descobrir que o cabeçalho **`X-Host`** está sendo usado como **nome de domínio para carregar um recurso JS** mas o cabeçalho **`Vary`** na resposta está indicando **`User-Agent`**. Então, você precisa encontrar uma maneira de exfiltrar o User-Agent da vítima e envenenar o cache usando esse user agent:
|
||||
Se você descobrir que o cabeçalho **`X-Host`** está sendo usado como **nome de domínio para carregar um recurso JS**, mas o cabeçalho **`Vary`** na resposta está indicando **`User-Agent`**. Então, você precisa encontrar uma maneira de exfiltrar o User-Agent da vítima e envenenar o cache usando esse user agent:
|
||||
```markup
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerbale.net
|
||||
|
@ -130,11 +132,11 @@ Acesse hoje mesmo:
|
|||
|
||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||
|
||||
O ATS encaminhou o fragmento dentro da URL sem removê-lo e gerou a chave de cache apenas usando o host, caminho e consulta (ignorando o fragmento). Assim, a requisição `/#/../?r=javascript:alert(1)` foi enviada para o backend como `/#/../?r=javascript:alert(1)` e a chave de cache não continha o payload dentro dela, apenas o host, caminho e consulta.
|
||||
O ATS encaminhou o fragmento dentro da URL sem removê-lo e gerou a chave de cache apenas usando o host, caminho e consulta (ignorando o fragmento). Assim, a requisição `/#/../?r=javascript:alert(1)` foi enviada para o backend como `/#/../?r=javascript:alert(1)` e a chave de cache não continha o payload dentro dela, apenas host, caminho e consulta.
|
||||
|
||||
### GitHub CP-DoS
|
||||
|
||||
Enviar um valor incorreto no cabeçalho content-type desencadeou uma resposta em cache 405. A chave de cache continha o cookie, então era possível atacar apenas usuários não autenticados.
|
||||
Enviar um valor inválido no cabeçalho content-type desencadeou uma resposta em cache 405. A chave de cache continha o cookie, então era possível atacar apenas usuários não autenticados.
|
||||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
|
@ -146,9 +148,9 @@ Em aplicações Ruby on Rails, o middleware Rack é frequentemente utilizado. O
|
|||
|
||||
### 403 e Buckets de Armazenamento
|
||||
|
||||
Anteriormente, o Cloudflare armazenava em cache respostas 403. Tentar acessar S3 ou Azure Storage Blobs com cabeçalhos de Autorização incorretos resultaria em uma resposta 403 que era armazenada em cache. Embora o Cloudflare tenha parado de armazenar em cache respostas 403, esse comportamento ainda pode estar presente em outros serviços de proxy.
|
||||
O Cloudflare anteriormente armazenava em cache respostas 403. Tentar acessar S3 ou Azure Storage Blobs com cabeçalhos de Autorização incorretos resultaria em uma resposta 403 que era armazenada em cache. Embora o Cloudflare tenha parado de armazenar em cache respostas 403, esse comportamento ainda pode estar presente em outros serviços de proxy.
|
||||
|
||||
### Inserção de Parâmetros Chaveados
|
||||
### Injetando Parâmetros Chaveados
|
||||
|
||||
Os caches frequentemente incluem parâmetros GET específicos na chave de cache. Por exemplo, o Varnish da Fastly armazenava o parâmetro `size` nas requisições. No entanto, se uma versão codificada em URL do parâmetro (por exemplo, `siz%65`) também fosse enviada com um valor incorreto, a chave de cache seria construída usando o parâmetro `size` correto. No entanto, o backend processaria o valor no parâmetro codificado em URL. Codificar em URL o segundo parâmetro `size` levava à sua omissão pelo cache, mas sua utilização pelo backend. Atribuir um valor de 0 a esse parâmetro resultava em um erro 400 Bad Request cacheável.
|
||||
|
||||
|
@ -158,7 +160,7 @@ Alguns desenvolvedores bloqueiam requisições com agentes de usuário que corre
|
|||
|
||||
### Campos de Cabeçalho Ilegais
|
||||
|
||||
O [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica os caracteres aceitáveis em nomes de cabeçalho. Cabeçalhos contendo caracteres fora do intervalo **tchar** especificado idealmente deveriam acionar uma resposta 400 Bad Request. Na prática, os servidores nem sempre seguem esse padrão. Um exemplo notável é a Akamai, que encaminha cabeçalhos com caracteres inválidos e armazena qualquer erro 400, desde que o cabeçalho `cache-control` não esteja presente. Foi identificado um padrão explorável onde o envio de um cabeçalho com um caractere ilegal, como `\`, resultaria em um erro 400 Bad Request cacheável.
|
||||
O [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica os caracteres aceitáveis em nomes de cabeçalho. Cabeçalhos contendo caracteres fora do intervalo **tchar** especificado idealmente deveriam desencadear uma resposta 400 Bad Request. Na prática, os servidores nem sempre seguem esse padrão. Um exemplo notável é o Akamai, que encaminha cabeçalhos com caracteres inválidos e armazena qualquer erro 400, desde que o cabeçalho `cache-control` não esteja presente. Foi identificado um padrão explorável onde o envio de um cabeçalho com um caractere ilegal, como `\`, resultaria em um erro 400 Bad Request cacheável.
|
||||
|
||||
### Encontrando novos cabeçalhos
|
||||
|
||||
|
@ -179,7 +181,7 @@ Outras coisas para testar:
|
|||
* _www.example.com/profile.php/%2e%2e/test.js_
|
||||
* _Use extensões menos conhecidas como_ `.avif`
|
||||
|
||||
Outro exemplo muito claro pode ser encontrado neste relatório: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
Um exemplo muito claro pode ser encontrado neste relatório: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
No exemplo, é explicado que se você carregar uma página inexistente como _http://www.example.com/home.php/non-existent.css_, o conteúdo de _http://www.example.com/home.php_ (**com as informações sensíveis do usuário**) será retornado e o servidor de cache vai salvar o resultado.\
|
||||
Então, o **atacante** pode acessar _http://www.example.com/home.php/non-existent.css_ em seu próprio navegador e observar as **informações confidenciais** dos usuários que acessaram antes.
|
||||
|
||||
|
@ -205,15 +207,14 @@ Acesse hoje mesmo:
|
|||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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 formas de apoiar o HackTricks:
|
||||
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)!
|
||||
* 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 [**The PEASS Family**](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 repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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>
|
||||
|
|
Loading…
Reference in a new issue