Мы уже упоминали два типа XSS- эксплойтов : отраженный и хранимый.Все они имеют общую особенность: опасный код после вставки будет выполнен после ответа сервера, а это значит, что ошибка лежит на стороне сервера.server.server. Существует еще один тип эксплуатации XSS, который противоречит этой функции: вредоносный код выполняется немедленно на стороне клиента, минуя сервер, известный как XSS на основе DOM или также известный как XSS типа 0.
Прежде всего нам нужно знать, что такое DOM?
DOM, сокращение от Document Object Model, представляет собой стандартную форму W3C (http://www.w3.org/DOM/), предназначенную для извлечения и управления данными структурированных документов, таких как HTML и XML. Эта модель представляет документы в виде иерархической древовидной структуры. Все элементы в HTML и XML считаются узлом.
XSS на основе DOM — это метод эксплуатации XSS, основанный на изменении структуры DOM документа, в частности HTML.
Давайте посмотрим на конкретный пример ниже:
Веб-сайт имеет следующий URL-адрес страницы регистрации:
example.com/register.php?message=Please fill in the form
Когда мы получаем к нему доступ, мы видим вполне обычную форму:
Вы можете легко определить параметр сообщения, переданный в содержимое уведомления в форме, внимательно посмотрите на исходный код этого уведомления:
Сегмент JavaScript отвечает за получение значения из параметра сообщения и его печать. Благодаря такой небрежной проверке ввода вполне возможно обманом заставить пользователей получить доступ к опасным URL-адресам.
Вместо кастинга:
message=Please fill in the form
затем передайте:
message=GenderMaleFemale
function show(){alert();}
Тогда форма регистрации будет выглядеть так:
У пользователей не вызовет подозрений такая «обычная» форма, а при выборе пола будет выполнен скрипт:
Я объясню немного больше о значении, передаваемом в параметре сообщения:
GenderMaleFemale
function show(){alert();}
Его основная цель — выполнять функцию show() каждый раз, когда в теге select возникает событие onchage. Функция show() здесь просто всплывает, чтобы показать, что скрипт выполнен. Однако на самом деле хакеры часто используют эту функцию show() для выполнения сценария, который передает значение пользовательского файла cookie на заранее определенный сервер.Читатели могут просмотреть статью Reflected XSS , в которой упоминается, как хакеры создают. Как выглядит этот запрос?
Этот пример дает нам два важных вывода. Во-первых, вредоносный код выполнялся сразу после нажатия на значение в теге select, то есть он выполнялся прямо на стороне клиента, минуя ответ сервера. Во-вторых, структура HTML была изменена с помощью переданного скрипта. И мы также можем увидеть реальный сценарий эксплуатации: DOM Based несколько больше похож на Reflected, чем на Stored XSS, когда дело доходит до обмана пользователей с целью получения доступа к URL-адресу, встроенному в вредоносный код.
На следующем рисунке описан каждый шаг реализации техники XSS-атаки на основе DOM:
Ниже приведено видео, на котором участник форума WhiteHat.vn использует эксплойт через XSS на основе DOM:
Удачи!