From bed9bfe241df24a48999a91a073a68e2b9319e03 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 5 Aug 2025 00:34:19 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md' --- .../xss-cross-site-scripting/dom-invader.md | 131 ++++++++++++------ 1 file changed, 90 insertions(+), 41 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index b072e4776..8cb6a1d53 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -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
-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. -
+> O Burp lembra o estado por perfil. Desative-o em *Settings ➜ Tools ➜ Burp’s 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 -
+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 (`` → 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}}