Кибербезопасность
December 4, 2024

PortSwigger Web Academy - XSS Labs

Сегодня разберем еще парочку простеньких XSS.

1.) Lab: Stored XSS into HTML context with nothing encoded

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

Хмм... Посмотрим, какой функционал будет досутпен при просмотре поста
Отлично! Мы можем оставлять комментарии к постам в блоге, это то что нам нужно

Попробуем вписать в поле самого комментария самый банальный payload:

<script>alert('Stored XSS detected!')</script>

Оставшиеся поля заполним простой информацией и посмотрим на реакцию приложения.

Так выглядит наш комментарий перед отправкой
Вуаля, мы проэксплуатировали Stored-XSS, лаба выполнена!

Lab: DOM XSS in document.write sink using source location.search

Начнем с короткого теоретического ликбеза. Данный тип XSS выполняется на клиентской стороне приложения - не отражается и не хранится на сервере. При возникновении данной уязвимости приложение отображает вредоносный код как часть DOM.

DOM (document objetc model) - объектная модель, которую браузер создает на основе полученного HTML. Важно отметить, что в DOM-XSS не изменяется исходный HTML, изменяется именно DOM. Идем решать лабу!

В описании к лабе нас просять вызвать функцию alert и сильно намекают на document.write и location.search. Посмотрим, какой функционал сайта мы будем истязать для получения DOM-XSS...

Сразу бросается в глаза поиское поле

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

Вот интересующий нас участок кода

Наш поисковый запрос выполняется с помощью document.write. Непосредственно наш запрос располагается после searchTerms. Запихнуть банальный payload прямо в поисковое поле уже не выйдет, а жаль... Однако заметим, что мы также можем изменять URL, т.к. в нем отображается наш поисковый запрос. Что же, попробуем составить правильный payload и вписать его в URL.

"><svg onload=alert(1)>

Почему же payload именно такой??? Вообще составление правильного payload для XSS это уже почти гарантированный успех. Итак, объяснение!

"> - закрывает параметр и тег input, а остальное тело payload является базовым payload для svg. Почему svg? Данный payload мы можем использовать внутри тега img. Что же попробуем выполнить данный payload.

Успешное выполнение DOM XSS!

Вывод

Что? Куда? Ответы на эти вопросы полностью решают задачу успешной эксплуатации XSS. Составление правильного payload - сравни искусству! Упражняйтесь и ищите информацию в интернете:)

P.s. Хранимый XSS - самый опасный вид XSS, т.к. злоумышленнику достаточно отправить payload на сервер веб-приложения один раз, а жертва будет уязвима всякий раз, когда будет выполнять действия достаточные для выполнения полезной нагрузки (как в первом примере этой статьи)