Эксплуатация уязвимостей межсайтового скриптинга (XSS)
Традиционный способ доказать, что вы нашли уязвимость межсайтового скриптинга, — создать всплывающее окно с помощью функции alert(). Это не потому, что XSS как-то связан с всплывающими окнами; это просто способ доказать, что вы можете выполнить произвольный JavaScript в заданном домене. Вы можете заметить, что некоторые используют alert(document.domain). Это способ явно показать, в каком домене выполняется JavaScript.
Иногда вы захотите пойти дальше и доказать, что уязвимость XSS представляет реальную угрозу, предоставив полноценный эксплойт. В этом разделе мы рассмотрим три из самых популярных и мощных способов эксплуатировать уязвимость XSS.
Эксплуатация межсайтового скриптинга для кражи файлов cookie
Кража файлов cookie — традиционный способ эксплуатации XSS. Большинство веб-приложений используют файлы cookie для управления сессиями. Вы можете эксплуатировать уязвимости межсайтового скриптинга, чтобы отправить файлы cookie жертвы на ваш домен, затем вручную внедрить эти файлы cookie в браузер и выдать себя за жертву.
На практике у этого подхода есть существенные ограничения:
Жертва может быть не авторизована.
Многие приложения скрывают свои файлы cookie от JavaScript, используя флаг
HttpOnly.Сессии могут быть привязаны к дополнительным факторам, таким как IP-адрес пользователя.
Сессия может истечь до того, как вы успеете ее перехватить.
Эксплуатация межсайтового скриптинга для перехвата паролей
Сегодня у многих пользователей есть менеджеры паролей, которые автоматически заполняют их пароли. Вы можете воспользоваться этим, создав поле ввода пароля, считав автоматически заполненный пароль и отправив его на свой домен. Эта техника позволяет избежать большинства проблем, связанных с кражей файлов cookie, и даже может дать доступ ко всем другим учетным записям, где жертва повторно использовала тот же пароль.
Основной недостаток этой техники в том, что она работает только для пользователей, у которых есть менеджер паролей, выполняющий автозаполнение пароля. (Разумеется, если у пользователя пароль не сохранен, вы все равно можете попытаться получить его через фишинг на сайте, но это уже не совсем то же самое.)
Эксплуатация межсайтового скриптинга для обхода защит от CSRF
XSS позволяет злоумышленнику делать практически все, что может делать легитимный пользователь на сайте. Выполняя произвольный JavaScript в браузере жертвы, XSS позволяет выполнять широкий спектр действий как будто вы — пользователь-жертва. Например, вы можете заставить жертву отправить сообщение, принять запрос в друзья, залить бэкдор в репозиторий исходного кода или перевести немного биткоинов.
Некоторые сайты позволяют авторизованным пользователям менять свой адрес электронной почты без повторного ввода пароля. Если вы нашли уязвимость XSS на одном из таких сайтов, вы можете использовать ее, чтобы украсть CSRF-токен. Имея токен, вы можете изменить адрес электронной почты жертвы на тот, который контролируете вы. Затем вы можете инициировать сброс пароля, чтобы получить доступ к учетной записи.
Этот тип эксплойта сочетает XSS (для кражи CSRF-токена) с функциональностью, обычно нацеленной CSRF. В то время как традиционный CSRF — «односторонняя» уязвимость, при которой злоумышленник может заставить жертву отправлять запросы, но не может видеть ответы, XSS обеспечивает «двустороннюю» коммуникацию. Это позволяет злоумышленнику как отправлять произвольные запросы, так и читать ответы, в результате чего получается гибридная атака, обходящая защиту от CSRF.
Last updated