#4 Исследование Reflected XSS — (Сложный уровень).
Продолжим исследования уязвимости Reflected XSS. Cмысл предыдущих инъекций заключалась в том, что мы вставляли их в код HTML. Вспомните запись вида: «<script>alert(«Reflected XSS»)</script>». Ее можно видоизменить различными способами, к примеру используя cheet sheet.
На самом деле подходы к обнаружению уязвимости XSS довольно обширны, и нет какого-либо общего вектора для исследования. Вам просто нужно пытаться найти уязвимости, исходя из особенностей веб-страницы. Для рассмотрения следующего примера, мне понадобится веб-приложение Metasploitable 2, которое называется «Mutillidae» нам в меню выбрать следующие опции: «OWASP Top 10» — «A1 — Injection» — «JavaScript Injection» — «Password Generator»:
![Password Generator](https://timcore.ru/wp-content/uploads/2021/06/001-3-1024x818.png)
Эта страница представляет собой генератор паролей. Мы можем нажать на кнопку «Generate»:
![Эта страница представляет собой генератор паролей. Мы можем нажать на кнопку «Generate»](https://timcore.ru/wp-content/uploads/2021/06/002-3-1024x821.png)
В итоге мы получили сгенерированный пароль. Можно шаги по генерации проделывать снова и снова. Если мы детально рассмотрим вывод на странице, то обнаружим, что данный пароль был сгенерирован для пользователя «Anonymous»:
![Если мы детально рассмотрим вывод на странице, то обнаружим, что данный пароль был сгенерирован для пользователя «Anonymous»](https://timcore.ru/wp-content/uploads/2021/06/003-2-1024x825.png)
Теперь перейдем в URL веб-страницы, и заметим, что в параметре указано имя «Anonymous»:
![Теперь перейдем в URL веб-страницы, и заметим, что в параметре указано имя «Anonymous»](https://timcore.ru/wp-content/uploads/2021/06/004-2-1024x825.png)
Мы можем изменить этот параметр, на любое другое имя. Возьму, к примеру «Timcore»:
![Мы можем изменить этот параметр, на любое другое имя. Возьму, к примеру «Timcore»](https://timcore.ru/wp-content/uploads/2021/06/005-2.png)
Нужно заметить, что отображение данных на странице, при вводе в URL, наводит на мысль, что здесь существует уязвимость XSS, так как все, что Вы вводите, отображается на странице.
Давайте попытаемся сделать инъекцию в код данной веб-страницы, посредством уже известного нами скрипта: «<script>alert(«Reflected XSS»)</script>», в URL:
![Давайте попытаемся сделать инъекцию в код данной веб-страницы](https://timcore.ru/wp-content/uploads/2021/06/006-2-1024x824.png)
Как Вы можете видеть, скрипт не сработал, так как мы не видим привычного всплывающего окна, с текстом «Reflected XSS», но часть кода появилась на веб-странице. По идее, его не должно быть, так как мы в предыдущем примере вводили имя, и ничего не происходило. Это зацепка, для дальнейших действий.
Давайте исследуем элемент кода, который вывелся на странице, с помощью инспектора кода. Наводим курсор мыши на код, и жмем правую кнопку мыши, и выбираем «Inspected Element»:
![Наводим курсор мыши на код, и жмем правую кнопку мыши, и выбираем «Inspected Element»](https://timcore.ru/wp-content/uploads/2021/06/007-1-1024x824.png)
Мы перемещаемся на открывающий и закрывающий теги «blockqoute».
Находим сломанный код, и он выглядит как:
![Мы перемещаемся на открывающий и закрывающий теги «blockqoute».](https://timcore.ru/wp-content/uploads/2021/06/008-1024x821.png)
На этой странице происходит автоматическое размещение введенных данных в два тега <script>. Исходя из этого мы можем сделать вывод, что эти теги не нужны, и мы уберем их из нашего скрипта.
Обратите внимание на код, в скрипте нет закрывающего тега <script>:
![Обратите внимание на код, в скрипте нет закрывающего тега script](https://timcore.ru/wp-content/uploads/2021/06/009-1024x826.png)
Еще можно обнаружить в записи одну кавычку:
![Еще можно обнаружить в записи одну кавычку](https://timcore.ru/wp-content/uploads/2021/06/010-1024x823.png)
Нам просто необходимо закрыть кавычку еще одним символом. Запись примет вид: «“ alert(„Reflected XSS“)». Это нужно для того, чтобы была запись функции в чистом виде, без лишних символов.
Давайте окинем взглядом наш код на JavaScript. Вначале у нас идет первая строка кода: «document.getElementById». Для того, чтобы эксплуатировать эту уязвимость, на обязательно быть программистом JavaScript. Вам нужно понимать, как все работает.
Нас интересует InnerHTML, с дальнейшей записью, которую мы пытаемся закрыть дополнительной кавычкой, убрав тег script. В языке программирования JavaScript, для того, чтобы завершить строку, необходимо вставить символ точка с запятой «;». Смотрите, что мы делаем. Логика заключается в том, чтобы закрыть первую строку, которая завершается вставленной нами кавычкой. Запись примет вид „ ;alert(„Reflected XSS“). Как Вы уже догадались, нам нужно добавить дополнительный символ «;», в конец второй строки. Это будет выглядеть как: „ ;alert(„Reflected XSS“);.
Давайте попробуем ввести наш преобразованный код в строку URL:
![Давайте попробуем ввести наш преобразованный код в строку URL](https://timcore.ru/wp-content/uploads/2021/06/011-1024x819.png)
Как видим, ничего не произошло. Нам нужно просмотреть исходный код страницы вновь. Жмем кнопку «Generate», и далее переходим в инспектор элементов. Получаем вывод следующего кода:
![Жмем кнопку «Generate», и далее переходим в инспектор элементов. Получаем вывод следующего кода](https://timcore.ru/wp-content/uploads/2021/06/012-1024x826.png)
Обратите внимание на запись после innerHTML. Наша закрывающая кавычка на месте, и в целом запись идет по нашему сценарию, вплоть до закрытия кода, с помощью символов «“;». Это все жестко прописано в коде, но мы можем воспользоваться методом, который применяется при SQL-инъекциях, а именно методом комментирования. Комментарии имеют вид двух прямых слэшей: «//». Вставляем их в наш код: «„ ;alert(„Reflected XSS“);//», и копируем в адресную строку браузера:
![„ ;alert(„Reflected XSS“);//](https://timcore.ru/wp-content/uploads/2021/06/013-1024x814.png)
Наш код запустился, и мы смогли проэксплуатировать эту уязвимость.
Важно помнить то, что методы, которые Вы используете при поиске уязвимостей, не только XSS и SQL-инъекции, вообще любых уязвимостей, будут отличаться от сайта к сайту. Поэтому нужно тщательно исследовать веб-страницы, смотреть их исходный код, смотреть как данные передаются между сайтами.
#1 Что такое уязвимость XSS (Cross Site Scripting)? Типы XSS.