第1章 给安全专业人员的Metasploit快速提示

本章讲解下述内容:

● 在Windows系统中配置Metasploit;

● 在Ubuntu系统中配置Metasploit;

● BackTrack 5与Metasploit 终极组合;

● 在单机上构建渗透测试环境;

● 在带有SSH连接的虚拟机上构建Metasploit环境;

● 从界面开始——Metasploit的“Hello World”;

● 在Metasploit框架中建立数据库;

● 使用数据库存储渗透测试结果;

● 分析数据库中存储的渗透测试结果。

1.1 介绍

Metasploit 是当前信息安全与渗透测试领域最流行的术语,完全颠覆了已有的渗透测试方式。Metasploit 之所以如此受欢迎,是因为其所能执行的大部分任务可以简化渗透测试工作以使得系统更加安全。所有流行的操作系统都支持Metasploit,并且Metasploit框架在这些系统上的工作过程也几乎是一样的。本书中的内容和示例主要以BackTrack 5操作系统为基础,因为该操作系统预装有Metasploit及在其上运行的其他第三方工具。

首先介绍Metasploit框架及与其相关的各种术语。

● Metasploit框架: H.D.Moore在2003年开发的一个免费的、开源的渗透测试框架,后来被Rapid 7公司收购。该框架目前的稳定版是使用Ruby语言开发的。Metasploit框架包含了世界上最大且经过测试攻击的代码数据库,每年下载量超百万。该框架也是迄今为止使用Ruby脚本语言构建的最复杂项目之一。

● 漏洞: 系统中存在的可能被攻击者或渗透测试人员用以破坏系统安全性的弱点。漏洞可能存在于操作系统中、应用软件中,甚至存在于网络协议中。

● 漏洞利用代码: 是攻击者或测试人员针对系统中的漏洞而设计的,用以破坏系统安全性的攻击代码。每个漏洞都有自己相应的攻击代码,Metasploit v4中包含超过 700个针对不同漏洞的漏洞利用代码。

● 攻击载荷: 完成实际攻击功能的代码,在成功渗透漏洞后会在系统上运行。攻击载荷最常见的用途是在攻击者和目标机器之间建立一个连接,Metasploit v4中包含超过250个实现不同攻击功能的攻击载荷。

● 模块: 模块是组成完整系统的基本构建块。每个模块执行某种特定的任务,将若干模块组合成单独的功能主体可构成一个完整的系统。这种体系结构最大的优势在于,开发人员可以很容易地将新的漏洞利用代码和工具整合到Metasploit框架中。

Metasploit框架采用的是模块式体系结构,漏洞利用代码、攻击载荷、编码器等都可以视为单独的模块。下图展示了Metasploit的体系结构。

figure_0017_0002

进一步解释上图的内涵。

Metasploit使用不同的库,这些库是保证Metasploit框架正确运转的关键。库实际上是预定义的任务、操作和功能的组合,框架中不同模块都可以使用这些库完成相应功能。Metasploit框架最基本的组成部分是Ruby扩展库(Rex),Rex提供的某些组件包含wrapper socket子系统、协议客户端与服务器、日志子系统、漏洞利用工具类及大量其他有用的类。Rex本身在设计上是独立的组件,不像有些组件需要默认的Ruby安装。

MSF Core库对Rex库进行了一些扩展,Core主要负责实现所有与漏洞利用模块、会话和插件的接口。这一核心库由框架的基础库进行扩展,可提供简单的用于处理框架核心功能的包裹器过程,同时也提供处理框架不同方面功能的工具类,例如对状态模块进行序列化以便适应不同的输出格式。最后,框架的用户接口(UI)对基础库进行了扩展,实现了对各种类型用户接口的支持,例如命令行控制台和Web界面。

Metasploit 框架提供了 4 种不同的用户接口,分别是 msfconsole、msfcli、msfgui 及msfweb。强烈建议使用者熟练掌握这些接口,但在本书中主要介绍和演示的是msfconsole,原因在于msfconsole对Metasploit框架提供了最好的支持,对框架所有功能的发挥起到杠杆作用。

下面开始讲解本章的具体内容,并对多个方面进行示例演示。

1.2 在Windows操作系统中配置Metasploit

在Windows系统中安装Metasploit框架非常的简单,安装程序可以从Metasploit官方网站(http://www.metasploit.com/download)上下载。

准备

从官方网站上可以看到,有两种类型的安装程序可以下载,建议下载完全版的安装程序,其中包含了控制台和所有其他相关的依赖库,以及数据库和运行时环境。如果已经有配置好的供Metasploit框架使用的数据库,也可以下载迷你版的安装程序,其中只包含了控制台和依赖库。

怎样实现

下载好安装程序后,双击运行并等待安装完成即可。安装程序时会自动安装所有相关组件并建立数据库。安装完成后,可以通过安装程序创建的多种快捷方式访问Metasploit框架。

怎样工作

安装程序创建了大量的快捷方式,包括Metasploit web、cmd console及Metasploit update等。在Windows环境中,大多数使用方式都是点击操作。

在Windows系统中安装Metasploit时,应该禁用防病毒软件,因为有些安装文件会被其检测为潜在的病毒或威胁,从而阻塞安装过程。安装完成后,要确认在防病毒软件中将其安装目录设置在白名单中,否则该框架中的漏洞利用代码和攻击载荷都会被检测为病毒。

更多

下面讨论其他一些相关问题,以及在Windows系统中安装Metasploit时会遇到的一些提示信息。

安装中出现数据库错误

很多用户在Windows系统中安装Metasploit框架时会遇到一个常见的错误消息提示,如下图所示。

figure_0019_0003

这是由配置PostgreSQL服务器出错导致的,可能的原因包括以下几方面。

PostgreSQL没有运行,可以使用Netstat命令查看相应端口是否开放及数据库是否正在运行。

有些安装程序需要默认的安装路径,比如,如果默认安装路径是 C 盘,将其变更为D盘就会出现这一错误。

语言编码问题。

如果遇到这一问题,可以下载安装Metasploit框架的简单版安装程序,其中只包含控制台和依赖库。之后再手动配置数据库并将其与Metasploit框架进行连接。

1.3 在Ubuntu操作系统中配置Metasploit

Metasploit 框架向基于 Ubuntu 的 Linux 操作系统提供了完全的支持,但其安装过程与Windows系统略有不同。

准备

从Metasploit官方网站(http://www.metasploit.com/download)上下载相应的安装程序。同样共有两种安装方式:迷你版安装和完整版安装,可根据实际需要进行选择。完整版安装包括所有依赖库、数据库、运行时环境等,迷你版安装只包含依赖库,不包括数据库。

怎样实现

完整版安装与迷你版安装存在一些差别,具体如下。

完整版安装; 需要执行如下命令,在Ubuntu机器上安装Metasploit框架。

$ chmod +x framework-4.*-linux-full.run

$ sudo ./framework-4.*-linux-full.run

迷你版安装: 需要执行如下命令,以安装选项最少的Metasploit框架。

$ chmod +x framework-4.*-linux-mini.run

$ sudo ./framework-4.*-linux-mini.run

怎样工作

上述演示的安装过程也是几乎所有其他软件在Ubuntu机器中的简单安装流程。安装完成后,可以使用hash-r命令来重载路径。

这一安装过程在几乎所有版本和类型的Linux机器上都是相同的。

更多

下面讨论其他一些相关问题,以及在Windows系统中安装Metasploit时会遇到的一些提示信息。

安装中出错

安装中可能会由于各种原因导致出错。有些版本的Ubuntu系统中Ruby语言库不完整,这可能是导致安装失败的原因之一。在这种情况下,可以通过执行如下命令单独安装依赖库。

要安装Ruby依赖库,可以运行如下命令。

$ sudo apt-get install ruby libopenssl-ruby libyaml-ruby libdl-ruby

libiconv-ruby libreadline-ruby irb ri rubygems

要安装subversion客户端,可以运行如下命令。

$ sudo apt-get install subversion

要安装原始扩展,可以运行如下命令。

$ sudo apt-get install build-essential ruby-dev libpcap-dev

安装完相应的依赖库后,从Metasploit官方网站下载Metasploit Unix tarball,并执行如下命令。

$ tar xf framework-4.X.tar.gz

$ sudo mkdir -p /opt/metasploit4

$ sudo cp -a msf4/ /opt/metasploit3/msf4

$ sudo chown root:root -R /opt/metasploit4/msf4

$ sudo ln -sf /opt/metasploit3/msf3/msf* /usr/local/bin/

成功执行上述命令之后,Metasploit框架即可安装完毕,此时即可运行该框架并执行相应命令。

1.4 BackTrack 5与Metasploit——终极组合

对于安全专业人员而言,BackTrack 是最流行的操作系统。主要有两个原因:第一, BackTrack预安装了所有流行的渗透测试工具,不需要进行单独安装;第二,BackTrack是一个基于 Linux 的操作系统,更不容易遭受病毒攻击,从而在渗透测试过程中提供了更高的稳定性。BackTrack节省了安装相关组件和工具的时间,并降低了在安装过程中出错的可能性。

准备

可以在主机上安装独立的BackTrack操作系统,也可以在虚拟机上进行安装。安装过程很简单,和安装任何基于Linux的操作系统一样。

怎样实现

(1)启动 BackTrack 操作系统时,会提示输入用户名和口令,根用户的默认用户名是root,密码是toor。

(2)成功登录系统后,可以在命令行模式下工作,也可以执行startx命令进入GUI模式。

(3)用户可以通过Applications菜单或命令行启动Metasploit框架。要从Applications菜单中启动,可以依次选择Applications | BackTrack | Exploitation Tools | Network Exploitation Tools | Metasploit Framework等选项,如下图所示。

figure_0022_0004

(4)BackTrack中Metasploit采用的是简单的目录结构体系,根文件夹是pentest,再向上是/exploits/framework3。要从命令行中启动 Metasploit,需要先启动终端窗口,并输入如下命令切换到Metasploit目录。

root@bt:~# cd /pentest/exploits/framework3

root@bt:/pentest/exploits/framework3 ~# ./msfconsole

怎样工作

从命令行中启动Metasploit需要使用msfconsole的完全路径,从Application菜单中可以实现对不同用户接口的直接访问。

1.5 在单机上建立渗透测试环境

使用多台机器构建渗透测试环境是理想的选择,但如果只有一台机器而又需要马上构建渗透测试环境该怎么办呢?答案是使用虚拟机。用户可以在多种操作系统上并发执行渗透测试任务,下面快速了解一下如何借助虚拟机在单独的系统上构建渗透测试环境。

准备

使用 virtual box构建两个虚拟机,分别采用BackTrack 5和Windows XP SP2操作系统,宿主机操作系统是Windows 7。为此,需要 virtual box安装程序和两种虚拟机操作系统的镜像文件或安装盘。完整的构建环境包括运行Windows 7的主机和分别在运行BackTrack 5、Windows XP SP2操作系统的虚拟机。

怎样实现

安装虚拟机的过程很简单,一般遵循如下3个步骤。

(1)安装 virtual box后,创建新的虚拟机,选择适当的选项并点击Next,要启动安装过程,必须提供适当的安装介质,可以是镜像文件或安装盘。要了解完整的虚拟机安装过程手册,可以参考如下链接。

http://www.virtualbox.org/manual/UserManual.html

(2)为保证虚拟机有较好的性能,推荐32位操作系统至少分配4GB内存,64位操作系统至少分配8GB内存。下一节中,将介绍在运行多台虚拟机时降低内存使用的方法。

(3)虚拟机(VM)创建完成后,可以使用 clone(克隆)选项,该选项将为该虚拟机创建一个完全一致的备份,在操作虚拟机出现失效时,可以使用虚拟机的克隆版进行快速恢复,而不需要重新安装。也可以使用 snapshot(快照)选项保存虚拟机的当前状态,包括该虚拟机当前的工作设置和状态,今后可以在任何需要的时候从快照恢复当时的工作场景。

怎样工作

在启动虚拟机之前,需要先进行一项重要配置设置,以便两个虚拟机可以互相通信。选择某台虚拟机和Settings(设置),然后选择Network settings(网络设置),在网络适配器中,有一个预安装的NAT适配器用于网络连接,在Adapter 2中选择Host-only Adapter,如下图所示。

figure_0024_0005

两台机器设置如上所述。之所以选择Host-only Adapter,是为了两台虚拟机之间彼此进行通信。设置完成后,为测试是否成功,可以在命令提示符中使用ipconfig命令查看Windows虚拟机的IP地址,使用ifconfig命令查看BackTrack虚拟机的IP地址,并使用这两个IP地址互相进行ping操作,确认两台虚拟机之间是否连通。

更多

下面讨论其他一些选项,以及在完成此项任务时会遇到的一些其他问题。

禁用防火墙与防病毒软件防护

在从BackTrack虚拟机对Windows机器进行ping操作时,有时候会发现网络数据包无法收到,这本来应该意味着Windows机器不处于存活状态,但有时候是因为默认的Windows防火墙设置导致的,因此需要禁用防火墙防护并再次进行ping操作,查看数据包是否可以收到。同样地,对Windows虚拟机上的防火墙也需要进行类似处理。

安装 virtual box guest additions

virtual box提供了一些附件的附加式安装,可以提供更好的虚拟机使用体验,这些附件所能带来的好处主要有如下几方面。

鼠标从主机操作系统到虚拟机操作系统的无缝式移动;

虚拟机操作系统的自动式键盘整合;

更合适的屏幕大小。

要安装客户端附加组件,需要打开虚拟机,选择Device标签,点击 Install guest additions。

1.6 在带有SSH连接的虚拟机上构建Metasploit环境

在前面的内容中,主要讲解了如何借助虚拟化技术在单独的机器上构建渗透测试环境,但在多台虚拟机的情况下,会产生严重的内存使用问题,所以,下面将讨论一种适用于此种情况的方便而实用的技术。

准备

所需要的只是一个SSH客户端,我们将使用PuTTY,因为它是Windows环境下最流行的免费SSH客户端。我们将在 Install guest additions与SSH之间建立连接,因为该虚拟机需要消耗比Windows XP更多的内存。

怎样实现

(1)首先启动BackTrack虚拟机,在登录界面输入用户名和口令并启动命令行,现在不启动GUI,执行下面任一条命令。

root@bt:~# /etc/init.d/start ssh

root@bt:~# start ssh

该命令将在BackTrack机器上启动SSH进程。

(2)接下来输入如下命令获取IP地址。

root@bt:~# ifconfig

记下该IP地址。

(3)接下来在宿主机上启动PuTTY,输入BackTrack虚拟机的IP地址和端口号22,如下图所示。

figure_0026_0006

(4)点击上图中的Open按钮,启动命令行。如果连接成功,在PuTTY命令行中看到的实际上就是BackTrack虚拟机的功能。命令行中会出现要求登录的提示,输入用户名和口令登录,之后运行ifconfig命令,查看显示的IP地址是否与BackTrack虚拟机的地址相同,如下图所示。

figure_0026_0007

怎样工作

在该SSH会话中,我们可以使用PuTTY与BackTrack虚拟机进行交互。由于没有加载GUI,所以内存消耗几乎减少了一半。同样地,将BackTrack虚拟机最小化可以进一步减少内存消耗,因为Windows操作系统只为最小化进程提供了较少的内存共享,而对那些处于最大化模式运行的任务提供更快的执行速度,这样可以在一定程度上进一步减少内存消耗。

1.7 从界面开始——Metasploit的“Hello World”

界面为用户与软件或平台通信提供了一个前端操作界面。Metasploit有4个界面,分别是msfgui、msfweb、msfcli与msfconsole。强烈建议用户熟练掌握这些界面,不过本书中主要介绍的是msfconsole界面,与其他界面相比较,这一界面是功能最强大的且完整整合。

准备

启动已经安装有Metasploit的操作系统,如果是装在虚拟机上,就启动虚拟机。

怎样实现

启动msfconsole很简单,遵循如下几个步骤。

(1)在Windows操作系统中,可以通过Start |metasploit framework | msfconsole菜单路径启动msfconsole。

(2)在BackTrack中,可以浏览Applications | Exploitation tools | Network

exploitation tools | Metasploit framework | msfconsole。

(3)如果要从终端中直接启动msfconsole,需要先使用如下命令。

root@bt:~# cd /pentest/exploits/framework3

(4)此时工作目录已切换到framework3,输入如下命令即可启动msfconsole。

root@bt:/pentest/exploits/framework3# ./msfconsole

现在,msfconsole接口已经处于运行状态,可以接受命令输入。

怎样工作

Metasploit界面拓展了基础库,该库可以启动框架的原有功能。可执行简单的命令,例如建立漏洞利用代码和攻击载荷、运行更新,以及配置数据库。随着程序运行的深入,将相应调用其他功能库。

更多

下面介绍msfconsole的功能。

尝试某些命令

这里列出几条可以进行尝试和探索的命令。

msf > ls:ls命令可以列出当前所有的目录和文件,可以在其他目录下尝试。

msf > help:该命令将列出Metasploit框架中所有可用的命令,这些命令可以划分为核心命令和数据库后台命令,前者包含与框架直接相关的命令,后者包含与数据库进行交互的命令。

msf > msfupdate:可经常使用该命令将最新的漏洞利用代码、攻击载荷、库更新到Metasploit框架中。

1.8 在Metasploit框架中建立数据库

Metasploit 的重要特点是包括用于存储渗透测试结果的数据库。渗透测试涉及大量信息,并且持续数天,因此存储中间结果是必要的。因此,好的渗透测试工具应该正确地整合数据库,以便快速高效地存储结果。

准备

默认情况下,Metasploit将自带的PostgreSQL作为基础数据库。在BackTrack上,还有另外一种选择,也就是MySQL数据库。用户可以使用这两种数据库中的任一种。我们先来看一下PostgreSQL数据库的默认设置。使用如下命令,切换 opt/framework3/config目录,查看database.yml文件。

root@bt:~# cd /opt/framework3/config

root@bt:/opt/framework3/config# cat database.yml

production:

adapter: postgresql

database: msf3

username: msf3

password: 8b826ac0

host: 127.0.0.1

port: 7175

pool: 75

timeout: 5

注意系统已经创建的默认用户名、口令和默认数据库。记下这些值,后面会用到,也可以根据需要对这些值进行修改。

怎样实现

接下来的任务是连接数据库并使用。启动msfconsole,并弄清楚如何建立数据库并存储结果。

首先检查有哪些可用的数据库驱动器。

msf > db_driver

[*]Active Driver: postgresql

[*]Available: postgresql, mysql

PostgreSQL是默认使用的数据库,如果需要切换数据库驱动器,可以执行下面的命令。

Msf> db_driver mysql

[*]Active Driver: Mysql

这一命令将活跃的数据库驱动器切换到 MySQL,但本书中主要使用PostgreSQL数据库。

在最近一些版本的Metasploit中,Rapid7已经不再支持MySQL数据库,因此db_driver命令将不再有效,PostgreSQL数据库是Metasploit框架唯一支持的数据库。

怎样工作

要将数据库驱动器连接到 msfconsle,可以使用db_connec 命令,下面给出的是该命令的语法示例。

db_connect username:password@hostIP:port number/database_name

下面,我们使用刚才从database.yml文件中记下来的用户名、口令、数据库名、端口号的默认值。

msf > db_connect msf3:8b826ac0@127.0.0.1:7175/msf3

成功执行这一命令后,即完成了数据库的配置过程。

更多

下面介绍建立数据库过程中一些相关的重要问题。

连接数据库时出错

建立数据库连接时可能会出错,出错时记住以下两点。

使用db_driver和db_connect命令进行检查,确认在使用正确的数据库组合。

使用tart/etc/init.d启动数据库服务,并尝试进行重新连接。

如果错误仍然没有解决,可以使用下面命令重装数据库及相关支持库。

msf> gem install postgres

msf> apt-get install libpq-dev

删除数据库

用户可以在任何时候丢弃已经创建的数据库并重新开始存储新的结果,下面展示的是删除数据库的命令示例。

msf> db_destroy msf3:8b826ac0@127.0.0.1:7175/msf3

Database "msf3" dropped.

msf>

1.9 使用数据库存储渗透测试结果

下面学习如何使用已配置的数据库存储渗透测试过程中生成的各种结果。

准备

如果前面的操作都已经成功完成,接下来就已经可以使用创建的数据库存储结果。在msfconsole中输入help命令,快速了解一下有哪些可用的数据库命令。

怎样实现

观察下面的简单示例。db_nmap 命令可以直接将端口扫描结果和相关信息存储到数据库中,启动Nmap对目标机器进行扫描,会得到怎样的结果。

msf > db_nmap 192.168.56.102

[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-04 20:03

IST

[*] Nmap: Nmap scan report for 192.168.56.102

[*] Nmap: Host is up (0.0012s latency)

[*] Nmap: Not shown: 997 closed ports

[*] Nmap: PORT STATE SERVICE

[*] Nmap: 135/tcp open msrpc

[*] Nmap: 139/tcp open netbios-ssn

[*] Nmap: 445/tcp open microsoft-ds

[*] Nmap: MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 1.94 seconds

从结果可以看到,Nmap生成了一些扫描结果,并自动地将结果存储到当前正在使用的数据库中。

我们可以在Nmap扫描时使用-oX参数,以便以XML格式存储扫描结果,这有助于在其他第三方软件中导入扫描结果,比如后面章节中将使用的Dardis框架。

msf > nmap 192.168.56.102 –A -oX report

[*] exec: nmap 192.168.56.102 –A -oX report

Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-05 11:57 IST

Nmap scan report for 192.168.56.102

Host is up (0.0032s latency)

Not shown: 997 closed ports

PORT STATE SERVICE

135/tcp open msrpc

139/tcp open netbios-ssn

445/tcp open microsoft-ds

MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds

这里,report是存储扫描结果的文件名,在后面讲解其他内容时会用到。

怎样工作

db_nmap实质上创建了一个SQL查询,涉及多项扫描内容,扫描完成后,就会将各种相关值存入到数据库中。以电子表格形式存储扫描结果的便利性,使其很更容易与第三方工具进行结果共享。

1.10 分析数据库中存储的渗透测试结果

在数据库存储测试结果后,下一步工作就是对其进行分析,分析有助于更深入地理解目标系统。根据使用需求的不同,数据库中的测试结果可以长期存储,也可以短期存储。

准备

启动msfconsole,遵循前面介绍的操作步骤,建立数据库连接。可以用数据库存储新的测试结果,也可以用来分析以前存储的结果。可以导入前面Nmap扫描时创建的XML文件,以便对扫描结果进行分析。

怎样实现

尝试一些重要命令,以便对存储结果有更清晰的理解。

figure_0032_0008

上图展示了hosts命令的输出结果。观察可以发现,该命令的输出结果包含了较多内容,表中包含了多列项目。为了更清晰,可以在hosts命令中使用过滤参数,这样就可以只显示和查看需要的内容,请看下面的命令示例。

msf > hosts -c address, os_name

Hosts

=====

address os_name

------- ------

192.168.56.1

192.168.56.101

192.168.56.102 Microsoft Windows

192.168.56.103 Linux

msf > services:用于查看目标机器上运行的服务。

msf > services

Services

========

host port proto name state info

---- ---- ----- ---- ----- ----

192.168.56.101 111 tcp rpcbind open

192.168.56.102 135 tcp msrpc open

192.168.56.102 139 tcp netbios-ssn open

192.168.56.102 445 tcp microsoft-ds open

192.168.56.102 135 tcp msrpc open Microsoft Windows

RPC

msf > vulns:该命令列出数据库中各主机上存在的所有漏洞。

msf > db_autopwn:这是一条功能强大的命令,用于自动化实现对数据库中目标主机的攻击渗透。该命令需要对攻击渗透过程有更多的理解,因此后面将会对这一命令进行分析。

怎样工作

分析过程很简单,并且通过使用各种过滤参数可轻松获取需要的结果,前面也展示了如何读取数据库输出及如何对其进行高效管理。最后两条命令vulns与db_autopwn是攻击渗透相关的命令,后面章节中会再对其进行讲解。