Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'

This commit is contained in:
Translator 2025-08-05 00:34:19 +00:00
parent 9515d4f292
commit bed9bfe241

View File

@ -4,78 +4,125 @@
## DOM Invader
DOM Invader é uma ferramenta de navegador instalada no navegador embutido do Burp. Ela ajuda 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 vem pré-instalada como uma extensão.
DOM Invader é uma ferramenta de navegador instalada no **navegador Chromium embutido do Burp Suite**. Ela ajuda na **detecção de DOM XSS e outras vulnerabilidades do lado do cliente** (poluição de protótipos, DOM clobbering, etc.) ao **instrumentar automaticamente fontes e destinos JavaScript**. A extensão é fornecida com o Burp e só precisa ser ativada.
DOM Invader integra uma aba dentro do painel DevTools do navegador, permitindo o seguinte:
DOM Invader adiciona uma aba ao painel DevTools do navegador que permite que você:
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**.
1. **Identifique destinos controláveis** em tempo real, incluindo contexto (atributo, HTML, URL, JS) e sanitização aplicada.
2. **Registre, edite e reenvie mensagens web `postMessage()`**, ou deixe a extensão mutá-las automaticamente.
3. **Detecte fontes de poluição de protótipos do lado do cliente e escaneie por cadeias gadget→sink**, gerando PoCs em tempo real.
4. **Encontre vetores de DOM clobbering** (por exemplo, colisões de `id` / `name` que sobrescrevem variáveis globais).
5. **Ajuste o comportamento** através de uma rica interface de Configurações (canário personalizado, auto-injeção, bloqueio de redirecionamento, listas de fontes/destinos, etc.).
### Ative-o
---
No navegador embutido do Burp, vá para a **extensão Burp** e ative-a:
### 1. Ative-o
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
Agora, atualize a página e nas **Dev Tools** você encontrará a **aba DOM Invader:**
1. Abra **Proxy ➜ Intercept ➜ Open Browser** (navegador embutido do Burp).
2. Clique no logo do **Burp Suite** (canto superior direito). Se estiver oculto, clique primeiro na peça de quebra-cabeça.
3. Na aba **DOM Invader**, ative **Enable DOM Invader** e pressione **Reload**.
4. Abra o DevTools ( `F12` / Clique direito ➜ Inspecionar ) e anexe-o. Um novo painel **DOM Invader** aparece.
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
> O Burp lembra o estado por perfil. Desative-o em *Settings ➜ Tools ➜ Burps browser ➜ Store settings...* se necessário.
### Injete um Canary
### 2. Injetar um Canário
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 que clicar em buscar, o DOM Invader verificará se o **canary terminou em algum sink interessante** que poderia ser explorado.
Um **canário** é uma string de marcador aleatório (por exemplo, `xh9XKYlV`) que o DOM Invader rastreia. Você pode:
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.
* **Copiá-lo** e injetá-lo manualmente em parâmetros, formulários, quadros de Web-Socket, mensagens web, etc.
* Usar os botões **Inject URL params / Inject forms** para abrir uma nova aba onde o canário é anexado automaticamente a cada chave/valor de consulta ou campo de formulário.
* Procurar por um **canário vazio** para revelar todos os destinos, independentemente da explorabilidade (ótimo para reconhecimento).
### Injete um Canary vazio
#### Canário personalizado (2025+)
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**.
O Burp 2024.12 introduziu **Canary settings** (Burp-logo ➜ DOM Invader ➜ Canary). Você pode:
### Mensagens Post
* **Randomizar** ou definir uma **string personalizada** (útil para testes em várias abas ou quando o valor padrão aparece naturalmente na página).
* **Copiar** o valor para a área de transferência.
* Mudanças requerem **Reload**.
DOM Invader permite testar para 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 por DOM XSS, similar à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar DOM XSS.
### 3. Mensagens web (`postMessage`)
#### Detalhes da mensagem
A sub-aba **Messages** registra cada chamada `window.postMessage()`, mostrando o uso de `origin`, `source` e `data`.
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.
**Modificar e reenviar**: clique duas vezes em uma mensagem, edite `data` e pressione **Send** (semelhante ao Burp Repeater).
- **`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.
**Auto-fuzz**: ative **Postmessage interception ➜ Auto-mutate** nas configurações para permitir que o DOM Invader gere cargas úteis baseadas em canário e as reproduza para o manipulador.
#### Responder a uma mensagem
Recapitulando o significado dos campos:
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**.
* **origin** se o manipulador valida `event.origin`.
* **data** localização da carga útil. Se não utilizada, o destino é irrelevante.
* **source** validação de referência de iframe / janela; muitas vezes mais fraca do que a verificação de origem estrita.
### Poluição de Protótipos
---
DOM Invader também pode procurar por **vulnerabilidades de Poluição de Protótipos**. Primeiro, você precisa ativá-lo:
### 4. Poluição de Protótipos
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
Ative em **Settings ➜ Attack types ➜ Prototype pollution**.
Em seguida, ele **procurará fontes** que permitem adicionar propriedades arbitrárias ao **`Object.prototype`**.
Fluxo de trabalho:
1. **Navegar** O DOM Invader sinaliza **fontes** de poluição (`__proto__`, `constructor`, `prototype`) encontradas em URL/query/hash ou mensagens web JSON.
2. **Testar** clique em *Test* para abrir uma aba de PoC onde `Object.prototype.testproperty` deve existir:
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
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
Uma vez que você encontrou uma fonte, você pode **escanear por um gadget**:
3. **Escanear por gadgets** O DOM Invader força nomes de propriedades e rastreia se algum acaba em destinos perigosos (por exemplo, `innerHTML`).
4. **Explorar** quando uma cadeia gadget-sink é encontrada, um botão *Exploit* aparece que encadeia fonte + gadget + sink para acionar um alerta.
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 ser aberta no painel DevTools. Após a conclusão do escaneamento, quaisquer sinks acessíveis através dos 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.
Configurações avançadas (ícone de engrenagem):
## DOM clobbering
* **Remover CSP / X-Frame-Options** para manter iframes funcionais durante a varredura de gadgets.
* **Escanear técnicas em quadros separados** para evitar interferência de `__proto__` vs `constructor`.
* **Desativar técnicas** individualmente para aplicativos frágeis.
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**.
---
### 5. DOM Clobbering
Ative **Attack types ➜ DOM clobbering**. O DOM Invader monitora elementos criados dinamicamente cujos atributos `id`/`name` colidem com variáveis globais ou objetos de formulário (`<input name="location">` → clobbers `window.location`). Uma entrada é produzida sempre que a marcação controlada pelo usuário leva à substituição de variáveis.
---
## 6. Visão Geral das Configurações (2025)
O DOM Invader agora está dividido em categorias **Main / Attack Types / Misc / Canary**.
1. **Main**
* **Enable DOM Invader** interruptor global.
* **Postmessage interception** ativar/desativar registro de mensagens; sub-toggles para auto-mutação.
* **Custom Sources/Sinks** *ícone de engrenagem* ➜ ativar/desativar destinos específicos (por exemplo, `eval`, `setAttribute`) que podem quebrar o aplicativo.
2. **Attack Types**
* **Prototype pollution** (com configurações por técnica).
* **DOM clobbering**.
3. **Misc**
* **Redirect prevention** bloquear redirecionamentos do lado do cliente para que a lista de destinos não seja perdida.
* **Breakpoint before redirect** pausar o JS logo antes do redirecionamento para inspeção da pilha de chamadas.
* **Inject canary into all sources** auto-injetar canário em todos os lugares; lista de permissões de fonte/parâmetro configurável.
4. **Canary**
* Visualizar / randomizar / definir canário personalizado; copiar para a área de transferência. Mudanças requerem recarregamento do navegador.
---
### 7. Dicas e Boas Práticas
* **Use canário distinto** evite strings comuns como `test`, caso contrário, ocorrem falsos positivos.
* **Desative destinos pesados** (`eval`, `innerHTML`) temporariamente se quebrarem a funcionalidade da página durante a navegação.
* **Combine com Burp Repeater & Proxy** replique a solicitação/resposta do navegador que produziu um estado vulnerável e crie URLs de exploração finais.
* **Lembre-se do escopo do quadro** fontes/destinos são exibidos por contexto de navegação; vulnerabilidades dentro de iframes podem precisar de foco manual.
* **Exporte evidências** clique com o botão direito no painel DOM Invader ➜ *Save screenshot* para incluir em relatórios.
---
## Referências
@ -85,5 +132,7 @@ Na imagem anterior, é possível ver que a varredura de DOM clobbering pode ser
- [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)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc)
{{#include ../../banners/hacktricks-training.md}}