#6 Исследование уязвимости Stored XSS (Средний уровень).
Продолжим рассматривать уязвимость Stored XSS, и теперь рассмотрим средний уровень безопасности.
Предлагаю, для начала работы сбросить базу данных, чтобы очистить наши предыдущие действия. Переходим в веб-приложение «DVWA», на вкладку «Setup», жмем кнопку «Reset Database»:
![Предлагаю, для начала работы сбросить базу данных, чтобы очистить наши предыдущие действия.](https://timcore.ru/wp-content/uploads/2021/06/001-5-1024x823.png)
Получим вывод некоторых параметров:
![Получим вывод некоторых параметров](https://timcore.ru/wp-content/uploads/2021/06/002-5-1024x828.png)
И если мы перейдем на вкладку «XSS stored», то все записи будут удалены:
![И если мы перейдем на вкладку «XSS stored», то все записи будут удалены](https://timcore.ru/wp-content/uploads/2021/06/003-4-1024x825.png)
Собственно, этого мы и добивались. Также нам нужно изменить уровень безопасности на «Medium»:
![Собственно, этого мы и добивались. Также нам нужно изменить уровень безопасности на «Medium»](https://timcore.ru/wp-content/uploads/2021/06/004-4-1024x827.png)
И переходим на вкладку «XSS stored».
Обратите внимание на то, что на среднем уровне безопасности у нас нет возможности вставки кода в поле «Message». Наша задача будет заключаться в том, чтобы сделать инъекцию в поле «Name». Давайте экспериментировать, и сначала попробуем привычный нам уже код, попытавшись вставить его в поле «Name». Первая проблема, при вставке, заключается в том, что в данном поле существует ограничение на символы. Мы не сможем вставить полностью наш скрипт:
![Наша задача будет заключаться в том, чтобы сделать инъекцию в поле «Name».](https://timcore.ru/wp-content/uploads/2021/06/005-4-1024x828.png)
Это ограничение легко обойти. Жмем правой кнопкой мыши в поле «Name», и выбираем «Inspect Element». Попадаем на «Input», в котором меняем значение «maxlength» на 100 (для примера):
![Жмем правой кнопкой мыши в поле «Name», и выбираем «Inspect Element». Попадаем на «Input», в котором меняем значение «maxlength» на 100 (для примера)](https://timcore.ru/wp-content/uploads/2021/06/006-4-1024x824.png)
Вставляем наш скрипт (<script>alert(«Stored XSS»)</script>) в поле «Name» и добавляем запись «test», в поле «Message»:
![Вставляем наш скрипт поле «Name» и добавляем запись «test», в поле «Message»](https://timcore.ru/wp-content/uploads/2021/06/007-2-1024x820.png)
Жмем кнопку «Sign Guestbook», и ничего не происходит:
![Жмем кнопку «Sign Guestbook», и ничего не происходит](https://timcore.ru/wp-content/uploads/2021/06/008-1-1024x824.png)
Причина в фильтрации нашего скрипта, так как, исходя из гостевой записи, у нас отсутствуют теги «script». Нам нужно обойти данный фильтр. Мы уже делали это, и нам нужно прописать заглавные буквы в тегах скрипт. Запись будет иметь вид: <sCripT>alert(«Stored XSS»)</ScripT>.
Проделаем все шаги вновь, и получим результат:
![нам нужно прописать заглавные буквы в тегах скрипт.](https://timcore.ru/wp-content/uploads/2021/06/009-1-1024x825.png)
Мы с легкостью обошли данный фильтр, и проэксплуатировали данную уязвимость.
Давайте продолжим наши исследования, и рассмотрим данную уязвимость, с фильтрацией кавычек, так как многие сайты используют этот метод для фильтрации одиночных и даже двойных кавычек. В результате чего происходит удаление этих символов.
Что мы можем предпринять в этом случае? Можно использовать функцию «String.fromCharCode», и внутри ее нужно сделать запись в виде кодировки символов («charcode»).
Чтобы провести конвертацию, нам понадобится калькулятор «charcode calculator». Поищем в интернете подходящий.
При переходе на сайт я введу название для преобразования: «Stored XSS 2»:
![Чтобы провести конвертацию, нам понадобится калькулятор «charcode calculator».](https://timcore.ru/wp-content/uploads/2021/06/010-1.png)
Копируем сгенерированный код и вставляем его в скрипт, который будет выглядеть как: <sCripT>alert(String.fromCharCode(83, 116, 111, 114, 101, 100, 32, 88, 83, 83, 32, 50))</ScRIPT>.
Далее нам нужно просто запустить его. Я изменил некоторые буквы прописными в тегах «script», для обхода фильтрации.
Повторяем те же шаги, что и в предыдущем примере. Меняем длину на 100 символов в исходном коде, и вставляем скрипт в поле «Name», а простой текст, в поле «Message»:
![Меняем длину на 100 символов в исходном коде, и вставляем скрипт в поле «Name», а простой текст, в поле «Message»](https://timcore.ru/wp-content/uploads/2021/06/011-1-1024x826.png)
Мы видим первый вывод уязвимости XSS. Жмем кнопку «Ok» и получаем:
![Мы видим первый вывод уязвимости XSS. Жмем кнопку «Ok» и получаем](https://timcore.ru/wp-content/uploads/2021/06/012-1-1024x830.png)
Наш скрипт успешно работает, и мы видим вывод второго окна, с записью «Stored XSS 2».
На этом все. Всем хорошего дня.
#1 Что такое уязвимость XSS (Cross Site Scripting)? Типы XSS.
#2 Исследование Reflected XSS (уровень Low).
#3 Исследование Reflected XSS — Средний уровень.