Кибербезопасность
November 24, 2024

PortSwigger Web Academy - reflected XSS

Вводная часть

Сегодня будем разбирать Reflected(отраженный)-XSS. Отраженные XSS-атаки имеют наименьший impact среди всех векторов XSS из-за сложности организации и доставки до жертвы. Злоумышленник должен воспользоваться этой уязвимостью, отправив жертве ссылку, содержащую вредоносный скрипт. Когда жертва кликает на ссылку, скрипт выполняется в контексте браузера жертвы, что дает злоумышленнику возможность манипулировать данными пользователя или получить доступ к конфиденциальной информации. Отраженные XSS-атаки возможны в случае когда приложение должным образом не санитизирует пользовательский ввод и сразу отображает его. Более подробно будем разбираться на примерах лабораторных работ с PortSwigger Web Academy.

Lab: Reflected XSS into HTML context with nothing encoded

В описании к данной работе(жмак, чтобы перейти к лабе) нам предлагают проверить на уязвиомсть к XSS поисковое поле, вызвав в нем функцию alert. Что же, база для разминки, приступим...

Вот и подопытное поле, где мы будем искать XSS-ку

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

<script>alert('XSS')</script>
Что и требовалось доказать... Поле поиска уязвимо к XSS

В данном примере payload абсолютно безвреден, однако, его успешное выполнение свидетельствует о том, что поле поиска уязвимо к XSS!

На этом данная простенькая работа завершается

Lab: Reflected XSS into attribute with angle brackets HTML-encoded

В данной работе мы не сможем использовать наш предыдущий payload, так как угловые скобки закодированы в HTML. Попробуем обойти это ограничение. Мы можем попытаться обойти данное ограничение. Обойдемся вообще без HTML. Попробуем использовать силу чистого JS. Есть событие onMouseOver, которое срабатывает при наведении на него курсора. Попробуем присвоить ему срабатывание alert. Наш payload будет выглядеть следующим образом:

"onMouseOver="alert('XSS')
Теперь всплывающее сообщение появляется всякий раз, когда мы наводим мышку на поле, куда поместили payload

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

Вывод

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

Хочется лишь добавить про возможные способы защиты от XSS:

  • Используйте безопасные фреймворки и библиотеки, которые экранируют пользовательский ввод
  • Настройте политику безопасности контента (CSP) для предотвращения выполнения несанкционированного JS-кода
  • Фильтруйте и проверяйте данные на сервере