
Сканер DOM XSS для одностраничных приложений
DOMDig — это сканер DOM XSS, работающий внутри браузера Chromium, который может рекурсивно сканировать одностраничные приложения (SPA).
В отличие от других сканеров, DOMDig может сканировать любые веб-приложения (включая gmail), отслеживая изменения DOM и запросы XHR/fetch/websocket, и может имитировать реальное взаимодействие пользователя, генерируя события. В ходе этого процесса полезные нагрузки XSS помещаются в поля ввода, а их выполнение отслеживается для обнаружения точек внедрения и связанных изменений URL.
Он основан на htcrawl, библиотеке Node, достаточно мощной, чтобы легко сканировать аккаунт 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 может выполнять три различные проверки:
Проверку DOM XSS можно настроить с помощью различных режимов, обеспечивающих разное поведение. По умолчанию включены все.
Режимы:
Он сканирует DOM в поисках мест, где пользователь может внедрить JavaScript-код, например, текстовое поле. Он может обнаружить точки внедрения, которые не может угадать сканер. Примером может служить функция поиска, которая берет текст из поля ввода и для запуска поиска помещает его в хэш URL в виде JSON-строки.
Он фаззит URL (параметры запроса и хэш), чтобы проверить, выполняется ли наш код при загрузке страницы. Если код не выполняется, он сканирует DOM, инициируя HTML-события, в надежде найти что-то, что выполнит нашу полезную нагрузку.
Он также может обнаружить классический отражённый XSS.
После выполнения проверки DOM XSS DOMDig повторно сканирует ту же страницу, ожидая выполнения ранее использованных полезных нагрузок. Если какая-либо из них найдена, это означает, что она может сохраняться после перезагрузки страницы.
Ищет места, где плейсхолдеры шаблонов (например, {var1}) могут быть выполнены как JavaScript-код.
Каждая сообщаемая уязвимость содержит следующие поля:
domxss, stored или templateinjDOMDig использует htcrawl в качестве движка сканирования.
Диаграмма показывает рекурсивный процесс сканирования.
.
Видео ниже показывает работу движка по сканированию gmail. Сканирование длилось много часов и было захвачено около 3000 XHR-запросов.
Последовательность входа (или начальная последовательность) — это объект JSON, содержащий список действий, которые необходимо выполнить до начала сканирования. Каждый элемент списка — это массив, где первый элемент — имя выполняемого действия, а остальные элементы — «параметры» для этих действий. Действия:
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
Полезные нагрузки могут быть загружены из JSON-файла (опция -P) в виде массива строк. Для создания пользовательских полезных нагрузок в качестве выполняемой функции необходимо использовать строку window.___xssSink({0}) (вместо классического alert(1))
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]