分类: linux |
简介
2003年,一种新的安全工具Metasploit Framework (MSF)被公布于众。它是首次以开放源代码方式发布、可自由获取的开发框架。在被公布的当年,MSF迅速在各地走红,成为最受安全社团欢迎的工具之一。 这应归功于MSF核心研发团队的努力以及世界各地志愿者的无私奉献。到目前为止,MSF(2.5版)内包含了105种针对当前流行的操作系统和应用软件的 exploit,并且这些插件在使用中非常可靠。在每个版本中,MSF会持续的增加新的exploit和不断的融合前沿的安全技术。
MSF所有版本都遵守GNU GPL许可,即任何人都可以自由下载、使用并修改它——前提是你也要接受GNU GPL。
在文章的开始,我们将讨论如何使用Metasploit Framework作为渗透攻击的平台。本部分的主要内容是msfconsole的使用——这是MSF提供的三种可用接口中最灵活强大的接口。接下来,本 章将围绕MSF一个最强大的却又往往被大多数人所忽略的特性展开——使用MSF在编写exploit能大大降低开发周期和对开发者背景知识要求。通过对一 个非开源web服务器的真实漏洞的实战,读者将学会如何使用MSF中的工具和特质快速构造一个独立的exploit用于进行可靠的缓冲区溢出攻击。通过对 MSF提供的一个用来集成exploit的模板逐行分析,本章会解释如何将一个exploit直接集成到MSF中。有关MSF引擎如何驱动被隐藏的漏洞利 用插件过程细节将被揭示。同时通过这种方法,读者将理解MSF的优势所在。
这篇文章既不面向初学者也不面向专家。本文的目的是详述MSF工具在融会渗透理论与实践之间差距的有用性。在开始本章阅读之前,读者应当了解缓冲区溢出的基本理论、具备一定的编程经验。
使用 Metasploit
Framework
Metasploit Framework利用Perl脚本语言编写,基本上能够在所有的类UNIX平台上运行,包括像Cygwin运行在Windows下的linux模拟环 境。MSF为使用者提供了三种界面:msfcli, msfweb, and msfconsole。Msfcli界面在编写脚本中非常有用,因为所有的exploit选项都是在命令行方式作为参数传递。Msfweb界面能通过浏览 器访问,适合当作一个非常优秀的弱点示范的方法来使用。Msfconsole界面是一个交互的命令行方式的shell,这是exploit开发最为推荐的 界面方式。
Msfconsole交互命令行界面提供了一个命令集,它允许用户轻松的设置MSF的环境变量,设置exploit选项并最后执行插件。不能被MSF识别的命令会传递到操作系统,这种方式,可让用户执行探测工具而不必离开控制台。以攻击Windows NT 4 下的IIS 4.0sp5为示范,我们像你展示如何使用msfconsole。
如图12.1所示,能在任何时候通过打问号?或者敲入help命令获得帮助。
图12.1
首先,用户使用show exploits命令列出了所有可用的exploit(见图12.2)
图12.2 msfconsole Exploit列表
鉴于我们的目标运行着IIS 4.0,我们选择使用IIS 4.0 .HTR Buffer Overflow exploit。利用info命令,用户可以查看这个exploit的各种不同方面的描述,包括目标主机的平台、使用该插件对目标对象的要求,payload设定、exploit描述,外部信息引用等。注意:在图12.3中,有效地目标包括Windows NT4 SP5,与我们实验中的被攻击目标主机平台相同。
图 12.3 查找 Exploit 相关信息
接着,用户使用use iis40_htr 命令选择了IIS 4.0 exploit。在MSF中,命令行输入可以象在Linux shell中那样键入部分命令,然后使用TAB键自动补全。比如在使用上一个命令中,我们可以简单的敲入use iis4,然后TAB键,系统会自动补充完整该命令。见图12.4,在使用上述命令后,命令行提示符会有所反映。
图 12.4 选择一个 Exploit
一旦选择了一个exploit,msfconsole界面会从完全模式进入到exploit模式,show命令此时显示的不再是可用exploit、 encoders、或者nops的列表,取而代之显示的是该模式下的特定信息。键入help命令将能显示在exploit模式下所有可用命令的列表(见图 12.5)。
图 12.5 Exploit 模式下的命令列表
然后,用户需要检查可用的目标列表。在MSF中,每个目标针对不同的运行着特定漏洞应用程序的远程平台。每个exploit中存储着基于目标主机的唯一攻 击插件。选用错误的目标会使exploit不能正常工作,并且潜在的有可能使存在漏洞的服务崩溃。因为远程目标主机运行Window NT 4 Service Pack 5,用户使用set TARGET 2命令设置目标主机的操作平台(见图12.6)。
图12.6选择目标主机的操作平台
选择了目标后,用户必须提供一些关于远程主机的额外信息。这些信息将以环境变量的形式提供给MSF。可通过使用show options命令查看需要的环境变量列表。图12.7中显示RHOST、RPORT环境变量必须在执行该exploit前设定。用户可以通过使用
set RHOST 192.168.119.136
命令设定RHOST参数,192.168.119.136就是我们目标主机的IP地址。而远程主机端口号,RPORT已经由默认值给出。
图12.7 设定exploit参数
Set命令只是针对当前选择的exploit临时修改环境变量数值。如果用户想针对同一机器尝试多个exploit插件,setg命令是一个较理想的选择。Setg命令能自在全局范围内对全局变量的值进行设定,它所作的设置针对多个exploit都是有效的。如果对于一个同样的变量,分别在局部和全局环境中作了设定,局部变量的设置优先。
一些高级的选项也许会用到——这取决于exploit。这些变量也是使用set命令设置,不过在图12.8种,用户不需要设置任何高级选项。
图 12.8 高级选项
然后,用户必须为将要对目标主机起作用的exploit选择一个payload。我们将在后面详细讨论payload。现在,我们把payload假想成攻击者希望在目标主机系统上运行的任意代码。见图12.9:在运行show payloads命令后,MSF显示出与exploit兼容的payload列表。
使用set PAYLOAD win32_bind 指令,能返回一个shell的payload就被加入到了exploit中。
图12.9 选择payload
MSF与大多数公开的单独exploit不同的地方在于MSF能够随意选择payload。这样,允许用户针对不同网络环境或系统状况发生改变的情况下选择最适合的payload。
在加入payload后,必须对一些附加的选项作设定。图12.10中,在使用show options命令查看新的选项。
图 12.10 payload附加选项
Save命令在调试一个exploit的时候是非常有用的。该命令将把当前环境和所有设定的exploit环境变量写入磁盘,下次msfconsole运行的时候,这些信息会被重新载入。
如果用户对默认的payload选项满意,使用exploit命令就可以执行攻击了。见图12.11,我们设定的exploit成功的触发了远程系统的漏洞。远程主机创建了一个侦听端口,MSF自动与之建立连接,并接管了远程shell。
图 12.11 exploit触发远程主机漏洞
MSF的还具有一个特有功能:它能够自动的处理payload的连接。传统做法中,在exploit触发后,必须有一个外部程序(如netcat)被用来 连接到侦听端口。如果payload要在远程主机上创建一个VNC服务端,那么就需要一个外部VNC客户端连接到目标主机。然而,MSF摒弃了对外部 payload的额外操作。正如前面例子中所见,在攻击生效后,MSF自动建立了到远程主机4444端口的连接。所有MSF提供的payload(包括先 进的shellcode,如VNC注入等)都采用这种payload处理方式。
前面的例子,仅仅覆盖了执行该攻击所必须命令。要了解更多的有关MSF使用方法,包括详尽的用户手册,请访问MSF官方文档
www.metasploit.com/projects/Framework/documentation.html.。