Найти тему

Тестирование XSS (Cross-Site Scripting) с помощью Burp Suite

Оглавление

Введение в XSS (Cross-Site Scripting)

XSS (Cross-Site Scripting) — это одна из самых распространенных уязвимостей веб-приложений, при которой злоумышленник может внедрить вредоносный скрипт на веб-страницу, который затем исполняется в браузере пользователя. Это позволяет злоумышленнику украсть данные пользователя, такие как cookie-файлы, сеансовые токены, или даже выполнять действия от имени пользователя.

XSS делится на три основных типа:

1. Отражённый XSS (Reflected XSS)

— скрипт передается через запросы пользователя и отражается сервером в ответе.

Пример сценария:

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

Представьте, что на сайте есть поисковая форма, которая отображает найденные результаты вместе с введённым запросом. Если введённые данные не экранируются должным образом, это может привести к XSS.

Пример:

Запрос:

https://example.com/search?q=<script>alert('XSS')</script>

Когда пользователь переходит по этой ссылке, сервер возвращает страницу с результатами поиска. Если введённый параметр q (запрос) отразится на странице как есть, то скрипт выполнится в браузере пользователя.

Пример HTML-ответа:

<html>
<body>
<h1>Результаты поиска для: <script>alert('XSS')</script></h1>
</body>
</html>

Когда браузер загрузит эту страницу, скрипт alert('XSS') выполнится, отображая всплывающее окно (я думаю понятно, что на практике (здесь и ниже) вредитель будет использовать вредоносный код вместо <script>alert('XSS')</script>).

2. Хранимый XSS (Stored XSS)

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

Пример сценария:

Хранимый XSS возникает, когда вредоносный скрипт сохраняется на сервере (например, в базе данных) и отображается для всех пользователей, которые посещают страницу. Это более опасная форма XSS, так как скрипт активируется каждый раз, когда страница загружается.

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

Пример:

Злоумышленник оставляет комментарий:

<script>alert('XSS')</script>

Этот комментарий сохраняется в базе данных и отображается на странице с комментариями для всех пользователей.

Пример HTML страницы с комментариями:

<html>
<body>
<h1>Комментарии:</h1>
<div class="comment">
<p>Отличная статья!</p>
</div>
<div class="comment">
<p><script>alert('XSS')</script></p>
</div>
</body>
</html>

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

3. DOM-based XSS

— уязвимость возникает исключительно на стороне клиента, когда манипуляции с DOM (Document Object Model) приводят к выполнению вредоносного кода.

Пример сценария:

DOM-based XSS возникает на стороне клиента (в браузере), когда данные вводятся пользователем и обрабатываются JavaScript-кодом, который небезопасно манипулирует DOM (Document Object Model) без должной фильтрации или экранирования.

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

Пример JavaScript-кода на странице:

<html>
<body>
<h1>Привет, <span id="user"></span>!</h1>

<script>
var user = new URLSearchParams(window.location.search).get('name');
document.getElementById('user').innerHTML = user;
</script>
</body>
</html>

Пример URL:

https://example.com/welcome?name=<script>alert('XSS')</script>

Когда жертва переходит по этой ссылке, JavaScript на странице вставляет значение параметра name в элемент с id="user", не экранируя его, что приводит к выполнению скрипта.

Результат:

<h1>Привет, <script>alert('XSS')</script>!</h1>

Скрипт alert('XSS') выполнится в браузере.

Burp Suite как инструмент для тестирования XSS

Burp Suite включает в себя множество инструментов, таких как Proxy, Intruder, Repeater, Scanner, которые могут быть использованы для поиска и эксплуатации уязвимостей, в том числе XSS.

Шаги для тестирования XSS с использованием Burp Suite

1. Настройка Burp Suite и перехват трафика

Откройте Burp Suite и настройте его в качестве прокси-сервера.
Настройте ваш браузер на работу с этим прокси (обычно это делается через настройки сети браузера, где указывается IP-адрес и порт, используемые Burp Suite).
Включите перехват запросов в Burp Suite, чтобы исследовать трафик между браузером и сервером.

2. Поиск потенциальных точек внедрения XSS

Начните исследовать веб-приложение. Во время серфинга по сайту, Burp Suite будет записывать весь HTTP-трафик.
Обратите внимание на поля ввода форм, параметры URL, заголовки HTTP и другие элементы, которые могут быть потенциально уязвимы для XSS.
Особенно интересны те параметры, которые возвращаются в ответе от сервера на страницу.

3. Использование Burp Suite Repeater для тестирования XSS

Когда вы нашли потенциальный параметр, который может быть уязвим для XSS, перехватите соответствующий HTTP-запрос.
Отправьте его в
Repeater (правой кнопкой мыши на запрос → "Send to Repeater").
В
Repeater вы можете вручную изменять запрос и повторно отправлять его на сервер.
В поле, которое вы подозреваете как уязвимое для XSS, внедрите простой тестовый скрипт, например:

Посмотрите на ответ от сервера и проверьте, отразился ли JavaScript-код в теле ответа.
Если код отразился "как есть" и исполнился в браузере, это подтверждает наличие уязвимости XSS.

4. Использование Intruder для автоматизации тестирования

Если есть много параметров, которые нужно проверить, или если вы хотите протестировать различные полезные нагрузки (payloads), можно использовать Intruder.
Отправьте запрос в Intruder (правой кнопкой мыши → "Send to Intruder").
Настройте атаку, указав места (позиции), где вы хотите вставить XSS-полезную нагрузку.
Введите набор полезных нагрузок (payloads), которые могут быть использованы для тестирования XSS. Это могут быть как простые скрипты, так и более сложные обходные методы (например, использование различных кодировок для обхода фильтров).
Запустите атаку и проанализируйте ответы на каждый из запросов, чтобы увидеть, выполнился ли скрипт.

5. Проверка DOM-based XSS

Для поиска DOM-based XSS используйте Burp Suite's DOM Invader или другие сторонние инструменты для анализа клиентской части.
DOM-based XSS можно обнаружить, если вы видите, что данные пользователя напрямую обрабатываются в JavaScript-коде страницы без должной фильтрации или экранирования.
В таких случаях полезно использовать функции разработчика браузера (DevTools) для анализа того, как данные передаются и обрабатываются на стороне клиента.

6. Использование Burp Scanner для автоматического поиска XSS

В профессиональной версии Burp Suite доступен модуль Scanner, который может автоматически находить различные уязвимости, включая XSS.
Вы можете выполнить автоматическое сканирование целевого сайта, после чего Burp Suite предоставит отчет с найденными уязвимостями.
Хотя автоматическое сканирование может быть полезно, оно не всегда находит все уязвимости, и ручное тестирование также необходимо.

Примеры полезных нагрузок для XSS

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

1. Простая проверка:

<script>alert('XSS')</script>

2. Полезная нагрузка для обхода фильтров:

<img src=x onerror=alert('XSS')>

3. Встраивание события в атрибут:

<body onload=alert('XSS')>

4. Попытка использования кодировки:

<script>alert&#40;'XSS'&#41;</script>

Меры защиты от XSS

Чтобы предотвратить XSS, разработчики должны следовать ряду практик:

1. Экранирование данных: Все данные, которые выводятся на страницу, должны быть правильно экранированы (в HTML, JavaScript, атрибутах и т.д.).

2. Очистка вводимых данных: Все данные, вводимые пользователем, должны быть проверены и очищены перед обработкой.

3. Использование Content Security Policy (CSP): CSP помогает предотвратить выполнение неавторизованного JavaScript-кода на странице.

4. Использование библиотек для безопасного вывода данных: Например, библиотеки, такие как DOMPurify, могут помочь безопасно выводить пользовательские данные в DOM.

Заключение

Burp Suite — это мощный инструмент для тестирования веб-приложений на наличие уязвимостей, таких как XSS. С его помощью можно как вручную, так и автоматически находить потенциальные уязвимости, что делает его незаменимым инструментом для специалистов по безопасности. Однако важно помнить, что тестирование XSS требует внимательности и тщательного анализа всех точек ввода данных.

-2

Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам