<summary><strong>Aprenda hacking AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* 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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de recompensas por bugs!
**Cross-Site Request Forgery (CSRF)** é um tipo de vulnerabilidade de segurança encontrada em aplicações web. Ele permite que atacantes realizem ações em nome de usuários desavisados, explorando suas sessões autenticadas. O ataque é executado quando um usuário, que está logado na plataforma de uma vítima, visita um site malicioso. Este site então aciona solicitações na conta da vítima por meio de métodos como execução de JavaScript, envio de formulários ou busca de imagens.
1.**Identificar uma Ação Valiosa**: O atacante precisa encontrar uma ação que valha a pena explorar, como alterar a senha do usuário, e-mail ou elevar privilégios.
2.**Gerenciamento de Sessão**: A sessão do usuário deve ser gerenciada exclusivamente por meio de cookies ou do cabeçalho de Autenticação Básica HTTP, pois outros cabeçalhos não podem ser manipulados para esse fim.
Você pode **capturar a solicitação no Burp** e verificar as proteções CSRF e para testar a partir do navegador você pode clicar em **Copiar como fetch** e verificar a solicitação:
* [**Cookies SameSite**](hacking-with-cookies/#samesite): Este atributo impede o navegador de enviar cookies junto com solicitações entre sites. [Mais sobre Cookies SameSite](hacking-with-cookies/#samesite).
* [**Compartilhamento de Recursos entre Origens**](cors-bypass.md): A política CORS do site da vítima pode influenciar a viabilidade do ataque, especialmente se o ataque requer a leitura da resposta do site da vítima. [Saiba mais sobre a bypass de CORS](cors-bypass.md).
* **Verificação do Usuário**: Solicitar a senha do usuário ou resolver um captcha pode confirmar a intenção do usuário.
* **Verificação de Cabeçalhos Referrer ou Origin**: Validar esses cabeçalhos pode ajudar a garantir que as solicitações venham de fontes confiáveis. No entanto, a elaboração cuidadosa de URLs pode contornar verificações mal implementadas, como:
* **Modificar Nomes de Parâmetros**: Alterar os nomes de parâmetros em solicitações POST ou GET pode ajudar a prevenir ataques automatizados.
* **Tokens CSRF**: Incorporar um token CSRF único em cada sessão e exigir este token em solicitações subsequentes pode mitigar significativamente o risco de CSRF. A eficácia do token pode ser aprimorada ao aplicar CORS.
Talvez o formulário que você deseja abusar esteja preparado para enviar uma **solicitação POST com um token CSRF, mas**, você deve **verificar** se um **GET** também é **válido** e se, ao enviar uma solicitação GET, o **token CSRF ainda está sendo validado**.
Aplicações podem implementar um mecanismo para **validar tokens** quando estão presentes. No entanto, surge uma vulnerabilidade se a validação for ignorada completamente quando o token estiver ausente. Os atacantes podem explorar isso **removendo o parâmetro** que carrega o token, não apenas seu valor. Isso permite que eles contornem o processo de validação e realizem um ataque de Cross-Site Request Forgery (CSRF) de forma eficaz.
Aplicações que **não vinculam tokens CSRF às sessões de usuário** apresentam um risco significativo à segurança. Esses sistemas verificam tokens em um **pool global** em vez de garantir que cada token esteja vinculado à sessão iniciadora.
Essa vulnerabilidade permite que os atacantes façam solicitações não autorizadas em nome da vítima, explorando o mecanismo de validação de token inadequado da aplicação.
Se a solicitação estiver usando um **"método estranho"**, verifique se a funcionalidade de **substituição de método** está funcionando. Por exemplo, se estiver **usando um método PUT**, você pode tentar **usar um método POST** e **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
Aplicações podem implementar proteção CSRF duplicando o token em um cookie e em um parâmetro de solicitação ou configurando um cookie CSRF e verificando se o token enviado no backend corresponde ao cookie. A aplicação valida solicitações verificando se o token no parâmetro de solicitação corresponde ao valor no cookie.
No entanto, esse método é vulnerável a ataques CSRF se o site tiver falhas que permitam a um atacante definir um cookie CSRF no navegador da vítima, como uma vulnerabilidade CRLF. O atacante pode explorar isso carregando uma imagem enganosa que define o cookie, seguido pela iniciativa do ataque CSRF.
Note que se o **token csrf estiver relacionado ao cookie de sessão, esse ataque não funcionará** porque você precisará definir a sessão da vítima, e portanto estará atacando a si mesmo.
De acordo com [**este**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar solicitações de pré-voo** usando o método **POST**, estes são os valores de Content-Type permitidos:
No entanto, observe que a **lógica dos servidores pode variar** dependendo do **Content-Type** usado, então você deve tentar os valores mencionados e outros como **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
### Bypassando Solicitações de Preflight para Dados JSON
Ao tentar enviar dados JSON via uma solicitação POST, usar o `Content-Type: application/json` em um formulário HTML não é diretamente possível. Da mesma forma, utilizar `XMLHttpRequest` para enviar esse tipo de conteúdo inicia uma solicitação de preflight. No entanto, existem estratégias para potencialmente contornar essa limitação e verificar se o servidor processa os dados JSON independentemente do Content-Type:
1.**Usar Tipos de Conteúdo Alternativos**: Utilize `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` no formulário. Esta abordagem testa se o backend utiliza os dados independentemente do Content-Type.
2.**Modificar o Tipo de Conteúdo**: Para evitar uma solicitação de preflight enquanto garante que o servidor reconheça o conteúdo como JSON, você pode enviar os dados com `Content-Type: text/plain; application/json`. Isso não aciona uma solicitação de preflight, mas pode ser processado corretamente pelo servidor se estiver configurado para aceitar `application/json`.
3.**Utilização de Arquivo Flash SWF**: Um método menos comum, mas viável, envolve o uso de um arquivo flash SWF para contornar tais restrições. Para uma compreensão mais aprofundada dessa técnica, consulte [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
Aplicações podem validar o cabeçalho 'Referer' apenas quando ele está presente. Para evitar que um navegador envie este cabeçalho, a seguinte tag meta HTML pode ser usada:
A primeira parte [**deste writeup CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explica que [o código-fonte do Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), um roteador é configurado para **lidar com solicitações HEAD como solicitações GET** sem corpo de resposta - uma solução comum que não é exclusiva do Oak. Em vez de um manipulador específico que lida com solicitações HEAD, elas são simplesmente **enviadas para o manipulador GET, mas o aplicativo apenas remove o corpo da resposta**.
Portanto, se uma solicitação GET estiver sendo limitada, você poderia simplesmente **enviar uma solicitação HEAD que será processada como uma solicitação GET**.
Se um **token CSRF** estiver sendo usado como **defesa**, você poderia tentar **exfiltrá-lo** abusando de uma vulnerabilidade [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) ou uma vulnerabilidade [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
xh.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //to send proper header info (optional, but good to have as it may sometimes not work without this)
O código pode ser usado para Brut Force em um formulário de login usando um token CSRF (também está usando o cabeçalho X-Forwarded-For para tentar contornar um possível bloqueio de IP):
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* 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)!
* 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).