mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
Translated ['pentesting-web/hacking-with-cookies/README.md'] to pt
This commit is contained in:
parent
aaf0450473
commit
b5f8c11c0e
1 changed files with 95 additions and 95 deletions
|
@ -1,39 +1,39 @@
|
|||
# Hacking de Cookies
|
||||
# Cookies Hacking
|
||||
|
||||
<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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo 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 para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Trabalha numa **empresa de cibersegurança**? Quer ver a sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* Adquira o [**material oficial 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** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
Encontre vulnerabilidades que importam mais para que você possa corrigi-las mais rapidamente. Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
***
|
||||
|
||||
## Atributos de Cookies
|
||||
## Atributos dos Cookies
|
||||
|
||||
### Expires & Max-Age
|
||||
|
||||
* `Expires` define uma data de expiração para quando um cookie será excluído
|
||||
* `Max-age` define o tempo em segundos para quando um cookie será excluído **(use isso, não é mais 2009)**
|
||||
* `Expires` define uma data de expiração para quando um cookie é deletado
|
||||
* `Max-age` define o tempo em segundos para quando um cookie será deletado **(use isso, já não estamos em 2009)**
|
||||
|
||||
### **Domain**
|
||||
|
||||
O atributo `Domain` especifica **quais hosts podem receber um cookie**. Se não especificado, o atributo **padrão** é o **mesmo host** que definiu o cookie, _**excluindo subdomínios**_. **Se `Domain` for especificado**, então **os subdomínios são sempre incluídos**. Portanto, especificar `Domain` é menos restritivo do que omiti-lo. No entanto, pode ser útil quando os subdomínios precisam compartilhar informações sobre um usuário.
|
||||
O atributo `Domain` especifica **quais hosts podem receber um cookie**. Se não especificado, o atributo **assume por padrão** o **mesmo host** que definiu o cookie, _**excluindo subdomínios**_. **Se `Domain` for** **especificado**, então **subdomínios são sempre incluídos**. Portanto, especificar `Domain` é menos restritivo do que omiti-lo. No entanto, pode ser útil quando subdomínios precisam compartilhar informações sobre um usuário.
|
||||
|
||||
Por exemplo, se você definir `Domain=mozilla.org`, os cookies estarão disponíveis em subdomínios como `developer.mozilla.org`. Mas se você não definir, o cookie não será enviado para subdomínios.
|
||||
Por exemplo, se você definir `Domain=mozilla.org`, cookies estarão disponíveis em subdomínios como `developer.mozilla.org`. Mas se você não definir, o cookie não será enviado para subdomínios.
|
||||
|
||||
Se um **subdomínio** `sub.example.com` **definir um cookie** com o atributo _domain_ de **`.example.com`**, ele será **enviado** em solicitações para o **domínio pai**.
|
||||
Se um **subdomínio** `sub.example.com` **definir um cookie** com o atributo _domain_ de **`.example.com`**, ele será **enviado** em solicitações para o **domínio pai.**
|
||||
|
||||
### **Path**
|
||||
|
||||
|
@ -41,115 +41,115 @@ O atributo `Path` indica um **caminho de URL que deve existir na URL solicitada
|
|||
|
||||
#### Ordem
|
||||
|
||||
Quando 2 cookies têm o **mesmo nome**, aquele que é enviado é:
|
||||
Quando 2 cookies têm o **mesmo nome**, o que é enviado é:
|
||||
|
||||
* Aquele com o **caminho mais longo** que corresponde ao caminho da URL
|
||||
* O mais **recente** se ambos tiverem o mesmo caminho
|
||||
* Aquele com o **caminho mais longo** correspondente ao caminho da URL
|
||||
* O **mais novo** se ambos tiverem o mesmo caminho
|
||||
|
||||
### SameSite
|
||||
|
||||
Isso indicará ao navegador se o **cookie** pode ser enviado **de outros domínios**. Ele tem 3 valores possíveis:
|
||||
Isso indicará ao navegador se o **cookie** pode ser enviado **de outros domínios**. Tem 3 valores possíveis:
|
||||
|
||||
* **Strict**: O cookie não será enviado junto com uma solicitação por sites de terceiros.
|
||||
* **Lax**: O cookie será enviado junto com a solicitação GET iniciada por sites de terceiros.
|
||||
* **None**: O cookie é enviado de qualquer domínio de terceiros
|
||||
|
||||
| **Tipo de Solicitação** | **Exemplo de Código** | **Cookies Enviados Quando** |
|
||||
| ---------------------- | ---------------------------------- | --------------------------- |
|
||||
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||
| Formulário GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
||||
| Formulário POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||
| AJAX | $.get("...") | NotSet\*, None |
|
||||
| Imagem | \<img src="..."> | NetSet\*, None |
|
||||
| **Tipo de Solicitação** | **Código de Exemplo** | **Cookies Enviados Quando** |
|
||||
| ----------------------- | --------------------------------------- | --------------------------- |
|
||||
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||
| Form GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
||||
| Form POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||
| AJAX | $.get("...") | NotSet\*, None |
|
||||
| Imagem | \<img src="..."> | NetSet\*, None |
|
||||
|
||||
Tabela de [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) e ligeiramente modificada.\
|
||||
Um cookie com o atributo _**SameSite**_ irá **mitigar ataques CSRF** onde uma sessão logada é necessária.
|
||||
Um cookie com o atributo _**SameSite**_ **mitigará ataques CSRF** onde uma sessão logada é necessária.
|
||||
|
||||
**\*Observe que a partir do Chrome80 (fev/2019), o comportamento padrão de um cookie sem um atributo samesite** **será lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Observe que temporariamente, após aplicar essa alteração, os **cookies sem uma política SameSite** no Chrome serão **tratados como None** durante os **primeiros 2 minutos e depois como Lax para solicitações POST entre sites de alto nível**.
|
||||
**\*Observe que a partir do Chrome80 (fev/2019) o comportamento padrão de um cookie sem um atributo samesite** **será lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Note que temporariamente, após aplicar essa mudança, os **cookies sem uma política SameSite** no Chrome serão **tratados como None** durante os **primeiros 2 minutos e depois como Lax para solicitações POST de nível superior entre sites.**
|
||||
## Flags de Cookies
|
||||
|
||||
### HttpOnly
|
||||
|
||||
Isso impede que o **cliente** acesse o cookie (por exemplo, via **Javascript**: `document.cookie`)
|
||||
Isso impede que o **cliente** acesse o cookie (Via **Javascript**, por exemplo: `document.cookie`)
|
||||
|
||||
#### **Bypasses**
|
||||
|
||||
* Se a página estiver **enviando os cookies como resposta** de uma solicitação (por exemplo, em uma página **PHPinfo**), é possível abusar do XSS para enviar uma solicitação para essa página e **roubar os cookies** da resposta (verifique um exemplo em [https://hackcommander.github.io/pentesting-article-1/)](https://hackcommander.github.io/pentesting-article-1/)
|
||||
* Isso pode ser burlado com solicitações **TRACE** **HTTP** como resposta do servidor (se esse método HTTP estiver disponível), os cookies enviados serão refletidos. Essa técnica é chamada de **Cross-Site Tracking**.
|
||||
* Essa técnica é evitada por **navegadores modernos que não permitem o envio de uma solicitação TRACE** a partir do JS. No entanto, foram encontradas algumas formas de burlar isso em software específico, como enviar `\r\nTRACE` em vez de `TRACE` para o IE6.0 SP2.
|
||||
* Outra forma é a exploração de vulnerabilidades zero/dia dos navegadores.
|
||||
* É possível **sobrescrever cookies HttpOnly** realizando um ataque de overflow do Cookie Jar:
|
||||
* Se a página está **enviando os cookies como resposta** de uma solicitação (por exemplo, em uma página **PHPinfo**), é possível abusar do XSS para enviar uma solicitação a esta página e **roubar os cookies** da resposta (confira um exemplo em [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Isso pode ser contornado com solicitações **TRACE** **HTTP** já que a resposta do servidor (se este método HTTP estiver disponível) refletirá os cookies enviados. Esta técnica é chamada de **Cross-Site Tracking**.
|
||||
* Esta técnica é evitada por **navegadores modernos por não permitirem o envio de uma solicitação TRACE** a partir do JS. No entanto, alguns bypasses foram encontrados em softwares específicos, como enviar `\r\nTRACE` em vez de `TRACE` para o IE6.0 SP2.
|
||||
* Outra forma é a exploração de vulnerabilidades zero/day dos navegadores.
|
||||
* É possível **sobrescrever cookies HttpOnly** realizando um ataque de estouro de Cookie Jar:
|
||||
|
||||
{% content-ref url="cookie-jar-overflow.md" %}
|
||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* É possível usar o ataque de [**Cookie Smuggling**](./#cookie-smuggling) para extrair esses cookies
|
||||
* É possível usar o ataque de [**Cookie Smuggling**](./#cookie-smuggling) para exfiltrar esses cookies
|
||||
|
||||
### Secure
|
||||
|
||||
A solicitação enviará o cookie **apenas** em uma solicitação HTTP se a solicitação for transmitida por um canal seguro (geralmente **HTTPS**).
|
||||
O pedido irá **apenas** enviar o cookie em uma solicitação HTTP se o pedido for transmitido por um canal seguro (tipicamente **HTTPS**).
|
||||
|
||||
## Prefixos de Cookies
|
||||
|
||||
Prefixo **`__Secure-`**: deve ser definido com a flag `secure` de uma página segura (HTTPS).
|
||||
**Prefixo `__Secure-`**: deve ser definido com a flag `secure` de uma página segura (HTTPS).
|
||||
|
||||
Prefixo **`__Host-`**: deve ser definido com a flag `secure`, deve ser de uma página segura (HTTPS), não deve ter um domínio especificado (e, portanto, não é enviado para subdomínios) e o caminho deve ser `/`.
|
||||
**Prefixo `__Host-`**: deve ser definido com a flag `secure`, deve ser de uma página segura (HTTPS), não deve ter um domínio especificado (e, portanto, não são enviados para subdomínios), e o caminho deve ser `/`.
|
||||
|
||||
Cookies com prefixo `__Host-` não podem ser enviados para superdomínios (cookies de subdomínios para domínios) ou subdomínios (cookies de domínios para subdomínios), então, se você deseja isolar os cookies de sua aplicação, prefixar tudo com `__Host-` não é uma má ideia.
|
||||
Cookies com prefixo `__Host-` não podem ser enviados para superdomínios (cookies de subdomínios para domínios) ou subdomínios (cookies de domínios para subdomínios), então, se você quiser isolar os cookies da sua aplicação, prefixar tudo com `__Host-` não é uma má ideia.
|
||||
|
||||
## Ataques a Cookies
|
||||
## Ataques com Cookies
|
||||
|
||||
Se você encontrar algum tipo de cookie personalizado contendo dados sensíveis (sessionID, nome de usuário, e-mails, etc.), definitivamente deve tentar explorá-lo.
|
||||
Se você encontrar algum tipo de cookie personalizado contendo dados sensíveis (sessionID, nome de usuário, emails, etc.), você definitivamente deve tentar explorá-lo
|
||||
|
||||
### Decodificando o cookie
|
||||
|
||||
Se o **cookie** estiver usando alguma **codificação base** (como Base64) ou similar, você pode ser capaz de **decodificá-lo**, **alterar** o **conteúdo** e **se passar** por usuários arbitrários.
|
||||
Se o **cookie** estiver usando algum **Base encoding** (como Base64) ou similar, você pode ser capaz de **decodificá-lo**, **alterar** o **conteúdo** e **impersonar** usuários arbitrários.
|
||||
|
||||
### Sequestro de sessão
|
||||
### Session Hijacking
|
||||
|
||||
Roubar um cookie e usá-lo para se passar pelo usuário dentro de um aplicativo.
|
||||
Roubar um cookie e usá-lo para se passar pelo usuário dentro de uma aplicação
|
||||
|
||||
### Fixação de sessão
|
||||
### Session fixation
|
||||
|
||||
O atacante obtém um cookie de uma página da web e envia um link para a vítima **fazer login usando o mesmo cookie**. Se o cookie não for alterado quando um usuário faz login, isso pode ser útil porque o atacante pode se passar pelo usuário por meio de um cookie.
|
||||
O atacante obtém um cookie de uma página da web e envia um link para a vítima para **fazer login usando o mesmo cookie**. Se o cookie não for alterado quando um usuário faz login, isso pode ser útil porque o atacante poderia ser capaz de se passar pelo usuário através de um cookie.
|
||||
|
||||
Se você encontrou um **XSS em um subdomínio** ou **controla um subdomínio**, leia:
|
||||
Se você encontrou um **XSS em um subdomínio** ou você **controla um subdomínio**, leia:
|
||||
|
||||
{% content-ref url="cookie-tossing.md" %}
|
||||
[cookie-tossing.md](cookie-tossing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Doação de sessão
|
||||
### Session donation
|
||||
|
||||
O atacante envia sua própria sessão para a vítima. A vítima verá que já está conectada e suporá que está dentro de sua conta, mas **as ações serão realizadas dentro da conta do atacante**.
|
||||
O atacante envia sua própria sessão para a vítima. A vítima verá que já está logada e suporá que está dentro de sua conta, mas **as ações serão realizadas dentro da conta do atacante**.
|
||||
|
||||
Se você encontrou um **XSS em um subdomínio** ou **controla um subdomínio**, leia:
|
||||
Se você encontrou um **XSS em um subdomínio** ou você **controla um subdomínio**, leia:
|
||||
|
||||
{% content-ref url="cookie-tossing.md" %}
|
||||
[cookie-tossing.md](cookie-tossing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### [Cookie JWT](../hacking-jwt-json-web-tokens.md)
|
||||
### [JWT Cookie](../hacking-jwt-json-web-tokens.md)
|
||||
|
||||
Clique no link anterior para acessar uma página explicando possíveis falhas no JWT.
|
||||
Clique no link anterior para acessar uma página explicando possíveis falhas em JWT.
|
||||
|
||||
### Cookie vazio
|
||||
### Cookie Vazio
|
||||
|
||||
Os navegadores permitem um cookie com um nome vazio.
|
||||
Navegadores permitem um cookie com um nome vazio
|
||||
```js
|
||||
document.cookie = "a=v1"
|
||||
document.cookie = "=test value;" // empty name
|
||||
document.cookie = "b=v2"
|
||||
```
|
||||
Isso resulta no cabeçalho do cookie enviado:
|
||||
Isso resulta no cabeçalho de cookie enviado:
|
||||
```
|
||||
a=v1; test value; b=v2;
|
||||
```
|
||||
Mais interessante ainda, se você tiver um vetor que de alguma forma permita **definir o cookie vazio**, você pode **controlar qualquer outro cookie**:
|
||||
Mais interessante ainda, se você tiver um vetor que de alguma forma permita que você **defina o cookie vazio**, você pode **controlar qualquer outro cookie**:
|
||||
```js
|
||||
function setCookie(name, value) {
|
||||
document.cookie = `${name}=${value}`;
|
||||
|
@ -157,15 +157,15 @@ document.cookie = `${name}=${value}`;
|
|||
|
||||
setCookie("", "a=b"); // this sets the empty cookie to a=b
|
||||
```
|
||||
Embora internamente no navegador, isso seja definido como o cookie sem nome vazio, resultará no **cabeçalho do cookie enviado:**
|
||||
Embora internamente no navegador, isso seja definido como o cookie de nome vazio, isso resultará no **cabeçalho do cookie enviado:**
|
||||
```
|
||||
a=b;
|
||||
```
|
||||
Significado, todo servidor web irá interpretá-lo como o cookie `a` sendo definido com o valor `b`.
|
||||
Significa que todo servidor web o interpretará como o cookie `a` sendo definido com o valor `b`.
|
||||
|
||||
### Bug do Chrome - corrupção do document.cookie <a href="#chrome-bugdocumentcookie-corruption" id="chrome-bugdocumentcookie-corruption"></a>
|
||||
### Bug do Chrome - corrupção de document.cookie <a href="#chrome-bugdocumentcookie-corruption" id="chrome-bugdocumentcookie-corruption"></a>
|
||||
|
||||
Se um ponto de código de substituto unicode estiver em um cookie definido, o `document.cookie` será permanentemente corrompido e retornará uma string vazia.
|
||||
Se um ponto de código substituto unicode estiver em um cookie definido, `document.cookie` será permanentemente corrompido e retornará uma string vazia.
|
||||
```js
|
||||
document.cookie
|
||||
// "a=b;"
|
||||
|
@ -175,21 +175,21 @@ document.cookie
|
|||
```
|
||||
### Contrabando de Cookies
|
||||
|
||||
Vários servidores da web, incluindo os servidores Java Jetty, TomCat, Undertow e o framework web Python Zope, bem como servidores/frameworks web Python como cherrypy, web.py, aiohttp server, bottle e webob, são encontrados para **interpretar incorretamente as strings de cookies** devido ao suporte remanescente para o RFC2965, um mecanismo de citação de cookies desatualizado que usa o RFC2616 para a definição de uma string entre aspas.
|
||||
Vários servidores web, incluindo servidores Java como Jetty, TomCat, Undertow, e o framework web Python Zope, bem como servidores/frameworks web Python como cherrypy, web.py, aiohttp server, bottle e webob, são encontrados com **análise incorreta de strings de cookies** devido ao suporte remanescente para RFC2965, um mecanismo de cotação de cookies desatualizado que utiliza RFC2616 para uma definição de string entre aspas.
|
||||
|
||||
Especificamente, **esses servidores continuam lendo uma string de cookie quando encontram um valor de cookie entre aspas duplas (dquoted), mesmo se um ponto e vírgula for encontrado**. Isso é problemático porque **pontos e vírgulas devem separar pares chave-valor** na string de cookie.
|
||||
|
||||
Por exemplo, se um **navegador enviar três cookies, RENDER\_TEXT, JSESSIONID** e **ASDF:**
|
||||
Por exemplo, se um **navegador envia três cookies, RENDER\_TEXT, JSESSIONID,** e **ASDF:**
|
||||
```basic
|
||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
```
|
||||
Esses servidores interpretam esses valores como parte de um **único valor de cookie** em vez de três cookies separados.
|
||||
esses servidores os interpretam como parte de um **valor único de cookie** em vez de três cookies separados.
|
||||
|
||||
Isso leva a um risco de segurança: se um invasor obtiver acesso de script entre sites (XSS), ele pode usar esse bug para **extrair cookies sensíveis, como cookies HttpOnly**.
|
||||
Isso leva a um risco de segurança: se um atacante obtiver acesso a cross-site scripting (XSS), ele pode usar esse bug para **exfiltrar cookies sensíveis como cookies HttpOnly**.
|
||||
|
||||
### Injeção de Cookie
|
||||
|
||||
Muitos servidores da web, incluindo o Undertow do Java, o Zope do Python e aqueles que usam http.cookie.SimpleCookie e http.cookie.BaseCookie da biblioteca padrão do Python, foram encontrados **analisando incorretamente os cookies, usando delimitadores errados para iniciar o próximo par de nome/valor do cookie**. Isso permite que um invasor **falsifique vários cookies enquanto controla apenas um valor de cookie**.
|
||||
Muitos servidores web, incluindo o Undertow do Java, o Zope do Python e aqueles que usam o http.cookie.SimpleCookie e o http.cookie.BaseCookie da stdlib do Python, foram encontrados **interpretando incorretamente os cookies, usando delimitadores errados para iniciar o próximo par nome/valor do cookie**. Isso permite que um atacante **simule múltiplos cookies enquanto controla apenas o valor de um cookie**.
|
||||
|
||||
No caso do **Undertow**, ele começa a analisar o próximo cookie imediatamente após o **final de um valor de cookie entre aspas**, sem esperar por um ponto e vírgula:
|
||||
```bash
|
||||
|
@ -199,37 +199,37 @@ LANGUAGE="en-us" CSRF_TOKEN="SPOOFED_VALUE"
|
|||
```bash
|
||||
LANGUAGE=en-us,CSRF_TOKEN=SPOOFED_VALUE
|
||||
```
|
||||
E **Python's SimpleCookie** e **BaseCookie** imediatamente começam a analisar o próximo cookie em um caractere **espaço**:
|
||||
E o **Python's SimpleCookie** e o **BaseCookie** começam imediatamente a analisar o próximo cookie em um caractere de **espaço**:
|
||||
```
|
||||
LANGUAGE=en-us CSRF_TOKEN=SPOOFED_VALUE
|
||||
```
|
||||
Como resultado, servidores como **cherrypy**, **web.py**, servidor **aiohttp**, **bottle** e **webob** (Pyramid, TurboGears) são todos vulneráveis a esse tipo de ataque.
|
||||
Como resultado, servidores como **cherrypy**, **web.py**, **aiohttp** server, **bottle** e **webob** (Pyramid, TurboGears) são todos vulneráveis a esse tipo de ataque.
|
||||
|
||||
Esse problema apresenta implicações significativas para a **segurança**. Por exemplo, se um aplicativo da web usa **proteção CSRF baseada em cookies**, um invasor pode **injetar** um cookie falsificado de **CSRF-token** para contornar essa proteção. Além disso, o último cookie com o mesmo nome nos pacotes http.cookie do Python substitui os anteriores, tornando esse tipo de ataque especialmente fácil.
|
||||
Essa questão apresenta significativas **implicações de segurança**. Por exemplo, se uma aplicação web usa **proteção CSRF baseada em cookie**, um atacante pode **injetar** um **cookie de token CSRF** falsificado para burlar essa proteção. Além disso, o último nome de cookie duplicado nos pacotes http.cookie do Python sobrescreve quaisquer anteriores, tornando esse tipo de ataque especialmente fácil.
|
||||
|
||||
Além disso, a **falsificação** dos cookies **`__Secure-`** e **`__Host-`** pode ser explorada em um contexto inseguro. Além disso, em uma configuração em que os cookies são passados para um servidor backend, a **injeção de cookies pode levar a bypasses de autorização** se o servidor backend for suscetível a falsificação, mas o servidor frontend não for.
|
||||
Além disso, o **spoofing** de cookies **`__Secure-`** e **`__Host-`** pode ser abusado em um contexto inseguro. Também, em uma configuração onde cookies são passados para um servidor backend, **injeção de cookie pode levar a bypasses de autorização** se o servidor backend for suscetível a spoofing, mas o servidor frontend não for.
|
||||
|
||||
### Verificações extras de cookies vulneráveis
|
||||
### Verificações Extras de Cookies Vulneráveis
|
||||
|
||||
#### **Verificações básicas**
|
||||
|
||||
* O **cookie** é o **mesmo** toda vez que você faz **login**.
|
||||
* Faça logout e tente usar o mesmo cookie.
|
||||
* Tente fazer login com 2 dispositivos (ou navegadores) na mesma conta usando o mesmo cookie.
|
||||
* Verifique se o cookie contém alguma informação e tente modificá-lo.
|
||||
* Verifique se o cookie tem alguma informação nele e tente modificá-lo.
|
||||
* Tente criar várias contas com nomes de usuário quase iguais e verifique se você pode ver semelhanças.
|
||||
* Verifique se a opção "**lembrar-me**" existe e veja como ela funciona. Se existir e puder ser vulnerável, sempre use o cookie de **lembrar-me** sem nenhum outro cookie.
|
||||
* Verifique se o cookie anterior continua funcionando mesmo depois de alterar a senha.
|
||||
* Verifique a opção "**lembrar de mim**" se ela existir para ver como funciona. Se existir e puder ser vulnerável, sempre use o cookie de **lembrar de mim** sem nenhum outro cookie.
|
||||
* Verifique se o cookie anterior funciona mesmo após você mudar a senha.
|
||||
|
||||
#### **Ataques avançados de cookies**
|
||||
#### **Ataques avançados com cookies**
|
||||
|
||||
Se o cookie permanecer o mesmo (ou quase o mesmo) quando você fizer login, isso provavelmente significa que o cookie está relacionado a algum campo da sua conta (provavelmente o nome de usuário). Então você pode:
|
||||
Se o cookie permanece o mesmo (ou quase) quando você faz login, isso provavelmente significa que o cookie está relacionado a algum campo da sua conta (provavelmente o nome de usuário). Então você pode:
|
||||
|
||||
* Tente criar muitas **contas** com nomes de usuário muito **semelhantes** e tente **adivinhar** como o algoritmo está funcionando.
|
||||
* Tente **forçar o nome de usuário**. Se o cookie salvar apenas como um método de autenticação para o seu nome de usuário, então você pode criar uma conta com o nome de usuário "**Bmin**" e **forçar** cada **bit** do seu cookie porque um dos cookies que você tentará será o pertencente ao "**admin**".
|
||||
* Tente o **Padding** **Oracle** (você pode descriptografar o conteúdo do cookie). Use o **padbuster**.
|
||||
* Tentar criar várias **contas** com nomes de usuário muito **semelhantes** e tentar **adivinhar** como o algoritmo está funcionando.
|
||||
* Tentar **força bruta no nome de usuário**. Se o cookie salva apenas como um método de autenticação para o seu nome de usuário, então você pode criar uma conta com o nome de usuário "**Bmin**" e **forçar a bruta** em cada **bit** do seu cookie porque um dos cookies que você tentar será o pertencente a "**admin**".
|
||||
* Tentar **Padding** **Oracle** (você pode descriptografar o conteúdo do cookie). Use **padbuster**.
|
||||
|
||||
**Padding Oracle - Exemplos do Padbuster**
|
||||
**Padding Oracle - Exemplos de Padbuster**
|
||||
```bash
|
||||
padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
|
||||
# When cookies and regular Base64
|
||||
|
@ -239,19 +239,19 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
|
|||
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
|
||||
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
|
||||
```
|
||||
O Padbuster fará várias tentativas e perguntará qual é a condição de erro (aquela que não é válida).
|
||||
Padbuster fará várias tentativas e perguntará qual condição é a condição de erro (aquela que não é válida).
|
||||
|
||||
Em seguida, ele começará a descriptografar o cookie (isso pode levar vários minutos).
|
||||
Em seguida, começará a descriptografar o cookie (pode levar vários minutos)
|
||||
|
||||
Se o ataque for bem-sucedido, você poderá tentar criptografar uma string de sua escolha. Por exemplo, se você quiser **criptografar** **user=administrador**.
|
||||
Se o ataque foi realizado com sucesso, então você poderia tentar criptografar uma string de sua escolha. Por exemplo, se você quisesse **criptografar** **user=administrator**
|
||||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
Essa execução fornecerá o cookie corretamente criptografado e codificado com a string **user=administrator** dentro.
|
||||
Esta execução fornecerá o cookie corretamente criptografado e codificado com a string **user=administrator** dentro.
|
||||
|
||||
**CBC-MAC**
|
||||
|
||||
Talvez um cookie possa ter algum valor e ser assinado usando CBC. Nesse caso, a integridade do valor é a assinatura criada usando CBC com o mesmo valor. Como é recomendado usar um vetor IV nulo, esse tipo de verificação de integridade pode ser vulnerável.
|
||||
Talvez um cookie possa ter algum valor e possa ser assinado usando CBC. Então, a integridade do valor é a assinatura criada usando CBC com o mesmo valor. Como é recomendado usar como IV um vetor nulo, esse tipo de verificação de integridade pode ser vulnerável.
|
||||
|
||||
**O ataque**
|
||||
|
||||
|
@ -261,16 +261,16 @@ Talvez um cookie possa ter algum valor e ser assinado usando CBC. Nesse caso, a
|
|||
|
||||
**ECB**
|
||||
|
||||
Se o cookie for criptografado usando ECB, ele pode ser vulnerável.\
|
||||
Se o cookie é criptografado usando ECB, ele pode ser vulnerável.\
|
||||
Quando você faz login, o cookie que você recebe deve ser sempre o mesmo.
|
||||
|
||||
**Como detectar e atacar:**
|
||||
|
||||
Crie 2 usuários com dados quase iguais (nome de usuário, senha, e-mail, etc.) e tente descobrir algum padrão dentro do cookie fornecido.
|
||||
Crie 2 usuários com dados quase idênticos (nome de usuário, senha, email, etc.) e tente descobrir algum padrão dentro do cookie fornecido
|
||||
|
||||
Crie um usuário chamado, por exemplo, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" e verifique se há algum padrão no cookie (como o ECB criptografa com a mesma chave em cada bloco, os mesmos bytes criptografados podem aparecer se o nome de usuário for criptografado).
|
||||
Crie um usuário chamado, por exemplo, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" e verifique se há algum padrão no cookie (como ECB criptografa com a mesma chave cada bloco, os mesmos bytes criptografados podem aparecer se o nome de usuário for criptografado).
|
||||
|
||||
Deve haver um padrão (com o tamanho de um bloco usado). Portanto, sabendo como um monte de "a" é criptografado, você pode criar um nome de usuário: "a"\*(tamanho do bloco)+"admin". Em seguida, você pode excluir o padrão criptografado de um bloco de "a" do cookie. E você terá o cookie do nome de usuário "admin".
|
||||
Deve haver um padrão (com o tamanho de um bloco usado). Então, sabendo como um monte de "a" é criptografado, você pode criar um nome de usuário: "a"\*(tamanho do bloco)+"admin". Depois, você poderia deletar o padrão criptografado de um bloco de "a" do cookie. E você terá o cookie do nome de usuário "admin".
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -278,7 +278,7 @@ Deve haver um padrão (com o tamanho de um bloco usado). Portanto, sabendo como
|
|||
|
||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
Encontre vulnerabilidades que importam mais para que você possa corrigi-las mais rapidamente. Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -287,10 +287,10 @@ Encontre vulnerabilidades que são mais importantes para que você possa corrigi
|
|||
|
||||
<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 [**The PEASS Family**](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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo 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).
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **versão mais recente 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* Adquira o [**merchandising 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** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue