渗透测试快速启动指南-全-

渗透测试快速启动指南(全)

原文:Quick Start Guide to Penetration Testing

协议:CC BY-NC-SA 4.0

一、NMAP 简介

漏洞评估和渗透测试变得越来越重要,尤其是在最近几年。组织通常拥有存储敏感数据的复杂资产网络。这些资产暴露在来自组织内部和外部的潜在威胁之下。为了全面了解组织的安全状况,进行漏洞评估是必不可少的。

理解漏洞评估和渗透测试之间的明显区别很重要。为了理解这种差异,让我们考虑一个真实的场景。你注意到邻居的门没有锁好,而且邻居不在家。这是一个漏洞评估。现在,如果你真的打开邻居的门,进入房子,那么这是一个渗透测试。在信息安全环境中,您可能会注意到 SSH 服务正在使用弱凭证运行;这是漏洞评估的一部分。如果你真的使用这些凭证来获取访问权限,那么这就是一个渗透测试。执行漏洞评估通常是安全的,而渗透测试如果不以受控方式执行,可能会对目标系统造成严重损害。

因此,漏洞评估是进行渗透测试的基本前提之一。除非您知道目标系统上存在哪些漏洞,否则您将无法利用它们。

执行渗透测试需要一个计划周密的方法。这是一个多步骤的过程。以下是渗透测试的一些阶段:

  • 信息收集:信息收集是渗透测试生命周期中最重要的阶段。这个阶段也被称为侦察。它涉及使用各种被动和主动技术来收集尽可能多的关于目标系统的信息。详细的信息收集为渗透测试生命周期的后续阶段奠定了坚实的基础。

  • 枚举:一旦你有了目标的基本信息,枚举阶段就使用各种工具和技术来详细探查目标。它包括找出在目标系统上运行的确切服务版本。

  • 漏洞评估:漏洞评估阶段包括使用各种工具和方法来确认目标系统中已知漏洞的存在。

  • 获得访问权限:从上一阶段开始,您已经有了目标可能存在的漏洞列表。现在,您可以尝试利用这些漏洞来访问目标系统。

  • 提升权限:您可以通过利用特定的漏洞来访问您的目标系统;但是,访问可能会受到限制。要渗透得更深,您需要使用各种技术,并将权限提升到最高级别,如管理员、root 等。

  • 保持访问权限:既然你已经努力获得了目标系统的访问权限,你当然会希望它持续下去。这个阶段包括使用各种技术来使对目标系统的访问持久化。

  • 覆盖轨迹:渗透过程可能会创建垃圾文件、修改配置文件、更改注册表项、创建审计日志等等。掩盖你的踪迹包括清理掉之前阶段留下的所有痕迹。

为了在这些阶段执行各种任务,有数百种工具、脚本和实用程序可用。Kali Linux 等 Linux 发行版甚至提供捆绑工具来执行这些任务。

被可用的工具数量淹没是很自然的。然而,有一些工具非常强大和灵活,它们可以单独执行所有这些阶段的大多数任务。

这本书是关于三个这样的工具:NMAP、OpenVAS 和 Metasploit。仅仅拥有这三个工具就可以提供广泛的渗透测试能力。

表 1-1 描述了如何在渗透测试生命周期的不同阶段使用这些工具。

表 1-1

笔测试阶段的工具

|

渗透测试阶段

|

工具

|
| --- | --- |
| 情报收集 | NMAP,metasploit |
| 枚举 | NMAP,metasploit |
| 脆弱性评估 | open vas!open vas!open vas |
| 获得访问权限 | 渗透测试指南 |
| 提升权限 | 渗透测试指南 |
| 保持访问 | 渗透测试指南 |
| 覆盖轨道 | 渗透测试指南 |

从这个表中可以明显看出,这三个工具能够在渗透测试生命周期的所有阶段执行任务。

这本书关注这三个工具,并帮助你开始了解这些工具的基础知识。这一章将涉及 NMAP。

NMAP(消歧义)

既然你对渗透测试生命周期的不同阶段以及需要什么工具有了一个相当好的想法,让我们继续我们的第一个工具,NMAP。您将了解 NMAP 的各种特色,包括以下内容:

  • 安装 NMAP

  • 通过 ZENMAP 使用 NMAP

  • 了解 NMAP 港口国

  • 用 NMAP 进行基本扫描

  • 了解 TCP 扫描与 UDP 扫描

  • 枚举目标操作系统和服务

  • 微调扫描

  • 使用 NMAP 脚本

  • 从 Python 调用 NMAP

NMAP 安装

NMAP 可以安装在基于 Windows 和 Unix 的系统上。要在 Windows 上安装 NMAP,只需进入https://nmap.org/download.html下载可执行文件并安装即可。

*对于基于 Unix 的系统,您可以从命令行安装 NMAP。像 Kali Linux 这样的安全发行版默认安装了 NMAP。但是,对于其他常规发行版,需要单独安装。

对于基于 Debian 的系统,你可以简单地使用命令apt install nmap,如图 1-1 所示。此命令将安装 NMAP 以及所有必需的依赖项。

img/475417_1_En_1_Fig1_HTML.jpg

图 1-1

在基于 Debian 的系统上安装 NMAP

NMAP 和 ZENMAP 简介

NMAP 最初是一个命令行实用程序。在 Linux 终端上,您可以简单地输入命令nmap来开始。图 1-2 显示了nmap命令的输出。它显示扫描目标需要配置的各种参数和开关。

img/475417_1_En_1_Fig2_HTML.jpg

图 1-2

终端上 nmap 命令的输出

ZENMAP 是 NMAP 的图形前端。它以更加用户友好的方式提供相同的功能。ZENMAP 是默认 Kali Linux 安装的一部分,可以在应用程序➤信息收集➤ ZENMAP 访问。图 1-3 显示了初始 ZENMAP 屏幕。ZENMAP 界面有三个主要的可配置设置。

img/475417_1_En_1_Fig3_HTML.jpg

图 1-3

ZENMAP 的初始屏幕/界面

  • 目标:这可以是单个 IP 地址、多个 IP 的列表或整个子网。

  • 配置文件 : ZENMAP 有几个预定义的扫描配置文件。配置文件根据 NMAP 可用的扫描类型进行分类。您可以在可用的配置文件中进行选择,也可以根据您的要求进行自定义扫描。

  • 命令:一旦你输入一个目标并选择一个预定义的配置文件,ZENMAP 将自动填充命令字段。如果要根据预定义的配置文件执行自定义扫描,也可以使用此字段。

NMAP 港口国

虽然当前版本的 NMAP 能够执行许多任务,但它最初是作为一个端口扫描器开始的。NMAP 有某些方法来检测目标系统上的端口是打开还是关闭的。NMAP 使用预定义的状态检测目标端口的状态,如下所示:

  • Open:Open 状态表示目标系统上的应用程序正在主动监听该端口上的连接/数据包。

  • 关闭:关闭状态表示没有任何应用程序监听该端口。但是,将来端口状态可能会更改为开放。

  • Filtered:Filtered 状态表示防火墙、过滤器或某种网络障碍阻塞了端口,因此 NMAP 无法确定它是打开还是关闭。

  • 未过滤:未过滤状态表示端口正在响应 NMAP 探针;然而,不可能确定它们是打开的还是关闭的。

  • 打开/过滤:打开/过滤状态表示端口被过滤或打开;然而,NMAP 并不能精确地确定国家。

  • 关闭/过滤:关闭/过滤状态表示端口被过滤或关闭;然而,NMAP 并不能精确地确定国家。

使用 NMAP 进行基本扫描

NMAP 是一个复杂的工具,有许多选项和开关可用。在本节中,您将看到从最基本的扫描开始的各种 NMAP 使用场景。

在开始实际扫描之前,需要注意的是 NMAP 是一个噪声很大的工具。它会产生大量网络流量,有时会消耗大量带宽。许多入侵检测系统和入侵防御系统可以检测和阻止 NMAP 流量。据说,在一台主机上进行基本的默认 NMAP 扫描会产生超过 4MB 的网络流量。因此,即使您对整个子网进行基本扫描,也会产生大约 1GB 的流量。因此,在完全了解所用开关的情况下执行 NMAP 扫描至关重要。

单个 IP 上的基本扫描

命令如下:

nmap -sn <target IP address>

让我们从对单个目标进行基本的 ping 扫描开始。ping 扫描不会检查任何打开的端口;但是,它会告诉你目标是否活着。图 1-4 显示了对单个目标 IP 地址执行 ping 扫描的输出。

img/475417_1_En_1_Fig4_HTML.jpg

图 1-4

在单个 IP 地址上完成基本 NMAP 扫描的输出

对整个子网进行基本扫描

命令如下:

nmap -sn <target IP subnet>

在实际情况下,您可能需要检查多个 IP 地址。要快速了解给定子网中哪些主机处于活动状态,您可以对整个子网进行 NMAP ping 扫描。子网只是网络的逻辑划分。扫描整个子网可以让您了解网络中存在哪些系统。图 1-5 显示了在子网 192.168.25.0-255 上执行的 ping 扫描的输出。您可以看到,在 255 台主机中,只有 7 台主机正常运行。现在,您可以进一步探查这七个主机,并获得更详细的信息。

img/475417_1_En_1_Fig5_HTML.jpg

图 1-5

子网中完成的基本 NMAP 扫描的输出

使用输入文件扫描

命令如下:

nmap -sn -iL <file path>

可能有这样一种情况,您需要扫描大范围的 IP 地址。您可以将它们全部放在一个文件中,并将该文件提供给 NMAP 引擎,而不是以逗号分隔的格式输入到 NMAP。图 1-6 显示了包含 IP 地址列表的hosts.txt文件的内容。

img/475417_1_En_1_Fig6_HTML.jpg

图 1-6

包含要扫描的 IP 地址列表的主机文件

现在你可以简单地将hosts.txt文件传送给 NMAP 并执行扫描,如图 1-7 所示。

img/475417_1_En_1_Fig7_HTML.jpg

图 1-7

hosts.txt 文件中列出的多个 IP 地址上完成的基本 NMAP 扫描的输出

原因扫描

命令如下:

nmap --reason<target IP address>

在正常的 NMAP 扫描中,您可能会得到一个开放端口的列表;但是,您不会知道 NMAP 报告某个特定端口开放的原因。NMAP 原因扫描是一个有趣的选项,其中 NMAP 为每个报告为开放的端口提供原因,如图 1-8 所示。NMAP 扫描基于请求和响应中设置的 TCP 标志。在这种情况下,开放端口是根据 TCP 数据包中设置的 SYN 和 ACK 标志检测到的。

img/475417_1_En_1_Fig8_HTML.jpg

图 1-8

在单个 IP 地址上完成原因 NMAP 扫描的输出

支持的协议

命令如下:

nmap -sO<target IP address>

作为信息收集和侦察的一部分,了解目标所支持的 IP 协议可能是有价值的。图 1-9 显示该目标支持两种协议:TCP 和 ICMP。

img/475417_1_En_1_Fig9_HTML.jpg

图 1-9

在单个 IP 地址上完成 NMAP 协议扫描的输出

防火墙探测器

在一个充满防火墙、入侵检测系统和入侵防御系统的企业网络中,您的 NMAP 扫描很可能不仅会被检测到,还会被阻止。NMAP 提供了一种方法来探测其扫描是否被任何中间设备过滤,如防火墙。图 1-10 显示 NMAP 扫描的 1000 个端口全部未过滤;因此,不存在任何过滤设备。

img/475417_1_En_1_Fig10_HTML.jpg

图 1-10

针对单个 IP 地址完成的 NMAP 防火墙探测的输出

拓扑学

ZENMAP 有一个有趣的特性,可以帮助你可视化网络拓扑。假设您对子网进行了 ping 扫描,发现几台主机还活着。图 1-11 显示了您发现处于活动状态的主机的网络拓扑图。可以使用 ZENMAP 界面中的拓扑选项卡来访问该图。

img/475417_1_En_1_Fig11_HTML.jpg

图 1-11

ZENMAP 中的主机拓扑图

快速 TCP 扫描

命令如下:

nmap -T4 -F<target IP address>

现在您已经有了子网内活动主机的列表,您可以执行一些详细的扫描来找出端口和运行在这些端口上的服务。您可以设置目标 IP 地址,选择快速扫描作为配置文件,然后执行扫描。图 1-12 显示了扫描的输出,突出显示了目标上打开的几个端口。

img/475417_1_En_1_Fig12_HTML.jpg

图 1-12

对单个 IP 地址进行快速 TCP NMAP 扫描的输出

服务枚举

命令如下:

nmap -sV<target IP address>

既然您已经有了一台活动的主机,并且也知道了哪些端口是开放的,那么是时候枚举与这些端口相关联的服务了。例如,您可以看到端口 21 是打开的。现在您需要知道哪个服务与它相关联,以及服务的服务器的确切版本是什么。可以使用nmap -sV <target IP address>命令,如图 1-13 所示。-sV开关代表服务版本。枚举服务及其版本提供了大量信息,可用于构建进一步的攻击。

img/475417_1_En_1_Fig13_HTML.jpg

图 1-13

对单个 IP 地址进行 NMAP 服务扫描的输出

UDP 端口扫描

命令如下:

nmap -sU -p 1-1024<target IP address>

到目前为止,您所做的所有扫描都只提供了有关 TCP 端口的信息。但是,目标也可能有在 UDP 端口上运行的服务。默认的 NMAP 扫描只探测 TCP 端口。您需要专门扫描 UDP 端口和服务。要扫描常见的 UDP 端口,可以使用命令nmap -sU -p 1-1024 <target IP address>-sU参数将告诉 NMAP 引擎专门扫描 UDP 端口,而-p 1-1024参数将限制 NMAP 只扫描 1 到 1024 范围内的端口。还需要注意的是,UDP 端口扫描比普通 TCP 扫描花费的时间要长得多。图 1-14 显示了示例 UDP 扫描的输出。

img/475417_1_En_1_Fig14_HTML.jpg

图 1-14

在单个 IP 地址上完成基本 NMAP UDP 扫描的输出

操作系统检测

命令如下:

nmap -O<target IP address>

现在您已经知道如何探测开放端口和枚举服务,您可以更进一步,使用 NMAP 来检测目标运行的操作系统版本。可以使用命令nmap -O <target IP address>。图 1-15 显示了 NMAP 操作系统检测探头的输出。可以看到目标运行的是基于内核 2.6.X 的 Linux。

img/475417_1_En_1_Fig15_HTML.jpg

图 1-15

对单个 IP 地址进行 NMAP 操作系统检测扫描的输出

密集扫描

命令如下:

nmap -T4 -A -v <target IP address>

到目前为止,您已经使用 NMAP 执行了一些单独的任务,例如端口扫描、服务枚举和操作系统检测。但是,可以用一个命令执行所有这些任务。您可以简单地设置您的目标 IP 地址,并选择密集扫描配置文件。NMAP 将进行 TCP 端口扫描,枚举服务,此外还会运行一些高级脚本来提供更多有用的结果。例如,图 1-16 显示了 NMAP 密集扫描的输出,它不仅枚举了一个 FTP 服务器,还突出显示了它启用了匿名 FTP 访问。

img/475417_1_En_1_Fig16_HTML.jpg

图 1-16

在单个 IP 地址上完成的密集 NMAP 扫描的输出

NMAP 剧本

NMAP 长期以来一直是从一个基本的端口扫描器发展而来的。它比一个端口扫描器更强大和灵活。NMAP 的功能可以使用 NMAP 脚本进行扩展。NMAP 脚本引擎能够执行允许深入目标枚举和信息收集的脚本。NMAP 有大约 600 种不同用途的文字。在 Kali Linux 中,可以在/usr/share/nmap/scripts找到脚本。下一节将讨论如何使用 NMAP 脚本来枚举各种 TCP 服务。

HTTP 枚举

HTTP 是许多主机上的常见服务。默认情况下,它运行在端口 80 上。NMAP 有一个枚举 HTTP 服务的脚本。可以使用命令nmap –script http-enum <target IP address>调用它。图 1-17 显示了http-enum脚本的输出。它显示了 web 服务器上托管的各种有趣的目录,这些目录可能有助于构建进一步的攻击。

img/475417_1_En_1_Fig17_HTML.jpg

图 1-17

针对目标 IP 地址执行的 NMAP 脚本 http-enum 的输出

HTTP 方法

HTTP 支持使用各种方法,如 GET、POST、DELETE 等。有时这些方法在 web 服务器上是不必要的。您可以使用 NMAP 脚本http-methods,如图 1-18 所示,枚举目标系统上允许的 HTTP 方法。

img/475417_1_En_1_Fig18_HTML.jpg

图 1-18

针对目标 IP 地址执行的 NMAP 脚本 http-方法的输出

以下是一些用于 HTTP 枚举的附加 NMAP 脚本:

  • http-title

  • http-method-tamper

  • http-trace

  • http-fetch

  • http-wordpress-enum

  • http-devframework

  • http NSE Library

SMB 枚举

服务器消息块(SMB)是广泛用于网络文件共享的协议。SMB 通常在端口 445 上运行。因此,如果您找到一个端口 445 打开的目标,您可以使用 NMAP 脚本进一步枚举它。您可以使用命令nmap -p 445 –script-smb-os-discovery <target IP address>调用 SMB 枚举。-p 445参数触发脚本对目标上的端口 445 运行。图 1-19 中显示的脚本输出将给出确切的 SMB 版本、使用的操作系统和 NetBIOS 名称。

img/475417_1_En_1_Fig19_HTML.jpg

图 1-19

针对目标 IP 地址执行的 NMAP 脚本 smb-os 发现的输出

另一个有用的 NMAP 脚本是smb-enum-shares,如图 1-20 。它列出了目标系统上的所有 SMB 共享。

img/475417_1_En_1_Fig20_HTML.jpg

图 1-20

针对目标 IP 地址执行的 NMAP 脚本 smb-enum-shares 的输出

以下是一些用于 SMB 枚举的附加 NMAP 脚本:

  • smb-vuln-ms17-010

  • smb-protocols

  • smb-mbenum

  • smb-enum-users

  • smb-enum-processes

  • smb-enum-services

DNS 枚举

域名系统确实是互联网的主干,因为它完成了将主机名称转换为 IP 地址的重要工作,反之亦然。默认情况下,它运行在端口 53 上。枚举一个 DNS 服务器可以给出很多有趣和有用的信息。NMAP 有几个用于枚举 DNS 服务的脚本。图 1-21 显示了显示其版本详细信息的 DNS 服务器枚举。

img/475417_1_En_1_Fig21_HTML.jpg

图 1-21

针对目标 IP 地址执行的 DNS 枚举的输出

以下是一些用于 DNS 枚举的附加 NMAP 脚本:

  • dns-cache-snoop

  • dns-service-discovery

  • dns-recursion

  • dns-brute

  • dns-zone-transfer

  • dns-nsid

  • dns-nsec-enum

  • dns-fuzz

  • dns-srv-enum

FTP 枚举

文件传输协议(FTP)是系统间传输文件最常用的协议。默认情况下,它运行在端口 21 上。NMAP 有多个脚本来枚举 FTP 服务。图 1-22 显示了两个脚本的输出。

  • ftp-syst

  • ftp-anon

输出显示了 FTP 服务器版本的详细信息,并揭示了服务器正在接受匿名连接。

img/475417_1_En_1_Fig22_HTML.jpg

图 1-22

针对目标 IP 地址执行的 NMAP 脚本 ftp-syst 和 ftp-anon 的输出

由于目标正在运行 vsftpd 服务器,您可以尝试另一个 NMAP 脚本,该脚本将检查 FTP 服务器是否易受攻击。可以使用脚本ftp-vsftpd-backdoor,如图 1-23 所示。

img/475417_1_En_1_Fig23_HTML.jpg

图 1-23

针对目标 IP 地址执行的 NMAP 脚本 ftp-vsftpd-backdoor 的输出

结果表明,FTP 服务器易受攻击;您将在本书的后面学习如何利用它。

以下是一些用于 FTP 枚举的附加 NMAP 脚本:

  • ftp-brute

  • ftp NSE

  • ftp-bounce

  • ftp-vuln-cve2010-4221

  • ftp-libopie

MySQL 枚举

MySQL 是最流行的开源关系数据库管理系统之一。默认情况下,它运行在端口 3306 上。NMAP 有枚举 MySQL 服务的脚本。枚举一个 MySQL 服务可以揭示许多潜在的信息,这些信息可能被进一步用来攻击目标数据库。图 1-24 显示了mysql-info脚本的输出。它显示了协议版本细节、服务器功能和使用中的 salt 值。

img/475417_1_En_1_Fig24_HTML.jpg

图 1-24

针对目标 IP 地址执行的 NMAP 脚本 mysql-info 的输出

以下是一些用于 MySQL 枚举的附加 NMAP 脚本:

  • mysql-databases

  • mysql-enum

  • mysql-brute

  • mysql-query

  • mysql-empty-password

  • mysql-vuln-cve2012-2122

  • mysql-users

  • mysql-variables

SSH 枚举

安全外壳(SSH)协议广泛用于安全的远程登录和管理。与 Telnet 不同,SSH 加密流量,使通信安全。默认情况下,它运行在端口 22 上。NMAP 有枚举 SSH 服务的脚本。图 1-25 显示了ssh2-enum-algos脚本的输出。它列出了目标 SSH 服务器支持的不同加密算法。

img/475417_1_En_1_Fig25_HTML.jpg

图 1-25

针对目标 IP 地址执行的 NMAP 脚本 ssh2-enum-algos 的输出

以下是一些用于 SSH 枚举的附加 NMAP 脚本:

  • ssh-brute

  • ssh-auth-methods

  • ssh-run

  • ssh-hostkey

  • sshv1

  • ssh-publickey-acceptance

SMTP 枚举

简单邮件传输协议(SMTP)用于传输电子邮件。默认情况下,它运行在端口 25 上。NMAP 有几个用于枚举 SMTP 服务的脚本。这些 NMAP 脚本可能会暴露 SMTP 服务器中的几个弱点,如开放中继、接受任意命令等。图 1-26 显示了smtp-commands脚本的输出。它列出了目标 SMTP 服务器正在接受的各种命令。

img/475417_1_En_1_Fig26_HTML.jpg

图 1-26

NMAP 脚本 smtp 的输出-针对目标 IP 地址执行的命令

许多 SMTP 服务器错误地启用了开放中继。这使得任何人都可以不经过身份验证就连接到 SMTP 服务器并发送邮件。这确实是一个严重的缺陷。NMAP 有一个名为smtp-open-relay的脚本,用于检查目标 SMTP 服务器是否允许开放中继,如图 1-27 所示。

img/475417_1_En_1_Fig27_HTML.jpg

图 1-27

针对目标 IP 地址执行的 NMAP 脚本 smtp-open-relay 的输出

以下是一些用于 SMTP 枚举的附加 NMAP 脚本:

  • smtp-enum-users

  • smtp-commands

  • smtp-brute

  • smtp-ntlm-info

  • smtp-strangeport

  • smtp-vuln-cve2011-1764

VNC 枚举

虚拟网络计算(VNC)协议通常用于远程图形桌面共享。默认情况下,它运行在端口 5900 上。NMAP 有几个脚本来枚举 VNC 服务。图 1-28 显示了vnc-info脚本的输出。它显示了协议版本详细信息以及身份验证类型。

img/475417_1_En_1_Fig28_HTML.jpg

图 1-28

针对目标 IP 地址执行的 NMAP 脚本 vnc-info 的输出

以下是 VNC 枚举的一些附加 NMAP 脚本:

  • vnc-brute

  • realvnc-auth-bypass

  • vnc-title

服务横幅抓取

系统上运行的任何服务通常都有一个与之相关联的横幅。横幅通常包含服务器版本信息,甚至可能包含特定于组织的信息,如免责声明、警告或一些公司电子邮件地址。抓住服务横幅以获得更多关于目标的信息当然是值得的。NMAP 脚本banner探测目标上运行的所有服务并抓取它们的横幅,如图 1-29 所示。

img/475417_1_En_1_Fig29_HTML.jpg

图 1-29

针对目标 IP 地址执行的 NMAP 脚本横幅的输出

检测漏洞

到目前为止,您已经看到了端口扫描和枚举的 NMAP 功能。现在,您将了解如何使用 NMAP 进行漏洞评估。虽然不如 Nessus 和 OpenVAS 等漏洞扫描器全面,但 NMAP 肯定可以进行基本的漏洞检测。NMAP 借助通用漏洞和暴露(CVE)id 来实现这一点。它根据目标上运行的服务搜索匹配的 CVE。要将 NMAP 变成一个漏洞扫描器,你首先需要下载并安装一些额外的脚本。图 1-30 显示了所需脚本的安装。首先导航到目录/usr/share/nmap/scripts,然后克隆两个git目录,如下所示:

img/475417_1_En_1_Fig30_HTML.jpg

图 1-30

Git 将 nmap-vulners 克隆到本地目录

一旦下载了所需的脚本,就可以对目标执行它们了。可以使用nmap -sV –script nmap-vulners <target IP address>命令,如图 1-31 所示。

img/475417_1_En_1_Fig31_HTML.jpg

图 1-31

针对目标 IP 地址执行的 NMAP 脚本 nmap-vulners 的输出

有趣的是,您可以看到许多 CVE 可以与运行在 TCP 端口 53 上的 ISC BIND 9.4.2 兼容。此 CVE 信息可用于进一步攻击目标。还可以看到几个运行 Apache httpd 2.2.8 服务器的 TCP 端口 80 的 CVE,如图 1-32 所示。

img/475417_1_En_1_Fig32_HTML.jpg

图 1-32

针对目标 IP 地址执行的 NMAP 脚本 nmap-vulners 的输出

NMAP 产量

到目前为止,您已经浏览了各种有用的 NMAP 功能。值得注意的是,NMAP 产生的输出可以提供给许多其他安全工具和产品。因此,您必须了解 NMAP 能够生成的不同输出格式,如下所示:

|

转换

|

例子

|

描述

|
| --- | --- | --- |
| -oN | nmap 192.168.25.129 -oN output.txt | 对目标 IP 地址执行扫描,然后将正常输出写入文件output.txt |
| -oX | nmap 192.168.25.129 -oX output.xml | 对目标 IP 地址执行扫描,然后将正常输出写入 XML 文件output.xml |
| -oG | nmap 192.168.25.129 -oG output.grep | 对目标 IP 地址执行扫描,然后将 greppable 输出写入文件output.grep |
| --append-output | nmap 192.168.25.129 -oN file.file --append-output | 对目标 IP 地址执行扫描,然后将扫描输出附加到以前的扫描文件中 |

NMAP 和 Python

在本章中,您已经看到了 NMAP 的众多功能,以及 NMAP 如何有效地用于信息收集、枚举和主动扫描。NMAP 还可以从各种编程语言中调用和执行,这使得它更加强大。Python 是一种用于通用编程的解释型高级编程语言。Python 确实是用户友好的,而且极其灵活。它有一套丰富的现成库,可用于执行各种任务。深入 Python 语言基础和语法的细节超出了本书的范围。假设您对 Python 有一些基本的了解,这一节将讨论如何使用 Python 来调用和自动化 NMAP 扫描。

Python 默认安装在大多数基于 Unix 的系统上。但是,您需要单独安装 NMAP 库。在基于 Debian 的系统上,你可以简单地使用命令pip install python-nmap,如图 1-33 所示。该命令将安装所需的 NMAP 库。

img/475417_1_En_1_Fig33_HTML.jpg

图 1-33

在基于 Debian 的系统上安装 python-nmap 库

现在您已经安装了所需的 NMAP 库,通过键入python命令从终端启动 Python 解释器,并导入 NMAP 库,如下所示:

root@kali:~# python
Python 2.7.14+ (default, Dec  5 2017, 15:17:02)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nmap
>>>

现在可以创建一个名为nmp的新对象来调用PortScanner函数。然后对目标 IP 地址 127.0.0.1 和端口 1 到 50 发起新的扫描,如下所示:

>>> nmp = nmap.PortScanner()
>>> nmp.scan('127.0.0.1', '1-50')

扫描完成并向您提供以下输出:

{'nmap': {'scanstats': {'uphosts': '1', 'timestr': 'Fri Sep 21 14:02:19 2018', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '1.06'}, 'scaninfo': {'tcp': {'services': '1-50', 'method': 'syn'}}, 'command_line': 'nmap -oX - -p 1-50 -sV 127.0.0.1'}, 'scan': {'127.0.0.1': {'status': {'state': 'up', 'reason': 'localhost-response'}, 'hostnames': [{'type': 'PTR', 'name': 'localhost'}], 'vendor': {}, 'addresses': {'ipv4': '127.0.0.1'}, 'tcp': {22: {'product': 'OpenSSH', 'state': 'open', 'version': '7.7p1 Debian 4', 'name': 'ssh', 'conf': '10', 'extrainfo': 'protocol 2.0', 'reason': 'syn-ack', 'cpe': 'cpe:/o:linux:linux_kernel'}}}}}

虽然前面的输出是原始的,但肯定可以使用许多 Python 函数进行格式化。运行初始扫描后,您可以探索不同的功能来检索特定的扫描详细信息。

扫描信息()

scaninfo()函数返回扫描细节,如使用的方法和探测的端口范围。

>>> nmp.scaninfo()
{'tcp': {'services': '1-1024', 'method': 'syn'}}

所有主机()

all_hosts()函数返回所有被扫描的 IP 地址列表。

>>> nmp.all_hosts()
['192.168.25.129']

状态()

state()函数返回被扫描的 IP/主机的状态,比如它是启动还是关闭。

>>> nmp['192.168.25.129'].state()
'up'

按键()

keys()函数返回扫描过程中发现的所有开放端口的列表。

>>> nmp['192.168.25.129']['tcp'].keys()
[512, 513, 514, 139, 111, 80, 53, 22, 23, 25, 445, 21]

has_tcp()

has_tcp()函数检查在对目标 IP 地址进行扫描的过程中,是否发现某个特定端口处于打开状态。

>>> nmp['192.168.25.129'].has_tcp(22)
True

命令行()

command_line()函数返回在后台运行以产生输出的确切的 NMAP 命令。

>>> nmp.command_line()
'nmap -oX - -p 1-50 -sV 127.0.0.1'

主机名()

hostname()函数返回您作为参数传递的 IP 地址的主机名。

>>> nmp['127.0.0.1'].hostname()
'localhost'

所有协议()

all_protocols函数返回目标 IP 地址支持的协议列表。

>>> nmp['127.0.0.1'].all_protocols()
['tcp']

现在您已经知道了从 Python 调用 NMAP 的基本函数,您可以编写一些简单的 Python 代码,使用一个循环来扫描多个 IP 地址。然后,您可以使用各种文本处理函数来清理和格式化输出。

摘要

在本章中,您学习了漏洞评估和渗透测试的概念。现在,您已经了解了渗透测试生命周期的不同阶段,以及 NMAP、OpenVAS 和 Metasploit 的重要性,它们能够执行渗透测试生命周期所有阶段的大多数任务。

本章向您简要介绍了 NMAP 工具的基本知识和要点,并深入探讨了如何使用脚本扩展 NMAP 功能。这一章还提到了将 NMAP 与 Python 脚本相结合。

自己动手做练习

  • 在 Windows 和 Ubuntu 上安装 NMAP。

  • 使用 NMAP 命令行在目标系统上执行 UDP 扫描。

  • 使用 NMAP 检测目标系统上的操作系统。

  • 在目标系统上使用 NMAP 密集扫描。

  • 使用各种 NMAP 脚本来枚举目标系统上的服务。

  • 编写一些 Python 代码,扫描目标系统上的 1 到 500 个端口。*

二、OpenVAS

在上一章中,您了解了 NMAP 及其功能。在本章中,您将了解如何使用 OpenVAS 执行漏洞评估。具体来说,本章包括以下内容:

  • OpenVAS 简介

  • 设置 OpenVAS

  • 将 NMAP 结果导入 OpenVAS

  • 漏洞扫描

  • 报告

注意

OpenVAS 的目的仅限于漏洞扫描,不像 NMAP 和 Metasploit 能够做更多的事情。从这个角度来看,本章涵盖了所有重要的 OpenVAS 任务。这将为下一章中 OpenVAS 与 Metasploit 的集成做好准备,真正的乐趣将从这一章开始。

OpenVAS 简介

在上一章中,你了解了 NMAP。NMAP 不仅仅是一个端口扫描器。例如,您使用 NMAP 进行漏洞检测。但是,它有一定的局限性。NMAP 主要检测有限的已知 cv。因此,您肯定需要一个更好的解决方案来执行漏洞评估。以下是一些受欢迎的选择:

  • 涅索斯

  • 连锁姿势

  • 科力斯卫士

  • open vas!open vas!open vas

这些产品是成熟的,并且在工业中广泛使用。在本书的范围内,您将学习 OpenVAS 平台。它免费供社区使用,并提供了许多有用的功能。

OpenVAS 是开放漏洞评估系统的缩写。它不仅仅是一个工具,而是一个由多个服务和工具组成的完整框架,提供了一个全面而强大的漏洞扫描和漏洞管理解决方案。

就像防病毒解决方案有检测已知恶意软件的签名一样,OpenVAS 有一套网络漏洞测试(nvt)。nvt 是使用插件进行的,这些插件是使用 Nessus 攻击脚本语言(NASL)代码开发的。OpenVAS 中有超过 50,000 个 nvt,并且正在定期添加新的 nvt。

装置

OpenVAS 提供了多种安装选项,包括 Docker 容器。它可以安装在各种操作系统上。然而,开始使用 OpenVAS 最简单、最快速的方法是下载 OpenVAS 虚拟设备。OpenVAS 虚拟设备 ISO 镜像可从 https://www.greenbone.net/en/install_use_gce/ 下载。

使用这种虚拟设备的好处是,它已经具备了所有的依赖项,并且一切都已设置好。你所需要做的就是下载 ISO 镜像,在 VMware/VirtualBox 中启动它,并设置一些基本的东西,OpenVAS 很快就会启动并运行。

启动下载的 ISO 后,选择设置选项即可开始,如图 2-1 所示。

img/475417_1_En_2_Fig1_HTML.jpg

图 2-1

OpenVAS 虚拟机初始安装屏幕

然后启动设置,如图 2-2 所示。

img/475417_1_En_2_Fig2_HTML.jpg

图 2-2

OpenVAS 安装和设置

现在您需要创建一个新用户,用于管理目的,如图 2-3 所示。

img/475417_1_En_2_Fig3_HTML.jpg

图 2-3

为 OpenVAS 管理员设置用户

然后为新创建的用户设置密码,如图 2-4 所示。

img/475417_1_En_2_Fig4_HTML.jpg

图 2-4

为 OpenVAS 管理用户设置密码

一旦您设置了管理凭证,安装将重新启动,您将看到引导菜单,如图 2-5 所示。

img/475417_1_En_2_Fig5_HTML.jpg

图 2-5

OpenVAS 开机功能表

接下来,您将看到命令行控制台,如图 2-6 所示,您需要在这里输入之前设置的凭证。

img/475417_1_En_2_Fig6_HTML.jpg

图 2-6

OpenVAS 虚拟机命令行控制台

您可以看到 OpenVAS 设置已经完成,其 web 界面已经在http://192.168.25.136可用。您可以尝试访问 web 界面,如图 2-7 所示。

img/475417_1_En_2_Fig7_HTML.jpg

图 2-7

带有登录字段的 OpenVAS web 界面

同时,您需要引导进入操作系统并进行一些额外的设置更改,如图 2-8 所示。

img/475417_1_En_2_Fig8_HTML.jpg

图 2-8

OpenVAS 设置和用户配置

您需要创建一个新的管理员用户,并设置用户名和密码,如图 2-9 所示。

img/475417_1_En_2_Fig9_HTML.jpg

图 2-9

OpenVAS 虚拟机用户配置

你用的 OpenVAS 版本是社区版,不需要任何密钥。但是,如果您想使用商业版本,那么您需要输入订阅密钥。现在可以跳过这一步,如图 2-10 所示。

img/475417_1_En_2_Fig10_HTML.jpg

图 2-10

OpenVAS 订阅密钥上传屏幕

OpenVAS 管理

在上一节中,您看到了如何通过下载现成的虚拟机设置来设置 OpenVAS。现在,在进入实际的扫描部分之前,您需要设置一些东西作为管理的一部分。

订阅源更新

提要是 OpenVAS 绝对必要的组成部分。如果您的 OpenVAS 设置有旧的提要,那么您可能会错过检测最新的漏洞。因此,在开始任何扫描之前准备好最新的提要是至关重要的。要检查当前的馈送版本,请转到附加➤馈送状态,如图 2-11 所示。您可以看到提要已经 54 天没有更新了。

img/475417_1_En_2_Fig11_HTML.jpg

图 2-11

OpenVAS 订阅源状态,包含过期的订阅源

要更新提要,您可以到终端键入命令openvas-feed-update,如图 2-12 所示。只要确保你有一个活跃的互联网连接来更新源。

img/475417_1_En_2_Fig12_HTML.jpg

图 2-12

更新 OpenVAS 漏洞源

订阅源更新需要一些时间;完成后,您可以再次进入 OpenVAS web 界面并检查提要状态。现在你应该看到进给状态是当前的,如图 2-13 所示。

img/475417_1_En_2_Fig13_HTML.jpg

图 2-13

OpenVAS feed 状态,已更新

用户管理

OpenVAS 工作在客户机-服务器架构中,多个用户可以连接到一个中央服务器。因此,创建和管理用户和组非常重要。在创建用户之前,您需要准备好一些用户组。要创建新的 OpenVAS 用户组,请进入管理➤用户组,如图 2-14 所示。

img/475417_1_En_2_Fig14_HTML.jpg

图 2-14

OpenVAS 用户管理控制台

创建和配置所需的组后,您可以创建新用户,并根据他们的权限级别将他们分配到特定的组。要创建新用户,请进入管理➤用户,如图 2-15 所示。

img/475417_1_En_2_Fig15_HTML.jpg

图 2-15

向 OpenVAS 添加新用户

虽然 OpenVAS 允许您在本地创建和管理用户,但它也允许您使用轻量级目录访问协议(LDAP)进行集中式用户管理。可以通过转到管理➤ LDAP 来配置 LDAP 设置,如图 2-16 所示。

img/475417_1_En_2_Fig16_HTML.jpg

图 2-16

LDAP 认证的 OpenVAS 配置

类似地,OpenVAS 也可以配置为针对 RADIUS 服务器进行身份验证。可以在管理➤ RADIUS 配置 RADIUS 服务器设置,如图 2-17 所示。

img/475417_1_En_2_Fig17_HTML.jpg

图 2-17

RADIUS 身份验证的 OpenVAS 配置

仪表盘

OpenVAS 有一个丰富的仪表板,默认情况下是它的主页。仪表板提供了任务、主机、nvt 等的集中视图,如图 2-18 所示。每个人口统计可以导出为 CSV 格式。

img/475417_1_En_2_Fig18_HTML.jpg

图 2-18

带有人口统计数据的 OpenVAS 仪表板

调度程序

在企业环境中,可能会发生需要在工作时间以外运行扫描的情况。在这种情况下,OpenVAS 调度程序非常方便。调度程序可在配置➤调度时访问,并可用于在特定时间触发扫描,如图 2-19 所示。

img/475417_1_En_2_Fig19_HTML.jpg

图 2-19

OpenVAS 扫描计划程序

垃圾桶

如果您碰巧删除了 OpenVAS 中的任何实体,然后需要恢复它们,可以通过垃圾桶恢复它们。您可以在 Extras ➤垃圾桶处获取,如图 2-20 所示。

img/475417_1_En_2_Fig20_HTML.jpg

图 2-20

用于查看和恢复已删除项目的 OpenVAS 垃圾桶

帮助

虽然 OpenVAS 中的大多数任务都很简单,很容易找到,但您可能需要一些特定主题的帮助。OpenVAS 有全面的帮助文档,您可以在帮助➤目录中访问,如图 2-21 所示。

img/475417_1_En_2_Fig21_HTML.jpg

图 2-21

OpenVAS 帮助内容

漏洞扫描

现在,您已经设置了 OpenVAS 并使用更新的提要运行,您可以开始扫描活动目标了。在这里,您将首先尝试扫描一个 Linux 系统。登录 OpenVAS web 界面,如图 2-22 所示。

img/475417_1_En_2_Fig22_HTML.jpg

图 2-22

OpenVAS 登录页

下一步是创建新的扫描任务。要创建新的扫描任务,请转到扫描➤任务,如图 2-23 所示。

img/475417_1_En_2_Fig23_HTML.jpg

图 2-23

OpenVAS 仪表板和任务向导

现在,您可以选择启动一个简单的任务向导,或者使用一个提供更多扫描灵活性的高级任务向导。现在,您将从简单任务向导开始,如图 2-24 所示。你需要做的就是输入目标 IP 地址,然后点击开始扫描。

img/475417_1_En_2_Fig24_HTML.jpg

图 2-24

在 OpenVAS 中启动新的漏洞扫描

注意,OpenVAS 有几个预定义的扫描配置文件。根据具体要求,您可以选择以下扫描配置文件之一:

  • 发现

  • 完整和快速

  • 完整快速终极版

  • 饱满而且非常深

  • 完整和非常深刻的终极

  • 主机发现

  • 系统发现

对于默认扫描,选择完整和快速配置文件。

扫描开始,你可以看到扫描状态被设置为正在运行,如图 2-25 所示。如果需要,扫描的“处理措施”选项卡提供了暂停和恢复扫描的各种方法。

img/475417_1_En_2_Fig25_HTML.jpg

图 2-25

OpenVAS 任务状态仪表板

扫描完成后,您可以转到“扫描➤结果”查看扫描过程中发现的漏洞,如图 2-26 所示。现在扫描已经完成,您只需在 OpenVAS web 控制台中查看扫描结果,或者以您选择的格式下载一份综合报告。

img/475417_1_En_2_Fig26_HTML.jpg

图 2-26

OpenVAS 扫描结果

也可以过滤掉漏洞结果。例如,您可能只想查看与 HTTP 相关的漏洞。只需转到扫描➤结果,在过滤选项卡上,输入过滤标准,如图 2-27 所示。

img/475417_1_En_2_Fig27_HTML.jpg

图 2-27

OpenVAS 扫描结果和过滤器

OpenVAS 附加设置

到目前为止,您已经看到了如何设置 OpenVAS 虚拟机并开始进行漏洞扫描。OpenVAS 是一个灵活的漏洞管理系统,提供了很多定制。本节讨论一些额外的 OpenVAS 设置,您可以根据自己的需求选择配置。

表演

OpenVAS 当然是一个资源密集型工具。它会消耗大量内存和 CPU。因此,在扫描大量系统时,关注其性能是值得的。要查看性能数据,请进入 Extras ➤性能,如图 2-28 所示。您可以通过筛选日期来查看自定义时间段的性能数据。

img/475417_1_En_2_Fig28_HTML.jpg

图 2-28

OpenVAS 资源和性能管理摘要

CVSS 计算器

通用漏洞评分系统(CVSS)是许多安全产品用来计算漏洞严重性的基准。CVSS 在计算漏洞分数之前会考虑多个参数。OpenVAS 提供了一个现成的 CVSS 计算器,您可以使用它来计算漏洞分数。您可以在 Extras ➤ CVSS 计算器访问 CVSS 计算器,如图 2-29 所示。你可以在 https://www.first.org/cvss/ 找到更多关于 CVSS 的细节。

img/475417_1_En_2_Fig29_HTML.jpg

图 2-29

OpenVAS CVSS 计算器

设置

OpenVAS 是一个高度可配置的系统,有许多设置。在一个地方获得所有设置及其值的概述会非常有用。您可以进入 Extras ➤我的设置,如图 2-30 所示,了解到目前为止配置的设置概况。

img/475417_1_En_2_Fig30_HTML.jpg

图 2-30

OpenVAS 管理设置

报告

到目前为止,您已经学习了如何有效地使用 OpenVAS 扫描目标系统。扫描完成后,下一个重要步骤是生成详细的报告。拥有一份全面的报告极其重要,因为它将帮助管理员修复已发现的漏洞。OpenVAS 支持多种报告格式,如下所示:

  • 匿名 XML

  • 客户终端设备(Customer Premise Equipment 的缩写)

  • CSV 主机

  • CSV 结果

  • 超文本标记语言

  • 重复测试生成程序

  • 乳液

  • 近带边

  • 便携文档格式

  • 拓扑 SVG

  • 文本文件(textfile)

  • ISM Verinices

  • ITG Verinices

  • 可扩展置标语言

要生成所需格式的报告,进入扫描➤报告,从下拉菜单中选择格式,点击旁边的向下箭头下载报告,如图 2-31 所示。

img/475417_1_En_2_Fig31_HTML.jpg

图 2-31

导出扫描结果

该报告包含详细的漏洞信息,如图 2-32 所示。

img/475417_1_En_2_Fig32_HTML.jpg

图 2-32

OpenVAS HTML 扫描报告

对于每个已识别的漏洞,报告包含以下详细信息:

  • 摘要

  • 漏洞检测结果

  • 影响

  • 解决办法

  • 受影响的软件/操作系统

  • 漏洞洞察

  • 漏洞检测方法

  • 产品检测结果

  • 参考

摘要

本章为您提供了 OpenVAS 的基本概述,从它的设置到使用它执行漏洞评估。下一章将向您介绍通用的 Metasploit 框架,并帮助您理解 NMAP 和 OpenVAS 如何与 Metasploit 集成。

自己动手做练习

  • 在 VirtualBox 或 VMware 中设置 OpenVAS。

  • 使用 OpenVAS 扫描一台 Windows 主机和一台基于 Unix 的主机。

  • 生成 HTML 和 PDF 格式的漏洞报告。

三、渗透测试指南

前两章介绍了 NMAP 和 OpenVAS,您可以使用它们来执行信息收集、枚举和漏洞评估。接下来,本章将介绍 Metasploit 的基础知识,这将帮助您完成渗透测试生命周期的剩余阶段。具体来说,本章包括以下内容:

  • Metasploit 简介

  • Metasploit 结构概述

  • 基本命令和配置

  • 从 Metasploit 调用 NMAP 和 OpenVAS 扫描

  • 使用 Metasploit 扫描服务

  • 仪表首选基础

Metasploit 简介

Metasploit 发布于 2003 年,当时 H.D Moore 用 Perl 开发了一个可移植的网络工具。在 2007 年,使用 Ruby 对其进行了修订。当 Rapid 7 在 2009 年收购 Metasploit 项目时,该项目获得了商业认可和普及。

Metasploit 不仅仅是一个工具。这是一个完整的框架。它非常健壮和灵活,有大量的工具来执行各种简单和复杂的任务。它有一种独特的能力来执行渗透测试生命周期中几乎所有的任务。通过使用 Metasploit,您不需要重新发明轮子;您只需要关注渗透测试的目标,所有的支持行为都可以使用框架的不同组件来执行。

虽然 Metasploit 功能强大,但是您需要清楚地了解它的结构和组件,以便有效地使用它。

Metasploit 有三个可用版本。

  • metasploit pro

  • Metasploit 社区

  • Metasploit 框架

对于本书的范围,我们将使用 Metasploit 框架版本。

元质体的解剖和结构

在开始实际的框架命令之前,首先需要理解 Metasploit 的结构。了解整个 Metasploit 结构的最好和最简单的方法就是浏览它的目录。在 Kali Linux 中,Metasploit 默认位于/usr/share/metasploit-framework,如图 3-1 所示。

img/475417_1_En_3_Fig1_HTML.jpg

图 3-1

Metasploit 目录结构

您可以看到 Metasploit 有一个定义良好的结构,将它的各种组件分成不同的类别。

在高层次上,Metasploit 可以被可视化,如图 3-2 所示。

img/475417_1_En_3_Fig2_HTML.jpg

图 3-2

Metasploit 的各种组件

助动词

辅助是使 Metasploit 如此灵活的模块。Metasploit 辅助只不过是专门为执行任务而编写的一段代码。例如,您可能想要检查特定的 FTP 服务器是否允许匿名访问,或者您的 web 服务器是否容易受到 heartbleed 攻击。对于所有这些任务,都有一个辅助模块。

事实上,Metasploit 有 1000 多个辅助模块,分为 19 个类别。以下是 Metasploit 中可用的辅助类别:

| 管理 | 分析 | Bnat 公司 |
| 客户 | 爬行者 | 文档 |
| 两个 | 文件格式 | 福尔扎尔斯!福尔扎尔斯!福尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔扎尔 |
| 聚集 | 句法分析程序 | 可移植文档格式文件的扩展名(portable document format 的缩写) |
| 扫描仪 | 计算机网络服务器 | 嗅探器 |
| 愚弄 | 炒 | (同 VoiceoverInternetProtocol)网络电话 |
| 汉化版 |   |   |

有效载荷

您已经了解到,漏洞是用来攻击易受攻击组件的一段代码。漏洞利用代码可能会成功运行,但是一旦漏洞利用成功,您希望发生什么是由有效负载定义的。简单来说,有效载荷是在执行一个漏洞利用后需要执行的动作。例如,如果您想为您的系统创建一个反向 shell,那么您需要为此选择适当的 Metasploit 有效负载。Metasploit 大约有 42 个有效负载,分为以下类别:

| 挑选 | 陌生人 | 阶段 |

利用

漏洞是 Metasploit 极其重要的一部分。该框架的整个目的是为各种漏洞提供利用。漏洞利用是将在目标系统上执行以利用漏洞的实际代码。Metasploit 在 17 个类别中有超过 1,800 个漏洞。

以下是 Metasploit 中可用的各种攻击类别:

| [计]高级交互执行程序(Advanced Interactive Executive) | 机器人 | 苹果公司 |
| bs 迪 | 拨号上网 | 火狐浏览器 |
| 操作系统 | 问题 | 伊里克斯 |
| Linux 操作系统 | 主机 | 多(前缀) |
| novell 公司出的网络操作系统 | 系统 | 操作系统 |
| Unix 操作系统 | Windows 操作系统 |   |

编码器

Metasploit 帮助您生成各种各样的负载,您可以通过多种方式将这些负载发送到目标。在此过程中,您的有效负载很可能会被目标系统上的防病毒软件或任何安全软件检测到。这就是编码器能有所帮助的地方。编码器使用各种技术和算法来混淆有效载荷,使其不被防病毒软件检测到。Metasploit 有大约 40 个编码器,分为十类,如下所示:

| 煤矿管理局 | 一般的 |
| 米普斯贝 | 简单的 |
| 服务器端编程语言(Professional Hypertext Preprocessor 的缩写) | 告别... |
| 红宝石 | 平流层过程及其在气候中的作用 |
| X64 | X86 |

开采后活动(Post)

一旦您使用任何可用的漏洞获得了对目标系统的基本访问权限,您就可以使用 post 模块来进一步渗透目标系统。这些模块可帮助您完成所有开发后活动,包括以下内容:

  • 将用户权限提升至 root 或管理员

  • 正在检索系统凭据

  • 窃取 cookies 和保存的凭据

  • 捕获目标系统上的击键

  • 执行自定义 PowerShell 脚本以执行其他任务

  • 使访问持久

Metasploit 有大约 311 个开发后模块,分为以下 11 个类别:

| [计]高级交互执行程序(Advanced Interactive Executive) | 机器人 |
| 加拿大白鲑 | 火狐浏览器 |
| 五金器具 | 杜松 |
| Linux 操作系统 | 多(前缀) |
| 系统 | 操作系统 |
| Windows 操作系统 |   |

基本命令和配置

现在您已经了解了 Metasploit 的基本结构和剖析,可以开始使用它的接口了。要访问 Metasploit,打开终端,键入命令msfconsole,如图 3-3 所示。

img/475417_1_En_3_Fig3_HTML.jpg

图 3-3

MSFconsole 的初始屏幕

帮助

一旦你打开了 MSFconsole,你就可以使用help命令获得所有基本命令的信息,如图 3-4 所示。

img/475417_1_En_3_Fig4_HTML.jpg

图 3-4

MSFconsole 中 help 命令的输出

版本

漏洞很快就会被发现,相应的漏洞利用代码通常也会很快发布。因此,Metasploit 保持最新并拥有最新的漏洞利用代码集是非常重要的。为了确保框架版本是最新的,可以使用version命令,如图 3-5 所示。然后,您可以将这个版本与 Metasploit Git 存储库中可用的版本进行比较。

img/475417_1_En_3_Fig5_HTML.jpg

图 3-5

MSFconsole 中 version 命令的输出

连接

我们都知道 Telnet、SSH 和 Netcat 等工具可以帮助我们进行远程管理。Metasploit 有一个名为connect的内置实用程序,可用于建立连接并与远程系统交互。它支持 SSL、代理、旋转和文件传输。connect命令需要有效的 IP 地址和端口才能连接,如图 3-6 所示。

img/475417_1_En_3_Fig6_HTML.jpg

图 3-6

MSFconsole 中 connect 命令的输出

历史

MSFconsole 完全是在命令行上操作的,对于要执行的每个任务,都需要键入一些命令。要查看到目前为止你在 MSFconsole 中使用过的命令,可以使用history命令,如图 3-7 所示。

img/475417_1_En_3_Fig7_HTML.jpg

图 3-7

MSFconsole 中 history 命令的输出

设置和设置 g

Metasploit 有一些变量需要在执行任何模块或利用之前设置。这些变量有两种类型。

  • 局部:局部变量是有限的,只对单个实例有效。

  • 全局:全局变量一旦定义,就适用于整个框架,并且可以在任何需要的地方重用。

set命令用于定义局部变量的值,而setg命令用于定义全局变量的值,如图 3-8 所示。

img/475417_1_En_3_Fig8_HTML.jpg

图 3-8

MSFconsole 中 set 和 setg 命令的输出

得到和得到

在上一节中,您看到了如何设置局部和全局变量的值。一旦这些值被设置,你可以使用getgetg命令查看这些值,如图 3-9 所示。get命令获取局部变量的值,而getg命令获取全局变量的值。

img/475417_1_En_3_Fig9_HTML.jpg

图 3-9

MSFconsole 中 get 和 getg 命令的输出

未设置和未设置

unset命令用于删除分配给局部变量的值,而unsetg命令用于删除分配给全局变量的值,如图 3-10 所示。

img/475417_1_En_3_Fig10_HTML.jpg

图 3-10

MSFconsole 中 unset 和 unsetg 命令的输出

救援

在进行渗透测试项目时,可能会配置大量的全局变量和设置。你当然不想丢失这些设置;save命令将当前配置写入文件,如图 3-11 所示。

img/475417_1_En_3_Fig11_HTML.jpg

图 3-11

MSFconsole 中 save 命令的输出

信息

Metasploit 中有大量可用的模块和插件。不可能知道他们所有人。无论何时你想使用任何模块,你都可以使用info命令找到更多关于它的细节,如图 3-12 所示。只需将模块名作为参数提供给info命令来获取它的详细信息。

img/475417_1_En_3_Fig12_HTML.jpg

图 3-12

MSFconsole 中 info 命令的输出

抗高血压药

Metasploit 基于 Ruby。它提供了一个交互式 Ruby (irb) shell,您可以在其中执行自己的定制命令集。该模块增强了 Metasploit 的后期开发能力。只需输入irb命令,如图 3-13 所示,进入 irb shell。要了解更多 Ruby 编程,请参考 https://www.ruby-lang.org/en/

img/475417_1_En_3_Fig13_HTML.jpg

图 3-13

MSFconsole 中 irb 命令的输出

显示

在本章的开始部分,您看到了 Metasploit 的各种组件,包括辅助、利用、有效负载等等。使用show命令,如图 3-14 所示,可以列出每个类别的内容。例如,您可以使用show auxiliary命令列出框架中所有可用的辅助模块。

img/475417_1_En_3_Fig14_HTML.jpg

图 3-14

MSFconsole 中 show 命令的输出

线轴

您已经看到了save命令,它将配置写入文件。在一个特定的场景中,您可能希望保存您执行的所有模块和命令的输出。spool命令,如图 3-15 所示,将所有控制台输出记录到指定文件。

img/475417_1_En_3_Fig15_HTML.jpg

图 3-15

MSFconsole 中 spool 命令的输出

制造商

自动化在任何框架中都扮演着重要的角色。将一堆重复的任务自动化总是有助于节省时间和精力。如图 3-16 所示的makerc命令通过将 Metasploit 任务保存为脚本来帮助您自动化这些任务。

img/475417_1_En_3_Fig16_HTML.jpg

图 3-16

MSFconsole 中 makerc 命令的输出

数据库启动

考虑到 Metasploit 的复杂性,必须存在一些数据库来存储任务的数据是微不足道的。默认情况下,Metasploit 与 PostgreSQL 数据库集成在一起。首先需要通过执行systemctl start postgresql命令,然后执行msfdb init命令来启动数据库服务,如图 3-17 所示。

img/475417_1_En_3_Fig17_HTML.jpg

图 3-17

终端中 systemctl 和 msfdb init 命令的输出

数据库状态

一旦初始化了数据库,就可以通过执行 MSFconsole 中的命令db_status来确认 Metasploit 已经连接到它,如图 3-18 所示。

img/475417_1_En_3_Fig18_HTML.jpg

图 3-18

MSFconsole 中 db_status 命令的输出

工作空间

有时,您可能需要同时处理多个渗透测试项目。您肯定不希望混淆来自多个项目的数据。Metasploit 提供了高效的工作空间管理。对于每个新项目,您可以创建一个新的工作区,从而将项目数据限制在该工作区内。如图 3-19 所示的workspace命令列出了可用的工作空间。您可以使用命令workspace -a <name>创建一个新的工作空间。

img/475417_1_En_3_Fig19_HTML.jpg

图 3-19

MSFconsole 中 workspace 命令的输出

从 Metasploit 调用 NMAP 和 OpenVAS 扫描

本节介绍如何从 Metasploit 控制台中调用和启动 NMAP 和 OpenVAS 扫描。

NMAP(消歧义)

你在本书前面已经了解了 NMAP。您看到了 NMAP 可以从命令行界面或 ZENMAP 图形用户界面触发。然而,还有另一种方法来启动 NMAP 扫描,那就是通过 Metasploit 控制台。

将 NMAP 扫描结果导入到 Metasploit 中,然后进一步利用开放的服务会很有帮助。有两种方法可以实现这一点。

img/475417_1_En_3_Fig21_HTML.jpg

图 3-21

使用 db_nmap 命令从 MSFconsole 调用 NMAP

  • 从 MSFconsole 内部调用 NMAP:Metasploit 提供命令db_nmap,可以直接从 Metasploit 控制台内部启动 NMAP 扫描,如图 3-21 所示。

img/475417_1_En_3_Fig20_HTML.jpg

图 3-20

MSFconsole 中 db_import 和 hosts 命令的输出

  • 导入 NMAP 扫描:您知道 NMAP 能够以 XML 格式生成和保存扫描输出。您可以使用db_import命令将 NMAP XML 输出导入到 Metasploit 中,如图 3-20 所示。

一旦 NMAP 扫描完成,您可以使用hosts命令来确保扫描完成并且目标被添加到 Metasploit 数据库中。

open vas!open vas!open vas

您已经对 OpenVAS 很熟悉了,因为您在前几章中已经对它的大部分特性有所了解。然而,Metasploit 提供了集成 OpenVAS 的能力,以便在框架内执行任务。在您可以从 MSFconsole 实际执行任何 OpenVAS 任务之前,您需要通过执行命令load openvas来加载 OpenVAS 插件,如图 3-22 所示。

img/475417_1_En_3_Fig22_HTML.jpg

图 3-22

将 OpenVAS 插件加载到 MSFconsole 中

一旦 OpenVAS 加载到 MSFconsole 中,您就可以执行许多任务。您可以使用openvas_help命令,如图 3-23 所示,列出所有可能的任务。

img/475417_1_En_3_Fig23_HTML.jpg

图 3-23

MSFconsole 中 openvas_help 命令的输出

OpenVAS 服务器可能运行在本地或某个远程系统上。你需要使用命令openvas_connect连接到 OpenVAS 服务器,如图 3-24 所示。您需要提供用户名、密码、OpenVAS 服务器 IP 和端口作为该命令的参数。

img/475417_1_En_3_Fig24_HTML.jpg

图 3-24

使用 MSFconsole 中的 openvas_connect 命令连接到 OpenVAS 服务器

一旦连接到 OpenVAS 服务器成功,您需要使用命令openvas_target_create创建一个新的目标,如图 3-25 所示。您需要提供测试名称、目标 IP 地址和注释(如果有的话)作为这个命令的参数。

img/475417_1_En_3_Fig25_HTML.jpg

图 3-25

使用 MSFconsole 中的 openvas_target_create 命令为 OpenVAS 扫描创建新目标

创建新目标后,需要使用openvas_config_list命令选择扫描轮廓,如图 3-26 所示。

img/475417_1_En_3_Fig26_HTML.jpg

图 3-26

MSFconsole 中 openvas_config_list 命令的输出

选择扫描配置文件后,就可以创建扫描任务了。命令openvas_task_create可用于创建新任务,如图 3-27 所示。您需要提供扫描名称、注释(如果有)、配置 ID 和目标 ID 作为该命令的参数。

img/475417_1_En_3_Fig27_HTML.jpg

图 3-27

在 MSFconsole 中使用命令 openvas_task_create 创建新的 OpenVAS 扫描任务

现在扫描任务已经创建,您可以使用命令openvas_task_start启动扫描,如图 3-28 所示。您需要提供任务 ID 作为该命令的参数。

img/475417_1_En_3_Fig28_HTML.jpg

图 3-28

使用 MSFconsole 中的 openvas_task_start 命令运行新创建的 OpenVAS 任务

扫描需要一段时间才能完成。一旦扫描完成,您可以使用命令openvas_report_list查看报告,如图 3-29 所示。

img/475417_1_En_3_Fig29_HTML.jpg

图 3-29

在 MSFconsole 中使用 openvas_report_list 命令列出 OpenVAS 报告

现在扫描已经完成,报告也准备好了,您可以使用openvas_report_download命令下载报告,如图 3-30 所示。您需要提供报告 ID、报告格式、输出路径和报告名称作为该命令的参数。

img/475417_1_En_3_Fig30_HTML.jpg

图 3-30

在 MSFconsole 中使用 oepnvas_report_download 命令保存 OpenVAS 报告

使用 Metasploit 辅助工具扫描和利用服务

Metasploit 为扫描、枚举和利用各种服务和协议提供了广泛的利用和辅助模块选择。本节介绍了一些辅助模块,并针对常用协议进行了探讨。

域名服务器(Domain Name Server)

在前一章中,你学习了如何使用 NMAP 来枚举一个 DNS 服务。Metasploit 还有几个辅助模块,可用于 DNS 侦察。

图 3-31 显示了/auxiliary/gather/enum_dns模块的使用。您需要做的就是配置目标域并运行该模块。它返回相关的 DNS 服务器作为结果。

img/475417_1_En_3_Fig31_HTML.jpg

图 3-31

辅助模块 enum_dns 的使用

文件传送协议

假设在进行 NMAP 扫描时,您发现您的目标在端口 21 上运行 FTP 服务器,并且服务器版本是 vsftpd 2.3.4。

您可以使用search函数来查明 Metasploit 是否对 vsftpd 服务器有任何利用,如图 3-32 所示。

img/475417_1_En_3_Fig32_HTML.jpg

图 3-32

搜索 vsftpd 漏洞的输出

这里您将使用漏洞利用/unix/ftp/vsftpd_234_backdoor来利用易受攻击的 FTP 服务器。您可以将目标 IP 地址配置为RHOST变量,然后运行漏洞利用,如图 3-33 所示。

img/475417_1_En_3_Fig33_HTML.jpg

图 3-33

使用 vsftpd _ 234 _ 后门漏洞成功利用目标

攻击成功,您可以通过命令外壳访问目标系统。

超文本传送协议

超文本传输协议(HTTP)是主机上最常见的服务之一。Metasploit 有许多漏洞和辅助工具来枚举和利用 HTTP 服务。辅助模块auxiliary/scanner/http/http_version,如图 3-34 所示,枚举 HTTP 服务器版本。基于确切的服务器版本,您可以更精确地规划进一步的开发。

img/475417_1_En_3_Fig34_HTML.jpg

图 3-34

辅助模块 http_version 的输出

很多时候,web 服务器的目录并不直接公开,并且可能包含有趣的信息。Metasploit 有一个名为auxiliary/scanner/http/brute_dirs的辅助模块,用于扫描此类目录,如图 3-35 所示。

img/475417_1_En_3_Fig35_HTML.jpg

图 3-35

辅助模块 brute_dirs 的输出

远端桌面协定

远程桌面协议(RDP)是微软为远程图形管理开发的专有协议。如果你的目标是基于 Windows 的系统,那么你可以执行一个叫做auxiliary/scanner/rdp/ms12_020_check的辅助模块,如图 3-36 所示。它检查目标是否易受 MS-12-020 漏洞的攻击。您可以在 https://docs.microsoft.com/en-us/security-updates/securitybulletins/2012/ms12-020 了解关于此漏洞的更多详情。

img/475417_1_En_3_Fig36_HTML.jpg

图 3-36

辅助模块 ms12_020_check 的输出

服务器信息块

在上一章中,您使用了 NMAP 来枚举 SMB。Metasploit 为 SMB 的枚举和利用提供了许多有用的辅助模块。

对 SMB 模块的简单搜索获取结果,如图 3-37 所示。

img/475417_1_En_3_Fig37_HTML.jpg

图 3-37

SMB 相关模块和漏洞的搜索查询输出

您可以使用一个名为auxiliary/scanner/smb/smb_enumshares的辅助模块,如图 3-38 所示。您需要将RHOST变量的值设置为目标 IP 地址的值。该模块返回结果以及目标系统上的共享列表。

img/475417_1_En_3_Fig38_HTML.jpg

图 3-38

辅助模块 smb_enumshares 的输出

另一个流行的 SMB 利用漏洞是 MS-08-67 netapi。可以使用漏洞利用exploit/windows/smb/ms08_067_netapi,如图 3-39 。您需要将变量RHOST的值设置为目标系统的 IP 地址。如果攻击成功运行,您将看到 Meterpreter shell。

img/475417_1_En_3_Fig39_HTML.jpg

图 3-39

使用漏洞 ms08_067_netapi 成功利用目标系统

安全外壳(SSH)是安全远程管理的常用协议之一。Metasploit 有许多用于 SSH 枚举的辅助模块。您可以使用辅助模块auxiliary/scanner/ssh/ssh_version,如图 3-40 所示。您需要将RHOST变量的值设置为目标值。该模块执行并返回目标上运行的确切 SSH 版本。这些信息可用于进一步开发。

img/475417_1_En_3_Fig40_HTML.jpg

图 3-40

辅助模块 ssh_version 的输出

远程桌面

虚拟网络计算(VNC)是一种用于图形远程管理的协议。Metasploit 有几个用于枚举和利用 VNC 的模块。图 3-41 显示了auxiliary/scanner/vnc/vnc_login模块的使用。您需要将RHOST变量的值设置为目标系统的 IP 地址。该模块使用内置的密码字典,并试图进行暴力攻击。一旦该模块完成执行,它将为您提供 VNC 密码,您可以使用该密码登录。

img/475417_1_En_3_Fig41_HTML.jpg

图 3-41

辅助模块 vnc_login 的输出

仪表首选基础

Meterpreter 是 Metasploit 解释器的缩写。它是一种高级 Metasploit 负载,使用内存中的 DLL 注入技术与目标系统进行交互。它提供了几个有用的后期开发工具和实用程序。

Meterpreter 命令

Meterpreter 是一种高级有效载荷,用于执行各种开发后活动。以下是一些可以帮助您浏览 Meterpreter 的基本命令。

核心命令

表 3-1 描述了一组核心 Meterpreter 命令,可以帮助您在目标系统上完成各种与会话相关的任务。

表 3-1

Meterpreter 命令

|

命令

|

描述

|
| --- | --- |
| ? | 显示帮助菜单 |
| background | 当前会话的背景 |
| bgkill | 终止后台 Meterpreter 脚本 |
| bglist | 列出正在运行的后台脚本 |
| bgrun | 将 Meterpreter 脚本作为后台线程执行 |
| channel | 显示信息或控制活动频道 |
| close | 关闭频道 |
| disable_unicode_encoding | 禁用 unicode 字符串编码 |
| enable_unicode_encoding | 启用 Unicode 字符串编码 |
| exit | 终止抄表员会话 |
| get_timeouts | 获取当前会话超时值 |
| guid | 获取会话 GUID |
| help | 显示帮助菜单 |
| info | 显示关于开机自检模块的信息 |
| irb | 进入 irb 脚本模式 |
| load | 加载一个或多个抄表员扩展 |
| machine_id | 获取附加到会话的计算机的 MSF ID |
| migrate | 将服务器迁移到另一个进程 |
| pivot | 管理透视侦听器 |
| quit | 终止抄表员会话 |
| read | 从通道读取数据 |
| resource | 运行存储在文件中的命令 |
| run | 执行 Meterpreter 脚本或 post 模块 |
| sessions | 快速切换到另一个会话 |
| set_timeouts | 设置当前会话超时值 |
| sleep | 强制 Meterpreter 进入静默状态,然后重新建立会话 |
| transport | 改变当前的传输机制 |
| uuid | 获取当前会话的 UUID |
| write | 将数据写入通道 |

Stdapi:系统命令

表 3-2 描述了一组基本的系统命令,这些命令提供了一系列系统任务,如进程列表和删除、执行命令、重启等。

表 3-2

系统命令

|

命令

|

描述

|
| --- | --- |
| clearev | 清除事件日志 |
| drop_token | 放弃任何活动的模拟令牌 |
| execute | 执行命令 |
| getenv | 获取一个或多个环境变量值 |
| getpid | 获取当前进程标识符 |
| getprivs | 尝试启用当前进程可用的所有特权 |
| getsid | 获取运行服务器的用户的 SID |
| getuid | 获取运行服务器的用户 |
| kill | 终止一个进程 |
| localtime | 显示目标系统的本地日期和时间 |
| pgrep | 按名称过滤进程 |
| pkill | 按名称终止进程 |
| ps | 列出正在运行的进程 |
| reboot | 重新启动远程计算机 |
| reg | 修改远程注册表并与之交互 |
| rev2self | 在远程机器上调用RevertToSelf() |
| shell | 放入系统命令外壳 |
| shutdown | 关闭远程计算机 |
| steal_token | 试图从目标进程窃取模拟令牌 |
| suspend | 暂停或恢复进程列表 |
| sysinfo | 获取有关远程系统的信息,如操作系统 |

Stdapi:用户界面命令

表 3-3 列出了帮助您从目标系统获取远程屏幕截图和击键的命令。

表 3-3

用户界面命令

|

命令

|

描述

|
| --- | --- |
| enumdesktops | 列出所有可访问的桌面和窗口站 |
| getdesktop | 获取当前的 Meterpreter 桌面 |
| idletime | 返回远程用户空闲的秒数 |
| keyscan_dump | 转储击键缓冲区 |
| keyscan_start | 开始捕获击键 |
| keyscan_stop | 停止捕获击键 |
| screenshot | 抓取交互式桌面的屏幕截图 |
| setdesktop | 更改 Meterpreter 的当前桌面 |
| uictl | 控制一些用户界面组件 |

Stdapi:网络摄像头命令

表 3-4 描述了从连接到您的受损系统的网络摄像头获取实时图片和视频流的有效命令。

表 3-4

网络摄像机命令

|

命令

|

描述

|
| --- | --- |
| record_mic | 从默认麦克风录制音频 x 秒 |
| webcam_chat | 开始视频聊天 |
| webcam_list | 列出网络摄像机 |
| webcam_snap | 从指定的网络摄像头拍摄快照 |
| webcam_stream | 播放来自指定网络摄像头的视频流 |

Stdapi:音频输出命令

表 3-5 描述了一个帮助您在受损系统上播放音频文件的命令。

表 3-5

音频输出命令

|

命令

|

描述

|
| --- | --- |
| play | 在目标系统上播放音频文件,磁盘上不写入任何内容 |

Priv:提升命令

表 3-6 描述了帮助您将权限提升到最高级别的命令,可能是 root 或管理员。

表 3-6

提升命令

|

命令

|

描述

|
| --- | --- |
| getsystem | 试图将您的权限提升到本地系统的权限 |

Priv:口令数据库命令

表 3-7 描述了帮助您从受损系统获取原始密码散列的命令。

表 3-7

密码数据库命令

|

命令

|

描述

|
| --- | --- |
| hashdump | 转储 SAM 数据库的内容 |

Priv: Timestomp 命令

表 3-8 描述了一个命令,它是 Metasploit 反伪造功能的一部分。

表 3-8

时间戳命令

|

命令

|

描述

|
| --- | --- |
| timestomp | 操作文件的 MACE 属性 |

使用流量计

为了熟悉 Meterpreter,我们先利用 SMB MS08-067 netapi 漏洞远程访问一个目标系统,如图 3-42 所示。攻击成功了,你得到了 Meterpreter 外壳。

img/475417_1_En_3_Fig42_HTML.jpg

图 3-42

使用漏洞 ms08_067_netapi 成功利用目标系统

系统信息表

一旦您利用漏洞攻击了目标,您需要检查目标的一些基本细节,如确切的操作系统版本、计算机名称、域、体系结构等等。Meterpreter 提供了一个名为sysinfo的命令,可以用来收集目标的基本信息,如图 3-43 所示。

img/475417_1_En_3_Fig43_HTML.jpg

图 3-43

Meterpreter 中 sysinfo 命令的输出

限位开关(Limit Switch)

Meterpreter ls命令可用于列出受损系统当前目录下的文件,如图 3-44 所示。

img/475417_1_En_3_Fig44_HTML.jpg

图 3-44

远程受损系统上文件的 Meterpreter 列表中辅助 ls 命令的输出

色彩

一旦您获得了对目标系统的访问权,您必须了解您在该系统上拥有什么用户权限。拥有 root 或管理员级别的权限是最理想的,较低的权限访问意味着对您的操作有很多限制。Meterpreter 提供了一个名为getuid的命令,如图 3-45 所示,该命令检查受损系统上的当前权限级别。

img/475417_1_En_3_Fig45_HTML.jpg

图 3-45

Meterpreter 中 getuid 命令的输出

提权

一旦您使用适用的漏洞获得了对目标系统的访问权限,下一个合乎逻辑的步骤就是检查权限。使用getuid命令,您已经测量了您当前的特权级别。您可能没有获得根或管理员级别的访问权限。因此,为了最大化攻击渗透,提升您的用户权限非常重要。Meterpreter 帮助您提升权限。打开 Meterpreter 会话后,您可以使用getsystem命令,如图 3-46 所示,将权限提升至管理员权限。

img/475417_1_En_3_Fig46_HTML.jpg

图 3-46

Meterpreter 中 getsystem 命令的输出

屏幕上显示程序运行的图片

在系统受损后,看一眼目标系统上运行的桌面 GUI 是很有趣的。Meterpreter 提供了一个名为screenshot的实用程序,如图 3-47 所示。它只是拍摄目标系统上当前桌面的快照,并将其保存在本地根文件夹中。

img/475417_1_En_3_Fig47_HTML.jpg

图 3-47

Meterpreter 中屏幕截图命令的输出

图 3-48 显示了从受损系统中捕获的桌面屏幕。

img/475417_1_En_3_Fig48_HTML.jpg

图 3-48

在远程受损系统上运行的桌面的屏幕截图

hashdump

在一次成功的系统入侵之后,您肯定希望获得该系统上不同用户的凭证。打开 Meterpreter 会话后,您可以使用hashdump命令从受损系统中转储所有 LM 和 NTLM 哈希,如图 3-49 所示。一旦你有了这些哈希,你就可以把它们提供给各种离线哈希破解程序,并以纯文本的形式获取密码。

img/475417_1_En_3_Fig49_HTML.jpg

图 3-49

辅助模块 vnc_login 的输出

Searchsploit

到目前为止,您已经了解到 Metasploit 拥有丰富的辅助工具、漏洞、有效负载、编码器等集合。但是,有时 Metasploit 中可能不存在针对某个漏洞的利用代码。在这种情况下,您可能需要将所需的漏洞利用从外部来源导入到 Metasploit 中。Exploit-DB 是各种平台漏洞的综合来源,Searchsploit 是一个帮助在 Exploit-DB 中搜索特定漏洞的实用程序。图 3-50 显示了使用 Searchsploit 工具寻找与当前相关的漏洞。

img/475417_1_En_3_Fig50_HTML.jpg

图 3-50

使用 Searchsploit 工具搜索与 uTorrent 相关的漏洞

摘要

本章向您介绍了 Metasploit 的各个方面,从框架和辅助结构到利用 ast 服务。您还学习了如何利用 Metasploit 功能来集成 NMAP 和 OpenVAS。已经学习了各种 Metasploit 有效负载、辅助工具和利用,在下一章中,您将学习应用这些技能来利用易受攻击的机器。

自己动手做练习

  • 浏览 Metasploit 目录并了解其结构。

  • 尝试各种命令,如setsetgunsetunsetgspool等等。

  • 从 MSFconsole 启动 NMAP 扫描。

  • 在 MSFconsole 中使用 OpenVAS 对目标系统执行漏洞评估。

  • 探索各种辅助模块,并使用它们来扫描 HTTP、FTP、SSH 等服务。

  • 尝试 Meterpreter 的不同功能,如getsystemhashdump

四、用例

在前三章中,您已经熟悉了基本工具 NMAP、OpenVAS 和 Metasploit。您详细了解了每个工具,以及它们如何相互集成以提高效率。

现在是时候将所有的知识整合在一起,并应用到实际场景中了。在本章中,您将应用到目前为止所学的各种技术来利用易受攻击的系统并获得对它的访问。

创建虚拟实验室

在实际生产系统中尝试你新学到的技能并不总是可能的。因此,您可以在自己的虚拟实验室中以受限的方式尝试您的技能。

Vulnhub ( https://www.vulnhub.com )是一个提供下载系统的网站,这些系统被故意设置为易受攻击。您只需下载一个系统映像,并在 VirtualBox 或 VMware 中启动它。

出于本案例研究的目的,请访问 https://www.vulnhub.com/entry/basic-pentesting-1,216/ 并下载该系统。下载后,使用 VirtualBox 或 VMware 启动它。系统的初始启动屏幕如图 4-1 所示。

img/475417_1_En_4_Fig1_HTML.jpg

图 4-1

目标系统的初始引导屏幕

您没有登录系统的任何凭证,因此您必须使用笔测试技能才能进入系统。

进行侦察

在 Kali Linux 中,启动 ZENMAP 对该目标进行端口扫描和服务枚举,如图 4-2 所示。

img/475417_1_En_4_Fig2_HTML.jpg

图 4-2

在目标系统上完成的 NMAP 密集扫描的输出

在 ZENMAP 输出中,您可以看到以下端口是打开的:

  • 运行 ProFTPD 1.3.3c 的端口 21

  • 运行 OpenSSH 7.2p2 的端口 22

  • 运行 Apache httpd 2.4.18 的端口 80

基于此输出,您有三种可能的方法来破坏系统。

  • 在 Metasploit 中搜索并执行 ProFTPD 1.3.3c 的任何漏洞

  • 针对在端口 22 上运行的 SSH 的强力用户凭证

  • 探索是否有任何应用程序托管在端口 80 上

利用系统

当您尝试使用浏览器在端口 80 上访问系统时,您将获得如图 4-3 所示的默认 web 服务器页面。

img/475417_1_En_4_Fig3_HTML.jpg

图 4-3

目标系统上的默认登录网页(端口 80)

现在您将再次回到 NMAP,这次您将使用 NMAP 脚本http-enum,而不是端口扫描,如图 4-4 所示。

img/475417_1_En_4_Fig4_HTML.jpg

图 4-4

在目标系统上执行的 http-enum NMAP 脚本的输出

脚本的输出告诉您,web 服务器上有一个名为secret的文件夹,其中可能有您感兴趣的内容。

收到关于服务器上的secret文件夹的输入后,尝试访问它,如图 4-5 所示。

img/475417_1_En_4_Fig5_HTML.jpg

图 4-5

浏览托管在目标 web 服务器上的秘密目录

你可以看到一个屏幕,暗示它是某种基于 WordPress 的博客。然而,该网页似乎是破碎和不完整的。

当你试图加载页面时,浏览器会寻找vtcsec主机。这意味着您需要配置您的系统来解析这个主机名。你可以简单的打开终端,然后在文本编辑器中打开文件/etc/hosts,如图 4-6 所示。

img/475417_1_En_4_Fig6_HTML.jpg

图 4-6

编辑/etc/hosts 文件以添加新的主机条目

接下来,添加新的一行:192.168.25.132 vtcsec

在终端中,运行以下命令:gedit /etc/hosts

现在,您已经在 hosts 文件中进行了必要的更改,让我们再次尝试访问 web 界面。接口载荷,如图 4-7 所示。

img/475417_1_En_4_Fig7_HTML.jpg

图 4-7

目标系统上的 WordPress 博客主页

通过检查图 4-8 所示的页面,很明显这个应用程序是基于 WordPress 的。

img/475417_1_En_4_Fig8_HTML.jpg

图 4-8

目标系统上的 WordPress 登录页面

接下来,您需要凭证来进入应用程序的管理控制台。您有三种方式获得它们,如下所示:

  • 猜凭据;很多时候,默认凭证是有效的。

  • 使用类似 Hydra 的密码破解工具来破解凭证。

  • 使用 Metasploit 辅助模块auxiliary/scanner/http/wordpress_login_enum对应用程序凭证发起暴力攻击。

在这种情况下,应用程序具有默认的 admin/admin 凭据。

现在您有了应用程序凭证,您可以使用 Metasploit 上传一个恶意插件到 WordPress,这将给予您远程 shell 访问。WordPress 插件是一段现成的代码,你可以导入到 WordPress 安装中,以启用额外的功能。你可以使用 MSFconsole 中的search命令来查找任何与 WordPress 管理相关的漏洞,如图 4-9 所示。

img/475417_1_En_4_Fig9_HTML.jpg

图 4-9

Metasploit 中 wp_admin 漏洞的搜索查询输出

你现在需要使用漏洞利用exploit/unix/webapp/wp_admin_shell_upload,如图 4-10 所示。您需要配置参数USERNAMEPASSWORDTARGETURIRHOST

img/475417_1_En_4_Fig10_HTML.jpg

图 4-10

针对目标系统利用 wp_admin_shell_upload 漏洞获取 Meterpreter 访问权限

该漏洞通过将恶意插件上传到 WordPress 并最终给予您所需的 Meterpreter 访问权限而成功运行。

在最初的 NMAP 扫描中,您发现您的目标也在端口 21 上运行 FTP 服务器。FTP 服务器版本是 ProFTPd 1.3.3。您可以检查 Metasploit 是否利用了此 FTP 服务器版本。使用search命令。

有趣的是,Metasploit 确实利用了 ProFTPd 服务器。可以使用exploit/unix/ftp/proftpd_133c_backdoor,如图 4-11 所示。您需要配置的只是RHOST变量。

img/475417_1_En_4_Fig11_HTML.jpg

图 4-11

proftpd 搜索查询的输出和目标系统上 proftpf_133c_backdoor 漏洞的执行

攻击代码成功运行,并在目标系统上给你一个外壳。

因此,你成功地用两种不同的方式利用了你的目标,一种是通过 WordPress,另一种是通过 FTP 服务器。恭喜你!

posted @ 2024-05-17 13:41  绝不原创的飞龙  阅读(2)  评论(0编辑  收藏  举报