Вопрос или проблема
Я начинающий охотник за уязвимостями и в настоящее время ищу уязвимости XSS в поле поиска, где результаты поиска отображаются на странице следующим образом:
Результат поиска –
<script>alert(1)</script>
Приложение позволяет использовать определенные специальные символы, такие как #
, $
, %
, -
, /
и \
, но блокирует и кодирует <
и >
. Например, когда я пытаюсь сделать запрос с полезной нагрузкой <script>alert(1)</script>
, символы <
и >
кодируются в HTML.
Есть ли способ обойти это кодирование и вызвать XSS?
Ответ или решение
Для обхода HTML-кодирования и возможного использования уязвимостей XSS в поле поиска, рассмотрим несколько вариантов, даже если данный конкретный случай уже блокирует использование <
и >
.
Анализ ситуации
Ваша задача состоит в том, чтобы попытаться вызвать выполнение скрипта при выводе результатов поиска, даже если символы <
и >
кодируются в HTML. Важно понимать, что XSS-уязвимости возникают, когда пользовательские данные не проверяются и не фильтруются должным образом перед отображением на веб-странице.
Возможные подходы для обхода
-
Использование других специальных символов:
Если вам разрешают другие специальные символы, попробуйте использовать JavaScript-выражения или ХТМЛ-коды для представления небезопасных символов. Например, вы можете использовать:<
(для<
) и>
(для>
), если механизмы обработки действительно не позволяют вставлять их напрямую.- Используйте JavaScript-синтаксис для создания тега. Например,
javascript:/*<script>alert(1)</script>*/
илиdocument.write('<sc' + 'ript>alert(1)</sc' + 'ript>');
.
-
Обфускация кода:
Попробуйте обфусцировать свой скрипт. Например, вы можете использовать различные кодировки или разбивать тег на части, влияя на то, как он выводится. Это не всегда работает, но метод обфускации может привести к успешному выполнению кода. -
Событие
onerror
илиonload
:
Если есть возможность внедрения изображений или других элементов, используйте события, такие какonerror
илиonload
, чтобы вызвать ваш JavaScript-код. Например:<img src="invalid-image" onerror="alert(1)">
-
Строки и массивы:
Если приложение предпринимает попытки фильтрации, работа с массивами и строками может позволить вам выполнить скрытые команды. Рассмотрите возможность многократного разделения строк, чтобы составить ваш JavaScript-код.
Заключение
Каждый из предложенных методов может не сработать в зависимости от конкретных механизмов фильтрации и обработки пользовательского ввода на целевом сайте. Поэтому важно проводить тестирование на каждом из них и обращать внимание на особенности реализации соответствующего веб-приложения. Работа с XSS-уязвимостями требует постоянного изучения и адаптации к изменяющимся технологиям веб-безопасности.
Не забывайте о правовых аспектах тестирования на уязвимости и всегда действуйте в рамках разрешенных вами условий.