Já mencionamos dois tipos de exploits XSS : refletidos e armazenados. Todos eles têm a característica comum de que o código perigoso, após ser inserido, será executado após a resposta do servidor, o que significa que o erro está no lado do servidor. Existe outro tipo de exploração de XSS que vai contra esse recurso, o código malicioso é executado imediatamente no lado do cliente sem passar pelo servidor, conhecido como DOM Based XSS ou também conhecido como XSS tipo 0.
Primeiro de tudo precisamos saber o que é DOM?
DOM, abreviação de Document Object Model, é uma forma padrão do W3C (http://www.w3.org/DOM/) proposta para recuperar e manipular dados de documentos estruturados como HTML e XML. Este modelo representa documentos como uma estrutura de árvore hierárquica. Todos os elementos em HTML e XML são considerados um nó.
DOM Based XSS é uma técnica de exploração de XSS baseada na alteração da estrutura DOM do documento, especificamente HTML.
Vejamos um exemplo específico abaixo:
Um site possui o seguinte URL para a página de registro:
example.com/register.php?message=Please fill in the form
Ao acessá-lo, vemos um Form bem normal:

Você pode deduzir facilmente o parâmetro da mensagem passado para o conteúdo da notificação no formulário. Observe atentamente o código-fonte desta notificação:
![Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom]()
O segmento JavaScript é responsável por obter o valor do parâmetro mensagem e imprimi-lo. A partir dessa verificação negligente de entrada, é perfeitamente possível induzir os usuários a acessar URLs perigosos.
Em vez de lançar:
message=Please fill in the form
então transmita:
message=GenderMaleFemale
function show(){alert();}
Então o formulário de inscrição ficará assim:
![Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom]()
Os usuários não desconfiarão de uma forma "normal" como esta, e ao selecionar o gênero, o Script será executado:
![Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom]()
Vou explicar um pouco mais sobre o valor passado no parâmetro mensagem:
GenderMaleFemale
function show(){alert();}
Seu principal objetivo é executar a função show() sempre que houver um evento onchage na tag select. A função show() aqui simplesmente aparece para mostrar que o script foi executado. No entanto, na realidade, os hackers costumam usar esta função show() para executar um script que transmite o valor do cookie do usuário para um servidor predeterminado.Os leitores podem revisar o artigo Reflected XSS que menciona como os hackers criam Como é essa solicitação?
Este exemplo nos dá duas conclusões importantes. Primeiro, o código malicioso foi executado imediatamente ao clicar no valor da tag select, o que significa que foi executado diretamente no lado do cliente, sem passar pela resposta do servidor. Segundo, a estrutura HTML foi alterada com o script passado. E também podemos ver o cenário de exploração real, DOM Based é um pouco mais semelhante ao Reflected do que ao Stored XSS quando se trata de enganar os usuários para que acessem uma URL incorporada com código malicioso.
A figura a seguir descreve cada etapa na implementação da técnica de ataque XSS baseado em DOM:
![Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom Web9: Tipos de exploração de XSS - Parte 3: XSS baseado em Dom]()
Abaixo está um vídeo de um membro do fórum WhiteHat.vn realizando uma exploração por meio de XSS baseado em DOM:
Boa sorte!