Эффективные техники обхода WAF при XSS-инъекции

XSS уязвимость

Когда я начал заниматься багбаунти, одной из основных проблем для меня стала блокировка моих XSS-инъекций средствами защиты WAF. Моя цель заключалась в том, чтобы найти «универсальный» полезный XSS-пейлоад, который мог бы работать в большинстве случаев.

Обход WAF для XSS-инъекций

Первое, с чем я столкнулся, это программы, использующие Cloudflare. Хотя у Cloudflare хорошая репутация, его можно обойти различными пейлоадами, доступными на GitHub или Twitter. Вот несколько примеров, которые я использовал в своих тестах:

Часто используемый метод — это добавление префикса on к любому JavaScript-событию:

Моя задача состояла в том, чтобы найти обход для JavaScript-событий, чтобы использовать его в XSS-инъекциях с двойными кавычками в тех случаях, когда нельзя «перекрывать» тег и использовать классические инъекции тегов.

Во время поиска «волшебного» пейлоада я обнаружил несколько возможных точек инъекций. Однако большинство символов блокировались WAF, так как они находились в черном списке. Я начал исследовать левую часть от событий, и оказалось, что если добавить символ перед названием JavaScript-события, пейлоад принимался.

Описание Статус
WAF блокирует 403
Пейлоад проходит 200
Пейлоад синтаксически корректен Valid
Пейлоад синтаксически некорректен Invalid

Затем я начал экспериментировать с кавычками, которые можно было бы объединить с именем события:

Когда используется нечетное количество кавычек, это работает, но синтаксически некорректно, так как кавычки объединяются с именем события. Тогда я решил попробовать использовать HTML-сущности, которые являются псевдонимами для некоторых специальных символов. Заменив средние кавычки на сущность, пейлоад стал валидным и обошел WAF!

HTML-сущности очень полезны, когда символ & не фильтруется. Насколько мне известно, есть три типа сущностей:

Named Entities (именованные сущности), которые можно использовать для обхода:

Hex Entities (шестнадцатеричные сущности):

Numeric Entities (числовые сущности):

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

Лично я часто использую эти методы для загрузки своего скрипта после того, как XSS был обнаружен, загружая удаленный скрипт с помощью import или выполняя большой base64 eval:

Теперь о WAF-обходе. На некоторых WAF-ах этот пейлоад работает. Я протестировал его на известных системах, с которыми я сталкивался:

Imperva и Incapsula

Отлично работает на Imperva и Incapsula:

Amazon

Также хорошо работает для WAF-ов Amazon, включая CloudFront:

Akamai

Для Akamai мне пришлось добавить дополнительные кавычки, чтобы пейлоад сработал:

Заключение

Нахождение уязвимостей XSS и обход WAF требует изобретательности и экспериментов. В статье рассмотрены методы, которые могут помочь обойти защиту и выполнить инъекции, используя HTML-сущности и другие хитрости. Эти техники дают возможность найти уязвимости в защищенных системах и успешно применять XSS-инъекции в различных сценариях.

QUASAR

Этичный хакер и компьютерный ниндзя. Новые статьи в нашей Телеге!

Добавить комментарий