Мы начинаем серию статей, посвященную практическому использованию уязвимостей в веб-проектах. Чтобы вы могли попробовать свои силы, была создана специальная тренировочная площадка. В первой части (Уровень 1) будет рассказано о том, как обходить XSS-фильтры (HTML5/Javascript) на стороне клиента.
Автор: 1N3(@CrowdShield)
Введение
Мы начинаем серию статей, посвященную практическому использованию уязвимостей в веб-проектах. Чтобы вы могли попробовать свои силы, была создана специальная тренировочная площадка. В первой части (Уровень 1) будет рассказано о том, как обходить XSS-фильтры (HTML5/Javascript) на стороне клиента.
Исследование элемента Site Name
Поскольку web-приложение кодирует символы «<» и «>», нам нужно проверить, где происходит обработка – на стороне клиента или на стороне клиента. Если на стороне клиента (HTML5/Javascript), тогда подобную проверку можно обойти. Открываем страницу в любом браузере, кликаем правой кнопкой мыши на форме «Site Name» и в контекстном меню выбираем пункт "Inspect Element". Откроется окно с редактированием свойств элементов.
Рисунок 1: Выбор элемента для исследования
Удаление ограничений на стороне клиента
Увеличьте значение в поле maxsize и удалите поле pattern, как показано ниже:
<input type="text" placeholder="Name of site" maxsize="
100" class="form-control" required="" name="name">
Удаление кода, отвечающего за кодирование символов
Скорее всего, обработка символов "<" и ">" происходит через файл ex1.js (Javascript), и вначале мы должны подредактировать javascript-код на стороне клиента. Изменить javascript можно через плагин Web Developer. Зайдите во вкладку Sources и удалите код, отвечающий за кодирование HTML-символов:
var siteName = $(".ex1 input[type='text']").val().trim().replace(/</g, "<").replace(/>/g, ">");
var siteURL = $(".ex1 input[type='url']").val().trim().replace(/</g, "<").replace(/>/g, ">");
Рисунок 3: Редактирование файла ex1.js
Добавление полезной нагрузки
После того как на стороне клиента удалена обработка символов, добавьте в поле Site Name следующую полезную нагрузку и нажмите на Submit.
<script>alert('Ex1')</script>
Рисунок 4: Добавление полезной нагрузки
Результат
В результате всех манипуляций мы успешно инжектировали в страницу полезную нагрузку. Чтобы защититься от подобных атак, проверка данных, вводимых пользователем, должна проходить на стороне сервера.
Видео демонстрация обхода XSS-фильтров на стороне клиента: