12.12.2015

Практический веб-хакинг. Часть 1 – Обход XSS-фильтров

image

Мы начинаем серию статей, посвященную практическому использованию уязвимостей в веб-проектах. Чтобы вы могли попробовать свои силы, была создана специальная тренировочная площадка. В первой части (Уровень 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">


Рисунок 2: Редактирование свойств элемента Site 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-фильтров на стороне клиента: