Что такое отображенный межсайтовый скриптинг (XSS)

Отображенный межсайтовый скриптинг (XSS) – это тип атаки, когда злоумышленник отправляет полезную нагрузку цели в виде URL-адреса. Пользователь нажимает на нее и открывает уязвимое веб-приложение, выполняя полезную нагрузку.

Пример атаки отображенного XSS

Важно: эта информация предоставлена в целях обучения специалистов по безопасности касаемо рисков и специфики таких атак, и никоим образом не побуждает к противоправным действиям.

В этом примере разработчик хочет отобразить имя текущего аутентифицированного пользователя на экране приветствия (welcome.php). Он добавляет такую форму входа на веб-страницу login.php:

<form action="/welcome.php" method="get" id="login">
  <label for="name">Your name:</label>
  <input type="text" id="name" name="name">
  <label for "password">Your password:</label>
  <input type="password" id="password" name="password">
  <button type="submit" form="login" value="login">Log in</button>
</form>

Программа отправляет имя и пароль с помощью метода GET, а затем отображает имя на странице welcome.php без какой-либо проверки или очистки.

Злоумышленник создает следующий URL-адрес:

http://www.example.com/welcome.php?name=
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28
%22%4c%45%41%56%45%20%54%48%49%53%20%50%41
%47%45%21%20%59%4f%55%20%41%52%45%20%42%45
%49%4e%47%20%48%41%43%4b%45%44%21%22%29%3b
%3c%2f%73%63%72%69%70%74%3e

Это закодированная форма следующего содержимого:

<script>alert("LEAVE THIS PAGE! YOU ARE BEING HACKED!");</script>

Затем злоумышленник отправляет URL-адрес, например, в электронном письме или сообщении. Цель нажимает на нее, открывает страницу welcome.php, и ее браузер интерпретирует следующий код:

<strong>Hello, <script>alert("LEAVE THIS PAGE! YOU ARE BEING HACKED!");</script>!</strong>

Браузер находит тег <script> и выполняет находящийся в нем JavaScript-код. В результате отображается всплывающее окно, призывающее пользователя покинуть страницу.

Исправление отображенного XSS

Можно использовать фильтрацию HTMLPurifier для защиты кода и дополнительно экранирование символов HTML. Для этого необходимо импортировать библиотеку HTMLPurifier и изменить файл welcome.php следующим образом:

// Display the name of the user
// Use HTMLPurifier with HTML escaping to avoid XSS
$name=$_GET["name"];
// Purify user data using HTMLPurifier
(...)
$purifier = new HTMLPurifier($config);
$purified_name = $purifier->purify($name);
// Just to be sure, HTML-escape special characters
$safe_name = htmlspecialchars($purified_name, ENT_QUOTES);
// Display the safe name
echo "<strong>Hello, ".$safe_name."!</strong>";
(...)

Последствия отображенного XSS

Отображенный межсайтовый скриптинг считается менее опасным, чем сохраненный/постоянный XSS, но последствия могут быть ужасными.

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

Вот некоторые действия, которые могут выполнить злонамеренные хакеры:

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

Полезные статьи по предотвращению XSS

Как обнаружить отображенный XSS?

Для этого можно использовать следующие методы:

  • DAST – безопасная имитация действий хакера для обнаружения уязвимостей.
  • SAST – поиск проблем безопасности в коде как ошибки в тексте.

Они дополняют друг друга, давая возможность сканировать сайты от ранних этапов разработки до продакшна.

Примеры инструментов:

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

Если вы хотите бесплатно протестировать эти решения, пожалуйста, оставьте ваши контактные данные ниже, и мы обратимся к вам:

Запрос на бесплатное тестирование Invicti / Mend.io

Подписаться на новости