
Scanner de XSS DOM para Aplicações de Página Única
DOMDig é um scanner de XSS DOM que executa dentro do navegador Chromium e pode escanear aplicações de página única (SPA) recursivamente. Diferente de outros scanners, o DOMDig pode rastrear qualquer aplicação web (incluindo gmail) monitorando modificações no DOM e requisições XHR/fetch/websocket, e pode simular a interação real de um usuário disparando eventos. Durante esse processo, payloads XSS são inseridos em campos de entrada e sua execução é rastreada para encontrar pontos de injeção e as respectivas modificações na URL. É baseado em htcrawl, uma biblioteca Node poderosa o suficiente para rastrear facilmente uma conta do gmail.
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
O DOMDig pode realizar três verificações diferentes:
A verificação de DOM XSS pode ser configurada com diferentes modos, habilitando comportamentos distintos. Por padrão, todos estão habilitados. Os modos são:
Rastreia o DOM em busca de lugares onde o usuário pode injetar código JavaScript, por exemplo, uma caixa de texto. Pode descobrir pontos de injeção que não podem ser adivinhados por um scanner. Um exemplo pode ser uma funcionalidade de busca que pega o texto de uma caixa de entrada e, para disparar a busca, coloca-o no hash da URL como uma string JSON.
Aplica fuzzing na URL (parâmetros de consulta e o hash) para ver se nosso código é executado ao carregar a página. Se nenhum código for executado, rastreia o DOM disparando eventos HTML na esperança de encontrar algo que execute nosso payload. Também pode descobrir o clássico XSS Refletido.
Após uma verificação de DOM XSS, o DOMDig rastreia a mesma página aguardando a execução de payloads previamente usados. Se um for encontrado, significa que ele pode sobreviver a recarregamentos de página.
Procura lugares onde placeholders de template (ex.: {var1}) podem ser avaliados como código JavaScript.
Toda vulnerabilidade relatada contém os seguintes campos:
domxss, stored ou templateinjO DOMDig usa htcrawl como motor de rastreamento.
O diagrama mostra o processo de rastreamento recursivo.
.
O vídeo abaixo mostra o motor rastreando o gmail. O rastreamento durou muitas horas e cerca de 3000 requisições XHR foram capturadas.
Uma sequência de login (ou sequência inicial) é um objeto JSON contendo uma lista de ações a serem tomadas antes do escaneamento começar. Cada elemento da lista é um array onde o primeiro elemento é o nome da ação a ser tomada e os elementos restantes são "parâmetros" para essas ações. As ações são:
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
Payloads podem ser carregados de um arquivo JSON (opção -P) como um array de strings. Para construir payloads personalizados, a string window.___xssSink({0}) deve ser usada como a função a ser executada (em vez do clássico alert(1))
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]