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

115 lines
8.2 KiB
Markdown

# DOM Invader
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe 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>
{% endhint %}
## DOM Invader
DOM Invader é uma ferramenta de navegador instalada no navegador embutido do Burp. Ela auxilia na **detecção de vulnerabilidades DOM XSS** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
DOM Invader integra uma aba dentro do painel DevTools do navegador, permitindo o seguinte:
1. **Identificação de sinks controláveis** em uma página da web para testes de DOM XSS, fornecendo detalhes de contexto e sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas via o método `postMessage()` para testes de DOM XSS. O DOM Invader também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente elaboradas.
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 DOM**.
### Ative-o
No navegador embutido do Burp, vá para a **extensão Burp** e ative-a:
<figure><img src="../../.gitbook/assets/image (1129).png" alt=""><figcaption></figcaption></figure>
Agora, atualize a página e nas **Dev Tools** você encontrará a **aba DOM Invader:**
<figure><img src="../../.gitbook/assets/image (695).png" alt=""><figcaption></figcaption></figure>
### Injete um Canary
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o Canary**. Você deve agora começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, url...) e cada vez clicar para pesquisá-lo. O DOM Invader verificará se o **canary terminou em algum sink interessante** que poderia ser explorado.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova aba** **injetando** o **canary** em cada **parâmetro de URL** e **formulário** que encontrar.
### Injete um Canary vazio
Se você apenas quiser encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canary vazio**.
### Mensagens Post
O DOM Invader permite testar DOM XSS usando mensagens da web com recursos como:
1. **Registro de mensagens da web** enviadas via `postMessage()`, semelhante ao registro de histórico de requisições/respostas HTTP do Burp Proxy.
2. **Modificação** e **reemissão** de mensagens da web para testar manualmente DOM XSS, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar DOM XSS.
#### Detalhes da mensagem
Informações detalhadas podem ser visualizadas sobre cada mensagem clicando nela, incluindo se o JavaScript do lado do cliente acessa as propriedades `origin`, `data` ou `source` da mensagem.
* **`origin`** : Se a **informação de origem da mensagem não for verificada**, você pode ser capaz de 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 que a carga útil é enviada. Se esses dados não forem usados, o sink é inútil.
* **`source`**: Avalia se a propriedade source, 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.
#### Responder a uma mensagem
1. Na visualização **Mensagens**, clique em qualquer mensagem para abrir o diálogo de detalhes da mensagem.
2. Edite o campo **Data** 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 ativá-lo:
<figure><img src="../../.gitbook/assets/image (1026).png" alt=""><figcaption></figcaption></figure>
Em seguida, ele **procurará fontes** que permitem que você adicione propriedades arbitrárias ao **`Object.prototype`**.
Se algo for encontrado, um botão **Testar** aparecerá para **testar a fonte encontrada**. Clique nele, uma nova aba aparecerá, crie um objeto no console e verifique se a `testproperty` existe:
```javascript
let b = {}
b.testproperty
```
Uma vez que você encontrou uma fonte, você pode **escanear por um gadget**:
1. Uma nova aba é aberta pelo DOM Invader quando o botão **Scan for gadgets**, que pode ser encontrado ao lado de qualquer fonte de poluição de protótipo identificada na visualização **DOM**, é clicado. O escaneamento por gadgets adequados então começa.
2. Enquanto isso, na mesma aba, a aba **DOM Invader** deve estar aberta no painel DevTools. Após a conclusão do escaneamento, quaisquer sinks acessíveis via os gadgets identificados são exibidos na visualização **DOM**. Por exemplo, uma propriedade de gadget chamada `html` sendo passada para o sink `innerHTML` é mostrada no exemplo abaixo.
## DOM clobbering
Na imagem anterior, é possível ver que a varredura de DOM clobbering pode ser ativada. Uma vez feito isso, **DOM Invader começará a procurar por vulnerabilidades de DOM clobbering**.
## 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)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}