DOM Invader

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

DOM Invader

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 adiciona uma aba ao painel DevTools do navegador que permite que você:

  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.).

1. Ative-o

  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.

O Burp lembra o estado por perfil. Desative-o em Settings ➜ Tools ➜ Burp’s browser ➜ Store settings... se necessário.

2. Injetar um Canário

Um canário é uma string de marcador aleatório (por exemplo, xh9XKYlV) que o DOM Invader rastreia. Você pode:

  • 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).

Canário personalizado (2025+)

O Burp 2024.12 introduziu Canary settings (Burp-logo ➜ DOM Invader ➜ Canary). Você pode:

  • 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.

3. Mensagens web (postMessage)

A sub-aba Messages registra cada chamada window.postMessage(), mostrando o uso de origin, source e data.

Modificar e reenviar: clique duas vezes em uma mensagem, edite data e pressione Send (semelhante ao Burp Repeater).

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.

Recapitulando o significado dos campos:

  • 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.

4. Poluição de Protótipos

Ative em Settings ➜ Attack types ➜ Prototype pollution.

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:
javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
  1. Escanear por gadgets – O DOM Invader força nomes de propriedades e rastreia se algum acaba em destinos perigosos (por exemplo, innerHTML).
  2. Explorar – quando uma cadeia gadget-sink é encontrada, um botão Exploit aparece que encadeia fonte + gadget + sink para acionar um alerta.

Configurações avançadas (ícone de engrenagem):

  • 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.

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.
  1. Attack Types
  • Prototype pollution (com configurações por técnica).
  • DOM clobbering.
  1. 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.
  1. 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

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks