
Escáner de XSS DOM para Aplicaciones de Página Única
DOMDig es un escáner de DOM XSS que se ejecuta dentro del navegador web Chromium y puede escanear aplicaciones de página única (SPA) de forma recursiva.
A diferencia de otros escáneres, DOMDig puede rastrear cualquier aplicación web (incluyendo gmail) manteniendo un registro de las modificaciones del DOM y las solicitudes XHR/fetch/websocket, y puede simular la interacción real de un usuario mediante la activación de eventos. Durante este proceso, se colocan cargas útiles (payloads) XSS en los campos de entrada y se rastrea su ejecución para encontrar puntos de inyección y las modificaciones de URL relacionadas.
Está basado en htcrawl, una biblioteca de Node.js lo suficientemente potente como para rastrear fácilmente una cuenta de 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
DOMDig puede realizar tres verificaciones diferentes:
La verificación de DOM XSS se puede configurar con diferentes modos, habilitando distintos comportamientos. Por defecto, todos están habilitados.
Los modos son:
Rastrea el DOM en busca de lugares donde el usuario pueda inyectar código JavaScript, por ejemplo, un cuadro de texto. Puede descubrir puntos de inyección que no pueden ser adivinados por un escáner. Un ejemplo podría ser una funcionalidad de búsqueda que toma el texto de un cuadro de entrada y, para activar la búsqueda, lo coloca en el hash de la URL como una cadena JSON.
Fuzzea la URL (parámetros de consulta y el hash) para ver si nuestro código se ejecuta al cargar la página. Si no se ejecuta ningún código, rastrea el DOM activando eventos HTML con la esperanza de encontrar algo que ejecute nuestra carga útil.
También puede descubrir el clásico XSS Reflejado.
Después de realizar una verificación de DOM XSS, DOMDig rastrea la misma página esperando la ejecución de cargas útiles utilizadas anteriormente. Si se encuentra alguna, significa que puede sobrevivir a las recargas de la página.
Busca lugares donde los marcadores de posición de plantillas (por ejemplo, {var1}) puedan ser evaluados como código JavaScript.
Cada vulnerabilidad reportada contiene los siguientes campos:
domxss, stored o templateinjDOMDig utiliza htcrawl como motor de rastreo.
El diagrama muestra el proceso de rastreo recursivo.
.
El siguiente video muestra el motor rastreando Gmail. El rastreo duró muchas horas y se capturaron alrededor de 3000 solicitudes XHR.
Una secuencia de inicio de sesión (o secuencia inicial) es un objeto JSON que contiene una lista de acciones a realizar antes de que comience el escaneo.
Cada elemento de la lista es un arreglo donde el primer elemento es el nombre de la acción a realizar y los elementos restantes son "parámetros" para esa acción.
Las acciones son:
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
Las cargas útiles se pueden cargar desde un archivo JSON (opción -P) como un arreglo de cadenas. Para construir cargas útiles personalizadas, se debe usar la cadena window.___xssSink({0}) como la función a ejecutar (en lugar del clásico alert(1))
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]