3.2 漏洞利用

如果渗透测试人员在目标侦察阶段投入了足够的时间和资源,他可能就已经列出了可能有漏洞的那些目标。下一步就是评估每个目标对你的任务的价值,并进行排序。可以估计对潜在漏洞进行利用需要投入的精力,结合执行攻击时的连带风险一起考虑。Kali中自带的漏洞和漏洞利用工具非常适合在对Web应用服务器进行侦察时找出和利用漏洞。

3.2.1 Metasploit

Metasploit 框架是进行服务器端攻击时一种最流行的功能工具。它也被认为是对渗透测试人员最有用的工具之一。HD Moore于2003年创建了这个项目。它可以用作合法的渗透测试工具,也可以用作攻击者进行非授权系统漏洞利用的工具。

介绍如何使用Metasploit框架的资料非常多。在本书中,我们会介绍如何利用Metasploit在Web应用渗透测试中进行服务器端的漏洞利用。

一定要确保启动了Postgres SQL和Metasploit服务。你可以在终端窗口中以root身份输入service postgres startservice metasploit start 来启动。

第一步是打开一个控制台,输入msfconsole 来启动Metasploit。msfconsole 是启动Metaspoit最常用的方式。它提供了一个独立的用户界面来访问整个Metasploit框架。一些简单的命令如helpshow 可以帮你熟悉Metasploit。

还有一些其他方法也可以用来启动Metasploit,比如msfgui (基于GUI的)和msfcli (基于命令行的)。

除了支持调用Metasploit自有的命令,msfconsole 还支持调用底层的OS命令,比如pingnmap 。这对攻击者来说很有用,因为这样他就可以执行常规任务,而不用离开控制台。

在我们的第一步中,会使用nmap 来扫描本地网络。扫描结果会自动以XML文件的形式添加到Metasploit中。

我们输入的命令如下:

nmap -n -oX my.xml network

我们将从nmap 输出的结果以XML文件的形式导入到Metasploit中。调用以下命令:

db_import my.xml

对主机命令做个快速检查,能看到数据导入已经成功了。Metasploit已经拿到了nmap 输出的数据。

我们还会调用services 命令来查看Metasploit中可用的服务。下面是services 命令的一个示例输出:

你可以使用db\_nmap 命令一步完成对nmap 进行扫描和将结果XML文件导入Metasploit数据库的工作。在下面的例子中,我们将使用db\_nmap 来对目标主机使用nmap 命令进行扫描。

我们可以调用hostsservices 命令来验证Metasploit已经在数据库中保留了相关信息。

services 命令说明我们正在使用Samba文件共享服务。让我们来看看是否能找到一个漏洞并加以利用。注意,虽然在这个例子中我们攻击的是一台真实的Web服务器,但我们找出的并不是真的Web漏洞。真实攻击者会利用Web服务器上运行的所有软件来获取信息。

我们可以看到有几个可利用的Samba漏洞。它们也有排名。我们会利用排名靠前的usermap\_script 漏洞。这个模块会利用Samba的3.0.20版本到3.0.25rc3版本之间存在的命令执行漏洞。更多有关此漏洞利用的信息可以参考:http://www.metasploit.com/modules/exploit/multi/samba/usermap_script

要使用某个漏洞,需要使用use 命令。在本例中如下面的截图所示:

选好了要利用的漏洞后,我们需要确定在执行选定的漏洞时还需要什么信息。我们可以在输出中找到列出的必选选项,然后选择要使用的攻击载荷。调用show options 命令,查看必选选项:

可以在这个例子中看到,我们需要一个RHOST 参数。RHOST 是我们要攻击的远程主机的IP地址。我们还要选择攻击载荷并设置攻击载荷的参数。攻击载荷是一段可自行注入并执行漏洞利用的代码。由于同个漏洞在多种方式下都可用,我们通常也会有多个可选的攻击载荷。要查看可用的攻击载荷,可输入show payloads 命令。

找到了要使用的载荷后,下一步是使用set payload 命令后跟我们看到的该载荷的补丁名称来设置载荷。

设置好了攻击载荷后,可以再次调用show options 来查看该载荷专属的选项。

我们能看到这个载荷需要设置LHOSTLPORTLHOST 是你的本地主机,或是你的Metasploit攻击者沙箱的IP地址。该漏洞利用需要让远程主机连回托管Metasploit的系统,所以远程主机需要知道你的IP地址。

另外,我们还需要设置远程主机跟Metasploit通信的端口。许多企业环境会通过防火墙或路由器来限制离港端口。最好的办法是使用公用端口,比如端口443,它通常是专门为SSL数据预留的,大部分企业也允许通过这个端口外发数据。使用443端口的另外一个好处在于大多数企业都不会审查SSL外发的数据。我们发现在大多数攻击中将443端口用作LPORT 可以避开该企业部署的内部代理工具。

完成设置选项后,可以输入exploit 来运行攻击。如果该漏洞利用成功运行了,你就能连接到远程服务器了。你可以执行任何命令。在这个例子中,这个漏洞利用拿到了root权限。root权限意味着你拥有了远程目标服务器的所有权限。

Metasploit框架有各种各样的漏洞利用和攻击载荷选项。你可以在http://www.metasploit.com 查看所有可用的选项。

3.2.2 w3af

w3afWeb Application Attack and Audit Framework(Web应用攻击和安全审计框架) 的缩写。它是一个开源的Web应用安全扫描器和漏洞利用工具。W3af可通过Web Application Assessment > Web Vulnerability Scanners > w3af 打开。

w3af提供了一个向导界面。不过,它并不是正确执行扫描的必要条件。第一步先创建一个新配置或是利用已有的配置。配置用来将可以在目标上运行的插件聚合起来。w3af带有一些很赞的默认聚合分组,比如OWASP TOP10。现有插件的定义会在你选中插件时显示在中间的窗口中,比如下面例子中的OWASP TOP10配置。可以在左边栏中选择现有的配置,或是新建的配置。如果你用的是新配置或是编辑已有配置,可以勾选你想用来扫描的所有插件。勾选的插件越多,扫描持续的时间就越长。如果勾选了一大片分组,w3af会警告你这么多分组可能要用很长时间。点击Start 开始扫描。

下一步,在Target: 字段中输入目标URL,然后点击Start 来运行扫描。下面的截图显示的是我们对w3af进行配置扫描www.thesecurityblogger.com:

w3af会在Log 窗口中显示当前进行的扫描的状态。w3af会试着预估扫描完成需要的时间。

要查看扫描的结果,点击Results 标签。Results 标签会提供找到的潜在漏洞的详情。Exploit 标签会基于发现的漏洞显示可能的漏洞利用。

w3af允许用户对审计阶段找到的漏洞加以利用。漏洞找出后,会被存储到知识库中的特定地方。漏洞利用插件会从那个地方读取信息,然后使用这些信息来对漏洞加以利用。如果漏洞利用成功了,你会获得目标系统上的一个shell。下面的截图显示了www.ntew3af插件正在对www.thesecurityblogger.comdayShell 漏洞加以利用。

在w3af工具集中,有很多有用的功能。你可以通过http://w3af.org/了解更多信息。