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. Что же, база для разминки, приступим...
Попробуем запихнуть в поле поиска самый простой payload для XSS.
<script>alert('XSS')</script>В данном примере payload абсолютно безвреден, однако, его успешное выполнение свидетельствует о том, что поле поиска уязвимо к XSS!
Lab: Reflected XSS into attribute with angle brackets HTML-encoded
В данной работе мы не сможем использовать наш предыдущий payload, так как угловые скобки закодированы в HTML. Попробуем обойти это ограничение. Мы можем попытаться обойти данное ограничение. Обойдемся вообще без HTML. Попробуем использовать силу чистого JS. Есть событие onMouseOver, которое срабатывает при наведении на него курсора. Попробуем присвоить ему срабатывание alert. Наш payload будет выглядеть следующим образом:
"onMouseOver="alert('XSS')Лаба оказалась ненамного сложнее, нужно было лишь немного подумать над способом обхода незначительных ограничений.
Вывод
На этом вводная статья подходит к концу, однако в дальнейшем продолжим разбираться с XSS, разбирая другие векторы и наращивая сложность рассматриваемых задач.