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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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ê:
- Identifique destinos controláveis em tempo real, incluindo contexto (atributo, HTML, URL, JS) e sanitização aplicada.
- Registre, edite e reenvie mensagens web
postMessage()
, ou deixe a extensão mutá-las automaticamente. - Detecte fontes de poluição de protótipos do lado do cliente e escaneie por cadeias gadget→sink, gerando PoCs em tempo real.
- Encontre vetores de DOM clobbering (por exemplo, colisões de
id
/name
que sobrescrevem variáveis globais). - 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
.png)
- Abra Proxy ➜ Intercept ➜ Open Browser (navegador embutido do Burp).
- Clique no logo do Burp Suite (canto superior direito). Se estiver oculto, clique primeiro na peça de quebra-cabeça.
- Na aba DOM Invader, ative Enable DOM Invader e pressione Reload.
- 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:
- Navegar – O DOM Invader sinaliza fontes de poluição (
__proto__
,constructor
,prototype
) encontradas em URL/query/hash ou mensagens web JSON. - Testar – clique em Test para abrir uma aba de PoC onde
Object.prototype.testproperty
deve existir:
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
- Escanear por gadgets – O DOM Invader força nomes de propriedades e rastreia se algum acaba em destinos perigosos (por exemplo,
innerHTML
). - 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__
vsconstructor
. - 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.
- 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.
- Attack Types
- Prototype pollution (com configurações por técnica).
- DOM clobbering.
- 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.
- 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
- 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/dom-xss
- 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/dom-clobbering
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.