HTML Injection → Stored XSS → Hijack accessToken
Во время анализа одного из веб-приложений наткнулся на поле, которое обрабатывает ввод без должной фильтрации.
Примечение: cервис фильтрует теги, поэтому XSS реализован с обходом — без явного использования скриптовых тегов.
Решил проверить — вставил простой HTML:
Test
Текст стал крупнее — значит innerHTML или подобная конструкция.
Далее потестировал теги:
Браузер создал элементы прямо в DOM. Очевидный признак HTML Injection, причём без CSP и фильтров. Поле сохраняется в базу ➡️ отображается в админке ➡️ возникает вопрос: можно ли это раскрутить до XSS?
➡️ Рабочий XSS-пэйлоад:
В данном случае он читает токен из localStorage и вызывает alert() с его значением.
Минус: работает не во всех браузерах и часто режется CSP, но в слабозащищённых фронтах может быть отличной стартовой точкой.
➡️ Эскалация XSS:
Пэйлоад делает внешний запрос на ваш сервер (например, Interactsh), передавая туда значение токена. Вместо всплывающего окна (alert) вы сразу получаете лог токена.
Важно: поле, в которое внедряется нагрузка, сохраняется в базе данных и отображается в административной панели. Это означает, что код выполняется от лица администратора при просмотре, что приводит к краже его токена и потенциальному захвату аккаунта.
➡️ Особенность уязвимости теги:
➡️ Что это даёт:
➡️ Советы для тестирования:
Во время анализа одного из веб-приложений наткнулся на поле, которое обрабатывает ввод без должной фильтрации.
Примечение: cервис фильтрует теги, поэтому XSS реализован с обходом — без явного использования скриптовых тегов.
Решил проверить — вставил простой HTML:
Test
Текст стал крупнее — значит innerHTML или подобная конструкция.
Далее потестировал теги:
Браузер создал элементы прямо в DOM. Очевидный признак HTML Injection, причём без CSP и фильтров. Поле сохраняется в базу ➡️ отображается в админке ➡️ возникает вопрос: можно ли это раскрутить до XSS?
➡️ Рабочий XSS-пэйлоад:
В данном случае он читает токен из localStorage и вызывает alert() с его значением.
Минус: работает не во всех браузерах и часто режется CSP, но в слабозащищённых фронтах может быть отличной стартовой точкой.
➡️ Эскалация XSS:
Пэйлоад делает внешний запрос на ваш сервер (например, Interactsh), передавая туда значение токена. Вместо всплывающего окна (alert) вы сразу получаете лог токена.
Важно: поле, в которое внедряется нагрузка, сохраняется в базе данных и отображается в административной панели. Это означает, что код выполняется от лица администратора при просмотре, что приводит к краже его токена и потенциальному захвату аккаунта.
➡️ Особенность уязвимости теги:
🔴Инъекция сохраняется в БД (Stored)
🔴Отрабатывает на стороне администратора
🔴Через XSS читается accessToken из localStorage
➡️ Что это даёт:
🔴Захват токена администратора
🔴Возможность делать запросы от его имени
🔴Потенциальный full access к admin-панели
➡️ Советы для тестирования:
🔴 Ищите HTML-теги, которые влияют на DOM (текст, форма, медиа)
🔴 Проверяйте innerHTML, outerHTML, dangerouslySetInnerHTML в React
🔴Тестируйте на img, input, iframe, svg, math, script и template
🔴 Не ограничивайтесь alert(1), пробуйте localStorage, fetch, document.cookie, navigator, location
🔴 Используйте Interactsh, Burp Collaborator, xsshunter для подтверждения уязвимости