Web-сервисы, Кибербезопасность

XSS — уязвимость и как ее не упустить

Время прочтения: 5 мин.

Веб-безопасность – важное направление в рамках современных реалий развития индустрии информационных технологий и цифровизации жизни в целом. В условиях современного мира, даже если вы являетесь владельцем небольшого сайта, и он индексируется популярными поисковыми системами, то нужно быть готовым к тому, что придется столкнуться с ситуацией, когда ваш ресурс станет целью для атак со стороны ботов и специализированных людей “хакеров”. Сама тема веб-безопасности достаточно обширна, включает в себя достаточно большой спектр аспектов, способов и направлений по определению и предотвращению атак. Сегодня мы рассмотрим одну из не самых сложных, но достаточно важную лазейку — XSS уязвимость.

Cross-Site Scripting– часто встречаемая уязвимость в веб-приложениях. С помощью данной лазейки злоумышленник может внедрить JavaScript-код, не предусмотренный разработчиком, который будет выполняться при входе пользователя на страницу.

Наличие данной уязвимости может привести к:

  • передаче авторизационных данных пользователя злоумышленникам;
  • потере персональных данных в ходе перенаправления пользователя на страницу-клон совершенно идентичную той на которой пользователь рассчитывал оказаться, но принадлежащей злоумышленнику;
  • много еще чему, что можно придумать с использованием JavaScript.

В качестве примера может служить добавление JavaScript-кода в поле ввода любой информации, но которая сохранится и будет отображаться другим пользователям. При открытии страницы вместе с текстом загрузится и код злоумышленника.

Как же все-таки искать, определять и бороться с данной проблемой?

Наиболее вероятное место размещения XSS-уязвимости на сайте, это то место куда обычный пользователь может добавить текст или JavaScript-код.

В качестве простых и распространенных проверок на наличие данной уязвимости можно использовать код, который после успешной отработки откроет пользователю стандартное браузерное окно — например alert. Также нужно обращать внимание на get- параметры запроса, передающиеся в URL запросе, если в get- параметре, при поиске появился запрос (из поискового запроса), то велика вероятность, что страница подвержена уязвимости. В этом случае тот же код (“<script>alert(1)</script>”) вместо запроса подставляем  get параметр и обновляем страницу. В случае успеха в браузере появится подобное окно:

Конечно, хорошо уметь все это делать вручную и практиковаться, но все же если веб-ресурс не одностраничный, то все эти проверки, которых может быть великое множество и разнообразие отнимут очень много времени и сил и не факт, что увенчаются успехом — находкой уязвимости. Поэтому имеет смысл использовать автоматизированные инструменты по поиску подобного рода упущений. Одним из таких инструментов является XSStrike. На самом деле сейчас существует великое множество утилит и инструментов, выполняющих аналогичные функции, но в этой статье будет рассмотрен XSStrike, достаточно мощный и одновременно малоизвестный сканер XSS-уязвимостей.

ХSStrike – инструмент для поиска XSS уязвимостей. Данный сканер прост в первоначальной настройке и имеет открытый код. Вместо того, чтобы вводить полезную нагрузку и проверять ее работу, как это делают все другие инструменты, XSStrike анализирует ответ с помощью нескольких анализаторов, а затем создает полезные нагрузки, которые гарантированно работают с помощью анализа контекста, интегрированного с механизмом фаззинга[1]. Вот несколько примеров полезных нагрузок, генерируемых XSStrike:

Основные особенности:

  • Отраженное и DOM XSS сканирование
  • Многопоточное сканирование
  • Анализ контекста
  • Настраиваемое ядро
  • Обнаружение и уклонение от WAF
  • Сканирование устаревших JS-библиотек
  • Интеллектуальный генератор полезной нагрузки
  • Ручной анализатор HTML и JavaScript
  • Мощный движок фаззинга
  • Слепая поддержка XSS
  • Тщательно проработанный рабочий процесс
  • Полная поддержка HTTP
  • Полезные данные грубой силы из файла
  • При поддержке Photon , Zetanize и Arjun

Пример простого запуска, на месте кавычек указываем url, которую хотим протестировать:

python xsstrike.py -u " " --blind

В ходе проверки, утилита обнаруживает уязвимый параметр page (Reflections found). Злоумышленник получает возможность передать js код (пример кода указан в строке Payload), который будет исполнен на странице. Такой тип XSS уязвимостей называется reflected XSS.

Функционал утилиты позволяет запустить проверку по всему сайту, для запуска требуется лишь указать стартовую страницу. Дальше сканер выполняет исследование всех найденных страниц.

python xsstrike.py -u " " --blind --crawl -l 100

“-l 100” отвечает за количество страниц обхода.

В результате будут страницы с уязвимыми параметрами, которые подлежат углубленным исследований.

С помощью данного сканера возможно передавать HTTP заголовки, осуществлять проверку форм и много другого, полный перечень возможностей указан в описании инструмента.

Ниже представлены результаты некоторых других проверок. Из результатов следует, что утилита достаточно мощная удобная, легкая в освоении, понимании и в принципе может указывать не только на конкретные XSS “провалы”, но и на файлы, скрипты, компоненты, которые в силу своего устаревания потенциально могут быть уязвимыми.

Найти данный инструмент с полным описание можно по ссылке.


[1] Методика тестирования программного обеспечения, суть которой заключается в автоматизированном обнаружении ошибок реализации путем отправки заведомо неверных данных и анализе реакции программы на них.

Советуем почитать