3.1 轻而易举实现的Web攻击——Metasploit攻击
Metasploit是一款开源的安全漏洞检测工具,同时又是免费的,因此安全工作人员常用Metasploit工具来检测系统的安全性。Metasploit Framework(MSF)在2003年以开放源码方式发布,是可以自由获取的开发框架。它是一个强大的开源平台,供开发、测试和使用恶意代码,这个环境为渗透测试、shellcode编写和漏洞研究提供了一个可靠平台。
这种可以扩展的模型将负载控制(payload)、编码器(encode)、无操作生成器(nops)和漏洞整合在一起,使Metasploit Framework成为一种研究高危漏洞的途径。它集成了各平台上常见的溢出漏洞和流行的shellcode,并且不断更新。
Metasploit目前的版本收集了数百个实用的溢出攻击程序及一些辅助工具,让人们使用简单的方法完成安全漏洞检测,即使一个不懂安全的人也可以轻松地使用它。当然,它并不只是一个简单的收集工具,提供了所有的类和方法,让开发人员使用这些代码方便快速地进行二次开发。
3.1.1 Metasploit环境的搭建与安装
1.Windows环境下安装
从官方网站http://www.metasploit.com/下载Windows版本的安装版,直接安装即可。安装的版本是3.5.1。安装时需要注意以下几点。
(1)在安装时要关闭杀毒软件,否则会导致杀毒软件和Metasploit冲突,导致安装失败。
(2)在控制面版——区域和语言选项——选择英文(美国)——高级选项卡中选择英文(美国)。因为在安装时会进行检测,如果属于非英文地区会导致安装失败。
(3)如果安装有杀毒软件,会经常提示在Metasploit的安装目录下检测到病毒或木马。
2.Linux环境下安装
官方网站提供了两种Linux下的安装方式,一种是打包好的Metasploit安装包,如framework-3.5.1-linux-i686.run,里面包含了安装所需要的各种包,下载后直接在电脑上安装即可。安装时需要具有root权限。如果装有杀毒软件,在安装时需要关闭杀毒软件。另一种是源码包方式,下载到本机后自己安装。需要事先安装各种所信赖的包,安装后需要进行一定的配置,较为麻烦。
1 登录官方网站http://www.metasploit.com/,如图3-1所示。
图3-1 Metasploit官网首页
2 单击网站首页的下载图标,进入下载页面。
3 在下载页面中,找到标题为Metasploit Framework的选项区,单击“For Windows: 32-Bit”选项,进行下载,如图3-2所示。
图3-2 下载页面
3.安装Metasploit软件步骤详解
1 单击“Setup”对话框中的“Next”按钮,如图3-3所示。
图3-3 开始安装
2 勾选“I accept the agreement”单选按钮,单击“Next”按钮,如图3-4所示。
图3-4 接受协议
3 单击文件夹图标选择安装软件的位置,单击“Next”按钮,如图3-5所示。
图3-5 选择安装位置
4 阅读文本框中的内容,单击“Next”按钮,如图3-6所示。
图3-6阅读安装信息
5 填写“SSL Port”(SSL端口号),单击“Next”按钮,如图3-7所示。
图3-7 填写端口号
6 填写“Server Name”(服务名称)、“Days of validity”(有效日期),并且勾选上“Yes, trust certifi cate”复选框,单击“Next”按钮,如图3-8所示。
图3-8 填写信息
7 在“Ready to Install”对话框中单击“Next”按钮,如图3-9所示。
图3-9 安装就绪
8 等待Metasploit安装,可能要数分钟,如图3-10所示。
图3-10 安装过程
9 在弹出的安装界面上,勾选“Access Metasploit Web UI? ”复选框,单击“Finish”按钮,如图3-11所示。
图3-11 安装完成
10 桌面会弹出一个boot.html文件,关闭即可,如图3-12所示。至此Metasploit安装成功。。
图3-12 安装信息
3.1.2 Metasploit使用教程详解
1.Metasploit操作指令
msf >show exploits:显示Metasploit目前所能够测试的所有漏洞及相关描述。
msf >use windows/smb/ms06_040_netapi:选择ms06_040进行测试。
msf>info:显示当前所选漏洞的描述信息。
msf>show targets:显示当前所选漏洞能够影响的操作系统。
msf>set target 0:设置target为0,即自动识别Windows 2000和Windows XP系统。
msf>show payloads:显示可适合于当前所选漏洞的shellcode。
msf>set payload windows/adduser:选用adduser为shellcode。
msf>show options:显示当前所选漏洞和shellcode需要配置的选项。
msf>set RHOST XX.XX.XX.XX:按照show options的提示设置目标主机地址。
msf>set PASS XXXXXXXXXXX:按照show options的提示设置账户密码。
msf>set USER XXXXXX:按照show options的提示设置用户名。
msf>exploit:进行攻击测试。
Metasploit操作界面如图3-13所示。
图3-13 Metasploit操作界面
2.Metasploit攻击方法分类
总的来说,exploits共分为两类溢出攻击方法,即主动溢出和被动溢出。主动溢出是针对目标主机的漏洞主动地进行攻击以获得控制权限;被动溢出是针对目标主机被动地监听然后获得相应的操作。在所有的exploit中,针对Windows平台的比其他所有平台的总和还要多。
缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root权限的shell。为了达到这个目的,攻击者必须达到以下两个目标。
(1)在程序的地址空间里安排适当的代码。
(2)通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。
每当一个函数调用发生时,调用者会在堆栈中留下一个活动记录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类缓冲区溢出被称为堆栈溢出攻击(Stack Smashing Attack),是目前最常用的缓冲区溢出攻击方式。
在Metasploit中溢出模块共分为13种,分别是ais、bsdi、dialup、freebsd、hpux、irix、linux、multi、netware、osx、solaris、unix、windows。其中windows下面的最多。
Metasploit整体架构如图3-14所示。
图3-14 Metasploit整体架构
3.Metasploit的攻击流程详解
(1)获得EIP。IP是指令寄存器,存放当前指令的下一条指令的地址,CPU该执行哪条指令就是通过IP来指示的。EIP为32位机的指令寄存器,存放的是相对地址,也就是基于段基址的偏移值。CPU的ESP寄存器存放当前线程的栈顶指针,EBP存放当前线程的栈底指针。
(2)插入Shellcode。Shellcode实际上是一段代码或填充数据,用来发送到服务器利用特定的漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。Shellcode是溢出程序或病毒的核心,主要对没有打补丁的主机有作用。Shellcode一般用C语言或汇编语言编写,C语言编写较快,汇编语言便于控制Shellcode的生成。一个Shellcode只能为特定的平台所使用,不能供多个溢出程序、操作系统使用。
Shellcode既可以是本地的也可以是远程的。本地Shellcode主要是一名攻击者为了获取本地计算机权限,如一段缓冲区溢出程序成功执行后可以获得一定的权限。
远程Shellcode主要是一名攻击者为了获得本地网络或互联网上另一台主机的控制权限,如果成功后攻击者可以通过网络获得目标主机的控制权限。如果它可以连接攻击者和被攻击者,称为反向连接Shellcode。如果它通过绑定一个相应的端口来进行控制,称为bindshell。
第三种Shellcode非常特殊,它在目标机上创建一个可以让攻击者重复利用的连接,而这个连接是建立在目标机现有的连接之上,并不创建新的连接。这种Shellcode最难创建也最不容易被检测。
(3)反向连接shell即将目标主机当作服务器,攻击者机器作为客户端。
(4)添加用户或其他。