4.2.2 具体技术及平台框架

4.2.2 具体技术及平台框架

1.MetaSploit简介

通过前面的学习,我们可以归纳出漏洞利用技术中一些相对独立的过程。

(1)触发漏洞:缓冲区有多大,第几个字节可以淹没返回地址,用什么样的方法植入代码?

(2)选取Shellcode:执行什么样的Shellcode决定了漏洞利用的性质。例如,是作为安全测试而弹出的一个消息框,还是用于入侵的端口绑定、木马上传等。

(3)重要参数的设定:目标主机的IP地址、Bindshell中需要绑定的端口号、消息框所显示的内容、跳转指令的地址等经常需要在Shellcode中进行修改。

(4)选用编码、解码算法:在第3章中曾经介绍过,实际应用中的Shellcode往往需要经过编码(加密)才能安全地送入特定的缓冲区,执行时位于Shellcode顶部的若干条解码指令会首先还原出原始的Shellcode,然后执行。

2003年7月,H D Moore用Perl语言首次实现了这个天才的想法——MetaSploit 1.0。这是—种对漏洞测试的各个环节进行了封装、模块化、标准化的架构。使用这个架构,能够完成Exploit的快速开发,方便安全研究员进行攻击测试(Penetration Test)。如同所有的安全工具一样,MSF是一把双刃剑,攻击者从中也受益匪浅。

MetaSploit是开源、免费的架构,其中所有的校块都允许改写。因此,从诞生的时候开始,就得到了广大热心支持者的无私帮助,甚至很多漏洞的POC(Proof Of Concept)代码都以MSF的校块为标准发布的。

MetaSploit开发小组已经终止了对基于Perl语言的MSF 2.X系列的开发和支持,所有新添加的Exploit、Payload、Encoder等模块都将以Ruby语言以MSF 3.0为标准发布,本章的介绍将全部基于MSF 3.4.0。

MSF包含以下几种模块(如表4.3所示)。

表4.3 MSF包含的模块

2.使用MSF开发Shellcode

单击GUI界面中的“Payloads”按钮,将会显示MSF中所有的Shellcode。目前,MSF包含了可用于多种操作系统的Shellcode,共208个,并且仍在不断增加。我们这里选择“Windows Execute Command”,如图4.28所示。

图4.28 配置Shellcode

如图4.28所示,MSF将提示输入这个Shellcode的配置参数。

(1)EXITFUNC

指程序退出的方法,默认情况下一般是SEH,即产生异常时退出。我们这里选择process,即在程序结束时退出。

(2)CMD

这个Shellcode用于执行一条任意命令,所以需要在这里指明。比如我们使用calc,用于打开Windows的计算器。

(3)Max Sire

限制Shellcode的最大长度,这里可以忽略不填。

(4)Restricted Characters

Shellcode中需要避免使用的字节,默认情况下是0x00,即字符串结束符NULL,也可以避免使用多个字节,用0x XX的方式指明,并用空格隔开即可。

(5)Selected Encoder

选样编码算法,目前的MSF提供了23个编码算法,可供这个Shellcode使用的x86平台下的编码器有14个,在默认情况下将使用x86/shikata_ga_nai。这个编码器是由spoonm提供的,算法的主要思想是使用异或的方法,但是这里的实现更加完善。

(6)Format

设置导出格式,目前支持C语言、Ruby语言、Perl脚本、JavaScript和原始十六进制(通常显示为乱码)的形式。这里默认选择C语言,导出的Shellcode中将自动加上解码指令。

单击“Generate”按钮之后就能得到经过编码的高质量通用Shellcode了,如图4.29所示。

图4.29 生成Shellcode

3.使用MSF扫描跳板

MSF提供了许多附带的小工具,如netcat等,方便安全研究人员进行攻击测试。本节将介绍一个Exploit经常会用到的小插件msfpescan。

我们曾介绍过用Ollydbg插件和编程的方法搜索跳转指令地址。msfpescan就是这样一款在PE文件中扫描跳转指令并直接转化为VA的工具,它使用起来更加简单灵活。其用法如表4.4所示。

表4.4 msfpescan用法

假如我们想搜索kernel32.dll中类似jump ecx的指令,可以这样做:

(1)首先从开始菜单启动MSF 3.4.0的“Melasploit Console”;

(2)键入命令msfpescan-h可以查看这个工具的说明;

(3)键入命令msfpescan-f-j ecx c:/windows/system32/kernel32.dll扫描PE文件kernel32.dll,搜索其中类似jump ecx的指令地址,并转化成VA显示。