XSS: Reflected XSS — Отражённые межсайтовые сценарии
Что такое отражённые межсайтовые сценарии
Отражённые межсайтовые сценарии (или XSS) возникает, когда приложение получает данные в HTTP-запросе и включает эти данные в немедленный ответ небезопасным способом.
Предположим на веб-сайте есть функция поиска получающая введённый пользователем поисковый запрос в URL параметр:
https://insecure-website.com/search?term=gift
Приложение повторяет указанный поисковый запрос в ответе на этот URL:
<p>You searched for: gift</p>
Предполагая, что приложение не выполняет никакой другой обработки данных, злоумышленник можем построить атаку следующим образом:
https://insecure-website.com/search?term=
Этот URL приводит к следующему ответу:
<p>You searched for: <script>/* Bad stuff here... */</script></p>
Если другой пользователь запрашивает URL-адрес злоумышленника, то сценарий, предоставленный злоумышленником, будет выполняться в браузере пользователя-жертвы в контексте его сеанса с приложением.
Влияние Отражённых XSS атак
Если злоумышленник может управлять сценарием выполняющимся в браузере жертвы, то, как правило, он может полностью скомпрометировать этого пользователя. Помимо прочего, злоумышленник может:
- Выполнять любые действия внутри приложения, которые может выполнять пользователь.
- Просматривать любую информацию доступную пользователю.
- Изменять любу информацию, которую пользователь может изменить.
- Инициировать взаимодействие с другими пользователями приложения, в том числе вредоносные атаки, которые, как представляется, исходят от первоначального пользователя-жертвы.
Существую различные способы, с помощью которых злоумышленник может побудить пользователя-жертву сделать запрос, который он контролирует, для проведения отражённой XSS атаки. К ним относятся размещение ссылок на веб-сайте контролируемом злоумышленником, или на другом веб-сайте, который позволяет создавать контент, или путём отправки ссылки по электронной почте, в твиттере или другом сообщении. Атака может быть направлена непосредственно против известного пользователя или может быть неизбирательной атакой против любых пользователей приложения.
Необходимость во внешнем механизме доставки для атаки означает, что влияние отражённого XSS, как правило, менее серьёзно, чем сохранённого XSS, где автономная атака может быть осуществлена внутри самого уязвимого приложения.
Отражённый XSS в различных контекстах
Существует множество разновидностей отражённых межсайтовых сценариев. Расположение отражённых данных в ответе приложения определяет, какой тип полезной нагрузки требуется для их использования, а также может повлиять на воздействие уязвимости.
Кроме того, если приложение выполняет какую-либо проверку или другую обработку отправленных данных до их отражения, это, как правило, влияет на то, какой тип полезной нагрузки XSS необходим.
Как найти и протестировать Отражённые XSS уязвимости
Большинство отражённых уязвимостей межсайтовых сценариев можно быстро и надёжно найти с помощью сканера уязвимостей.
Ручная проверка Отражённых XSS уязвимостей включает следующие шаги:
- Тестирование каждой точки входа. Отдельно протестируйте каждую точку входа для данных в HTTP-запросах приложения. Сюда входят параметры или другие данные в строке запроса URL-адреса и тексте сообщения, а также путь к файлу URL-адреса. Он также включает HTTP-заголовки, хотя XSS-подобное поведение, которое может быть вызвано только определёнными HTTP-заголовками, на практике может быть непригодным для использования.
- Отправляйте случайные буквенно-цифровые значения. Для каждой точки входа отправьте уникальное случайное значение и определите, отражено ли это значение в ответе. Значение должно быть скорректировано таким образом, чтобы выдержать большую часть проверки ввода, поэтому оно должно быть достаточно коротким и содержать только буквенно-цифровые символы. Но оно должно быть достаточно длинным, чтобы случайные совпадения в ответе были маловероятны. Обычно идеально подходит случайное буквенно-цифровое значение длинной около 8 символов.
- Определите контекст отражения. Для каждого места в ответе, где отражается случайное значение, определите его контекст. Это может быть текст между HTML-тегами, внутри атрибута тега, который может быть заключён в кавычки, внутри строки JavaScript и т.д.
- Тестирование потенциальной полезной нагрузки. В зависимости от контекста отражения протестируйте первоначальную полезную нагрузку XSS-кандидата, которая вызовет выполнение JavaScript, если она будет отражена в ответе без изменений. Эффективный способ проверки — оставить исходное случайное значение в запросе и поместить потенциальную полезную XSS-нагрузку до него и после него.
- Тестирование альтернативной полезной нагрузки. Если полезная нагрузка-кандидат XSS была изменена приложением или полностью заблокирована, вам потребует протестировать альтернативные полезные нагрузки и методы, которые могут обеспечивать работающую XSS-атаку, в зависимости от контекста отражения и типа выполняемой проверки ввода. Дополнительные сведения см. в статье Контексты межсайтовых сценариев
- Протестируйте атаку в браузере. Наконец, если вам удастся найти реальную нагрузку, которая работает в сканере уязвимостей, перенесите атаку на реальный браузер и посмотрите действительно ли выполняется JavaScript. Часто лучше выполнить какой-нибудь простой JavaScript, такой, как
alert(document.domain)
, который вызовет видимое всплывающее окно в браузере, если атака будет успешной.
Общие вопросы от отражённых межсайтовых сценариях
В чём разница между Отражённым XSS и Сохранённым XSS?
Отражённый XSS возникает, когда приложение получает некоторые данные из HTTP-запроса и встраивает эти данные в немедленный ответ небезопасным способом. С [Сохранённым XSS](/articles/security/stored-xss/) приложение вместо этого сохраняет ввод и встраивает его в более поздний ответ небезопасным способом.
В чём разница между Отражённым XSS и Self-XSS?
Собственный XSS (Self-XSS) включает поведение приложения, аналогичное обычном Отражённому XSS, однако его нельзя запустить обычными способами с помощью созданного URL-адреса или междоменного запроса. Вместо этого уязвимость сработает только в том случае, если жертва сама отправит полезную нагрузку XSS из своего браузера. Self-XSS атака обычно включает в себя социальную инженерию жертвы, чтобы она вставила некоторые данные, предоставленные злоумышленником, в свой браузер. Поэтому это считается малоэффективной проблемой.