hacktricks/pentesting-web/xss-cross-site-scripting/dom-invader.md

110 lines
9.2 KiB
Markdown
Raw Normal View History

# DOM Invader
<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 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).
</details>
## DOM Invader
O DOM Invader é uma ferramenta do navegador instalada no navegador integrado do Burp. Ele ajuda a **detectar vulnerabilidades de XSS DOM** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
O DOM Invader integra uma guia dentro do painel DevTools do navegador, permitindo o seguinte:
1. **Identificação de sinks controláveis** em uma página da web para teste de XSS DOM, fornecendo contexto e detalhes de sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas via método `postMessage()` para teste de XSS DOM. O DOM Invader também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente criadas.
2023-06-06 18:56:34 +00:00
3. Detecção de **fontes de poluição de protótipos do lado do cliente** e varredura de gadgets controláveis enviados para sinks arriscados.
4. Identificação de **vulnerabilidades de clobbering do DOM**.
2023-06-06 18:56:34 +00:00
### Habilitar
2023-06-06 18:56:34 +00:00
No navegador integrado do Burp, vá para a **extensão Burp** e habilite-a:
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
Agora atualize a página e na **Dev Tools** você encontrará a **guia DOM Invader:**
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
### Injetar um Canary
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o Canary**. Agora você deve começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, URL...) e clicar em pesquisar cada vez. O DOM Invader verificará se o **canary terminou em algum sink interessante** que possa ser explorado.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova guia** **injetando** o **canary** em todos os **parâmetros de URL** e **formulários** que encontrar.
### Injetar um Canary vazio
Se você apenas deseja encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canary vazio**.
### Mensagens da Web
O DOM Invader permite testar o XSS DOM usando mensagens da web com recursos como:
2023-06-06 18:56:34 +00:00
1. **Registro de mensagens da web** enviadas via `postMessage()`, semelhante ao registro de histórico de solicitação/resposta HTTP do Burp Proxy.
2. **Modificação** e **reenvio** de mensagens da web para testar manualmente o XSS DOM, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar o XSS DOM.
2023-06-06 18:56:34 +00:00
#### Detalhes da mensagem
2023-06-06 18:56:34 +00:00
Você pode clicar em cada mensagem para ver informações mais detalhadas sobre ela, incluindo se as propriedades `origin`, `data` ou `source` da mensagem são acessadas pelo JavaScript do lado do cliente.
* **`origin`**: Se as informações de **origem da mensagem não forem verificadas**, você poderá enviar mensagens de origem cruzada para o manipulador de eventos **de um domínio externo arbitrário**. Mas se for verificado, ainda pode ser inseguro.
* **`data`**: Aqui é onde a carga útil é enviada. Se esses dados não forem usados, o sink é inútil.
2023-06-06 18:56:34 +00:00
* **`source`**: Avalia se a propriedade de origem, geralmente referenciando um iframe, é validada em vez da origem. Mesmo que isso seja verificado, não garante que a validação não possa ser contornada.
2023-06-06 18:56:34 +00:00
#### Responder a uma mensagem
2023-06-06 18:56:34 +00:00
1. Na visualização de **Mensagens**, clique em qualquer mensagem para abrir a caixa de diálogo de detalhes da mensagem.
2. Edite o campo **Dados** conforme necessário.
3. Clique em **Enviar**.
### Poluição de Protótipos
O DOM Invader também pode procurar por **vulnerabilidades de Poluição de Protótipos**. Primeiro, você precisa habilitá-lo:
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
2023-06-06 18:56:34 +00:00
Em seguida, ele **procurará por fontes** que permitam adicionar propriedades arbitrárias ao **`Object.prototype`**.
2023-06-06 18:56:34 +00:00
Se algo for encontrado, um botão **Testar** aparecerá para **testar a fonte encontrada**. Clique nele, uma nova guia aparecerá, crie um objeto no console e verifique se a `testproperty` existe:
```javascript
let b = {}
b.testproperty
```
2023-06-06 18:56:34 +00:00
Uma vez que você encontrou uma fonte, você pode **procurar por um gadget**:
2023-06-06 18:56:34 +00:00
1. Na visualização do **DOM**, clique no botão **Procurar por gadgets** ao lado de qualquer fonte de poluição de protótipo que o DOM Invader tenha encontrado. O DOM Invader abre uma nova guia e começa a procurar por gadgets adequados.
2. Na mesma guia, abra a guia **DOM Invader** no painel DevTools. Uma vez que a varredura é concluída, a visualização do **DOM** exibe quaisquer sinks que o DOM Invader foi capaz de acessar através dos gadgets identificados. No exemplo abaixo, uma propriedade de gadget chamada `html` foi passada para o sink `innerHTML`.
2023-06-06 18:56:34 +00:00
## Clobbering do DOM
2023-06-06 18:56:34 +00:00
Na imagem anterior, é possível ver que a varredura de clobbering do DOM pode ser ativada. Uma vez feito isso, o **DOM Invader começará a procurar por vulnerabilidades de clobbering do DOM**.
2023-06-06 18:56:34 +00:00
## Referências
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)
<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>
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou 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 para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>