mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-23 19:43:31 +00:00
190 lines
13 KiB
Markdown
190 lines
13 KiB
Markdown
# Cabeçalhos HTTP Especiais
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* 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)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
## Listas de palavras e ferramentas
|
|
|
|
* [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
|
|
|
|
Reescrever o **IP de origem**:
|
|
|
|
* `X-Originating-IP: 127.0.0.1`
|
|
* `X-Forwarded-For: 127.0.0.1`
|
|
* `X-Forwarded: 127.0.0.1`
|
|
* `Forwarded-For: 127.0.0.1`
|
|
* `X-Forwarded-Host: 127.0.0.1`
|
|
* `X-Remote-IP: 127.0.0.1`
|
|
* `X-Remote-Addr: 127.0.0.1`
|
|
* `X-ProxyUser-Ip: 127.0.0.1`
|
|
* `X-Original-URL: 127.0.0.1`
|
|
* `Client-IP: 127.0.0.1`
|
|
* `X-Client-IP: 127.0.0.1`
|
|
* `X-Host: 127.0.0.1`
|
|
* `True-Client-IP: 127.0.0.1`
|
|
* `Cluster-Client-IP: 127.0.0.1`
|
|
* `X-ProxyUser-Ip: 127.0.0.1`
|
|
* `Via: 1.0 fred, 1.1 127.0.0.1`
|
|
* `Connection: close, X-Forwarded-For` (Verifique os cabeçalhos hop-by-hop)
|
|
|
|
Reescrever a **localização**:
|
|
|
|
* `X-Original-URL: /admin/console`
|
|
* `X-Rewrite-URL: /admin/console`
|
|
|
|
## 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 vez de um cabeçalho end-to-end.
|
|
|
|
* `Connection: close, X-Forwarded-For`
|
|
|
|
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %}
|
|
[abusing-hop-by-hop-headers.md](../../pentesting-web/abusing-hop-by-hop-headers.md)
|
|
{% endcontent-ref %}
|
|
|
|
## HTTP Request Smuggling
|
|
|
|
* `Content-Length: 30`
|
|
* `Transfer-Encoding: chunked`
|
|
|
|
{% content-ref url="../../pentesting-web/http-request-smuggling/" %}
|
|
[http-request-smuggling](../../pentesting-web/http-request-smuggling/)
|
|
{% endcontent-ref %}
|
|
|
|
## Cabeçalhos de cache
|
|
|
|
**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
|
|
* **`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 os tempos em segundos que o objeto esteve no cache do proxy.
|
|
* **`Server-Timing: cdn-cache; desc=HIT`** também indica que um recurso foi armazenado em cache
|
|
|
|
{% content-ref url="../../pentesting-web/cache-deception.md" %}
|
|
[cache-deception.md](../../pentesting-web/cache-deception.md)
|
|
{% endcontent-ref %}
|
|
|
|
**Cabeçalhos de cache local**:
|
|
|
|
* `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
|
|
```http
|
|
Content-Security-Policy: require-trusted-types-for 'script'
|
|
```
|
|
|
|
```javascript
|
|
// Feature detection
|
|
if (window.trustedTypes && trustedTypes.createPolicy) {
|
|
// Name and create a policy
|
|
const policy = trustedTypes.createPolicy('escapePolicy', {
|
|
createHTML: str => {
|
|
return str.replace(/\</g, '<').replace(/>/g, '>');
|
|
}
|
|
});
|
|
}
|
|
```
|
|
|
|
```javascript
|
|
// Assignment of raw strings is blocked by Trusted Types.
|
|
el.innerHTML = 'some string'; // This throws an exception.
|
|
|
|
// Assignment of Trusted Types is accepted safely.
|
|
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
|
|
el.innerHTML = escaped; // '<img src=x onerror=alert(1)>'
|
|
```
|
|
### X-Content-Type-Options <a href="#xcto" id="xcto"></a>
|
|
|
|
Quando um documento HTML malicioso é servido a partir do seu domínio (por exemplo, se uma imagem enviada para um serviço de fotos contém marcação HTML válida), alguns navegadores o tratam como um documento ativo e permitem que ele execute scripts no contexto do aplicativo, levando a um [bug de cross-site scripting](https://www.google.com/about/appsecurity/learning/xss/).
|
|
|
|
`X-Content-Type-Options: nosniff` impede isso, instruindo o navegador de que o [tipo MIME](https://mimesniff.spec.whatwg.org/#introduction) definido no cabeçalho `Content-Type` para uma determinada resposta está correto. Este cabeçalho é recomendado para **todos os seus recursos**.
|
|
```http
|
|
X-Content-Type-Options: nosniff
|
|
```
|
|
### X-Frame-Options <a href="#xfo" id="xfo"></a>
|
|
|
|
Se um site malicioso pode incorporar seu site como um iframe, isso pode permitir que invasores invoquem ações não intencionais pelo usuário com [clickjacking](https://portswigger.net/web-security/clickjacking). Além disso, em alguns casos, ataques do tipo [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) dão a sites maliciosos a chance de aprender sobre o conteúdo de um documento incorporado.
|
|
|
|
`X-Frame-Options` indica se um navegador deve ou não ser permitido a renderizar uma página em um `<frame>`, `<iframe>`, `<embed>` ou `<object>`. **Todos os documentos** são recomendados a enviar este cabeçalho para indicar se permitem ser incorporados por outros documentos.
|
|
|
|
Se você precisar de um controle mais granular, como permitir apenas uma origem específica para incorporar o documento, use a diretiva [frame-ancestors](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) do [CSP](https://web.dev/security-headers/#csp).
|
|
```http
|
|
X-Frame-Options: DENY
|
|
```
|
|
### Política de Recursos de Origem Cruzada (CORP) <a href="#corp" id="corp"></a>
|
|
|
|
Um atacante pode incorporar recursos de outra origem, por exemplo, do seu site, para aprender informações sobre eles, explorando vazamentos entre sites.
|
|
|
|
`Cross-Origin-Resource-Policy` mitiga esse risco indicando o conjunto de sites em que pode ser carregado. O cabeçalho pode ter um dos três valores: `same-origin`, `same-site` e `cross-origin`. **Todos os recursos** são recomendados a enviar esse cabeçalho para indicar se permitem ser carregados por outros sites.
|
|
```
|
|
Cross-Origin-Resource-Policy: same-origin
|
|
```
|
|
### Política de Recursos de Origem Cruzada (CORB) <a href="#corp" id="corp"></a>
|
|
|
|
Ajuda a mitigar a ameaça de ataques de canal lateral (incluindo Spectre). É projetado para impedir que o navegador **entregue determinadas respostas de rede de origem cruzada para uma página da web**, quando elas podem conter informações confidenciais e **não são necessárias para recursos da web existentes**.\
|
|
Da mesma forma, também ajuda a mitigar vulnerabilidades de Inclusão de Script de Origem Cruzada (XSSI).\
|
|
Por exemplo, ele bloqueará uma resposta de texto/html de origem cruzada solicitada de uma tag \<script> ou \<img>, substituindo-a por uma resposta vazia. Esta é uma parte importante das proteções incluídas com [Isolamento de Site](https://www.chromium.org/Home/chromium-security/site-isolation).
|
|
|
|
### Política de Abertura de Origem Cruzada (COOP) <a href="#coop" id="coop"></a>
|
|
|
|
O site de um invasor pode abrir outro site em uma janela pop-up para aprender informações sobre ele, explorando [vazamentos de origem cruzada baseados na web](https://xsleaks.dev). Em alguns casos, isso também pode permitir a exploração de ataques de canal lateral baseados em [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)).
|
|
|
|
O cabeçalho `Cross-Origin-Opener-Policy` fornece uma maneira para um documento se isolar de janelas de origem cruzada abertas por meio de `window.open()` ou um link com `target="_blank"` sem `rel="noopener"`. Como resultado, qualquer abertura de origem cruzada do documento não terá referência a ele e não poderá interagir com ele.
|
|
```http
|
|
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
|
```
|
|
### Compartilhamento de Recursos de Origem Cruzada (CORS) <a href="#cors" id="cors"></a>
|
|
|
|
Ao contrário de outros itens deste artigo, o Compartilhamento de Recursos de Origem Cruzada (CORS) não é um cabeçalho, mas um mecanismo do navegador que solicita e permite o acesso a recursos de origem cruzada.
|
|
|
|
Por padrão, os navegadores aplicam [a política de mesma origem](https://web.dev/same-origin-policy/) para impedir que uma página da web acesse recursos de origem cruzada. Por exemplo, quando uma imagem de origem cruzada é carregada, mesmo que seja exibida visualmente na página da web, o JavaScript na página não tem acesso aos dados da imagem. O provedor de recursos pode relaxar as restrições e permitir que outros sites leiam o recurso optando pelo CORS.
|
|
```http
|
|
Access-Control-Allow-Origin: https://example.com
|
|
Access-Control-Allow-Credentials: true
|
|
```
|
|
### Política de Incorporação de Origem Cruzada (COEP) <a href="#coep" id="coep"></a>
|
|
|
|
Para reduzir a capacidade de ataques baseados em [Spectre](https://en.wikipedia.org/wiki/Spectre\_\(security\_vulnerability\)) de roubar recursos de origem cruzada, recursos como `SharedArrayBuffer` ou `performance.measureUserAgentSpecificMemory()` são desativados por padrão.
|
|
|
|
`Cross-Origin-Embedder-Policy: require-corp` impede que documentos e workers carreguem recursos de origem cruzada, como imagens, scripts, folhas de estilo, iframes e outros, a menos que esses recursos optem explicitamente por serem carregados por meio de cabeçalhos [CORS](https://web.dev/security-headers/#cors) ou [CORP](https://web.dev/security-headers/#corp). COEP pode ser combinado com `Cross-Origin-Opener-Policy` para optar um documento pelo isolamento de origem cruzada.
|
|
|
|
Use `Cross-Origin-Embedder-Policy: require-corp` quando quiser habilitar o [isolamento de origem cruzada](https://web.dev/coop-coep/) para o seu documento.
|
|
```http
|
|
Cross-Origin-Embedder-Policy: require-corp
|
|
```
|
|
### HTTP Strict Transport Security (HSTS) <a href="#hsts" id="hsts"></a>
|
|
|
|
A comunicação por meio de uma conexão HTTP simples não é criptografada, tornando os dados transferidos acessíveis a espiões de rede.
|
|
|
|
O cabeçalho `Strict-Transport-Security` informa ao navegador que ele nunca deve carregar o site usando HTTP e, em vez disso, usar HTTPS. Uma vez definido, o navegador usará HTTPS em vez de HTTP para acessar o domínio sem um redirecionamento por um período definido no cabeçalho.
|
|
```http
|
|
Strict-Transport-Security: max-age=3153600
|
|
```
|
|
## Recursos
|
|
|
|
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
|
|
* [https://web.dev/security-headers/](https://web.dev/security-headers/)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* 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)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|