#6 Исследование уязвимости Stored XSS (Средний уровень).
Продолжим рассматривать уязвимость Stored XSS, и теперь рассмотрим средний уровень безопасности.
Предлагаю, для начала работы сбросить базу данных, чтобы очистить наши предыдущие действия. Переходим в веб-приложение «DVWA», на вкладку «Setup», жмем кнопку «Reset Database»:
Получим вывод некоторых параметров:
И если мы перейдем на вкладку «XSS stored», то все записи будут удалены:
Собственно, этого мы и добивались. Также нам нужно изменить уровень безопасности на «Medium»:
И переходим на вкладку «XSS stored».
Обратите внимание на то, что на среднем уровне безопасности у нас нет возможности вставки кода в поле «Message». Наша задача будет заключаться в том, чтобы сделать инъекцию в поле «Name». Давайте экспериментировать, и сначала попробуем привычный нам уже код, попытавшись вставить его в поле «Name». Первая проблема, при вставке, заключается в том, что в данном поле существует ограничение на символы. Мы не сможем вставить полностью наш скрипт:
Это ограничение легко обойти. Жмем правой кнопкой мыши в поле «Name», и выбираем «Inspect Element». Попадаем на «Input», в котором меняем значение «maxlength» на 100 (для примера):
Вставляем наш скрипт (<script>alert(«Stored XSS»)</script>) в поле «Name» и добавляем запись «test», в поле «Message»:
Жмем кнопку «Sign Guestbook», и ничего не происходит:
Причина в фильтрации нашего скрипта, так как, исходя из гостевой записи, у нас отсутствуют теги «script». Нам нужно обойти данный фильтр. Мы уже делали это, и нам нужно прописать заглавные буквы в тегах скрипт. Запись будет иметь вид: <sCripT>alert(«Stored XSS»)</ScripT>.
Проделаем все шаги вновь, и получим результат:
Мы с легкостью обошли данный фильтр, и проэксплуатировали данную уязвимость.
Давайте продолжим наши исследования, и рассмотрим данную уязвимость, с фильтрацией кавычек, так как многие сайты используют этот метод для фильтрации одиночных и даже двойных кавычек. В результате чего происходит удаление этих символов.
Что мы можем предпринять в этом случае? Можно использовать функцию «String.fromCharCode», и внутри ее нужно сделать запись в виде кодировки символов («charcode»).
Чтобы провести конвертацию, нам понадобится калькулятор «charcode calculator». Поищем в интернете подходящий.
При переходе на сайт я введу название для преобразования: «Stored XSS 2»:
Копируем сгенерированный код и вставляем его в скрипт, который будет выглядеть как: <sCripT>alert(String.fromCharCode(83, 116, 111, 114, 101, 100, 32, 88, 83, 83, 32, 50))</ScRIPT>.
Далее нам нужно просто запустить его. Я изменил некоторые буквы прописными в тегах «script», для обхода фильтрации.
Повторяем те же шаги, что и в предыдущем примере. Меняем длину на 100 символов в исходном коде, и вставляем скрипт в поле «Name», а простой текст, в поле «Message»:
Мы видим первый вывод уязвимости XSS. Жмем кнопку «Ok» и получаем:
Наш скрипт успешно работает, и мы видим вывод второго окна, с записью «Stored XSS 2».
На этом все. Всем хорошего дня.
#1 Что такое уязвимость XSS (Cross Site Scripting)? Типы XSS.
#2 Исследование Reflected XSS (уровень Low).
#3 Исследование Reflected XSS — Средний уровень.