Skip to content

Files

Latest commit

3291d6e · Oct 20, 2021

History

History
460 lines (251 loc) · 18.5 KB

File metadata and controls

460 lines (251 loc) · 18.5 KB

六、将 WMAP 用于漏洞扫描

漏洞评估是对网络或应用中的漏洞进行识别、排序和分类的过程。它让组织了解他们的资产和面临的风险。使用 Metasploit 时,可以使用单独的辅助模块或可用插件进行漏洞扫描。如果我们有自己的漏洞扫描器(内部),Metasploit 框架还允许我们添加自己的自定义插件

WMAP 是一个 Metasploit 插件,它允许用户根据扫描中使用的 Metasploit 模块在目标上执行漏洞扫描。此插件的最佳功能之一是能够根据测试人员的要求使用尽可能多的 Metasploit 模块(包括自定义模块)进行漏洞扫描。测试人员可以创建多个配置文件以适应不同的场景。

在本章中,我们将学习以下主题:

  • 理解 WMAP
  • WMAP 扫描过程
  • WMAP 模块执行顺序
  • 向 WMAP 添加模块
  • 使用 WMAP 进行群集扫描

技术要求

以下是本章的先决条件:

理解 WMAP

WMAP是用于扫描 web 应用漏洞的 web 应用扫描仪插件。它不像 Burp Suite 或 Acunetix 那样是真正的扫描仪,但它确实有自己的优势。在详细介绍 WMAP 之前,让我们先了解一下它的体系结构。

WMAP 体系结构简单但功能强大。WMAP 是一个小框架,作为插件加载到 MSF 中。它与 Metasploit 数据库连接,以获取以前完成的任何扫描的结果。然后,从数据库加载的结果(如主机名、URL、IP 等)将用于 web 应用扫描。WMAP 使用 Metasploit 模块(如下图所示)来运行扫描,模块可以是任何类型–辅助模块、漏洞利用模块等等。一旦 WMAP 开始扫描目标,所有发现的工件和关键信息都存储在 MSF 数据库中。WMAP 最强大的功能之一是其分布式(群集)扫描功能(在本章的使用 WMAP进行群集扫描一节中介绍),这有助于 WMAP 通过n个节点(MSF 从节点)扫描任意数量的 web 应用。

在详细介绍如何使用 WMAP 之前,让我们先了解一下流程。

WMAP 扫描过程

使用 WMAP 非常简单。我们在本节中为希望学习如何使用此插件的初学者定义了一个过程。扫描过程可分为四个阶段:数据侦察加载扫描仪WMAP 配置启动

让我们看一下第一阶段——数据侦察。

数据侦察

在此阶段,使用爬虫、代理和任何其他来源收集与目标相关的信息。然后将数据保存在 MSF 数据库中以供进一步使用。可以使用任何第三方工具(如 Burp Suite 或 Acunetix)获取数据。由于 MSF 支持许多第三方工具,因此可以使用db_import命令将数据导入 MSF。让我们看一个如何将打嗝扫描导入 Metasploit 的示例。

下面的屏幕截图显示了db_import命令的输出:

以下是导出 Burp 套件数据并将其导入 Metasploit 的步骤:

  1. 打开以前完成的域名扫描。它可以是主动的,也可以是被动的。在本例中,我们将使用一个被动扫描prod.packtpub.com的示例。以下屏幕截图中的问题选项卡显示了 Burp 发现的各种问题:

  1. 然后,我们将选择要转移到 Metasploit 的问题并右键单击。然后,我们选择报告所选问题选项,如下所示:

  1. 将打开一个新窗口,要求我们选择报告的格式。我们选择 XML 并单击下一步:

  1. 在下一步中,我们可以在报告中指定所需的详细信息,然后单击“下一步”:

  1. 然后,我们选择是否要从扫描器中包含针对所选问题的请求和响应。我们选择两者并单击下一步:

  1. 接下来,它将要求我们选择要导出的所有问题。我们选择需要的,然后单击下一步:

  1. 在最后一步中,我们选择目标路径和文件名,然后单击下一步:

  1. 现在将导出报告,导出完成后,我们可以关闭窗口:

  1. 要将 Burp Suite 报告导入 Metasploit,只需使用以下命令:
db_import test.xml

以下屏幕截图显示了前面命令的输出:

  1. 导入完成后,我们可以使用hosts命令查看报表中的所有主机,如下图:

  1. 要查看从 Burp Suite 扫描仪导入的漏洞,我们可以使用vulns命令,如以下屏幕截图所示:

由于信息现在已导入 Metasploit,WMAP 也将自动检测并加载相同的信息,这意味着 Metasploit 中的主机现在将自动添加为 WMAP 模块中的站点。

加载扫描仪

正如我们前面提到的,WMAP 实际上是一个加载到 MSF 中的插件。您可以通过键入load命令并按Tab键查看 MSF 上插件的完整列表,如下所示:

要开始加载过程,请遵循以下步骤:

  1. 让我们使用load wmap命令加载 WMAP 插件:

  1. 加载插件后,您可以使用?help命令查看帮助部分,如下所示:

接下来,我们将了解 WMAP 配置。

WMAP 配置

您已经学习了如何在数据侦察阶段自动将目标添加到 WMAP 中。还有另一种将数据加载到 WMAP 的方法,即手动定义目标:

  1. 让我们先创建一个新站点或工作区来执行扫描。让我们看看所有可用于创建站点的选项。类型wmap_sites -h

  1. 现在让我们添加站点。添加站点有两种方式——一种是直接通过 URL 或 IP。这可以使用以下命令完成:
wmap_sites -a 151.101.21.32

以下屏幕截图显示了前面命令的输出:

  1. 第二种方法是使用虚拟主机。当我们必须扫描多个虚拟主机时,这非常有用。要添加虚拟主机,可以使用以下命令:
wmap_sites -a <subdomain> , <IP Address>

以下是前面命令的输出:

  1. 添加站点后,我们可以通过类似的方式添加目标,可以通过 IP/域或虚拟主机(虚拟主机/域)。要通过 IP 添加目标,我们可以使用以下命令:
wmap_targets -t <IP Address>

以下屏幕截图显示了前面命令的输出:

  1. 要通过虚拟主机添加目标,我们使用以下命令:
wmap_targets -t <subdomain > , <IP Address>

以下屏幕截图显示了前面命令的输出:

  1. 要查看 WMAP 将运行的所有模块的列表,我们可以使用wmap_modules -l命令。命令的输出显示在以下屏幕截图中:

以下屏幕截图显示了用于文件/目录测试的模块:

此阶段还包括 WMAP 扫描节点,可以对其进行配置,以便执行分布式 WMAP 扫描。可以使用wmap_nodes命令管理和配置节点。有关这方面的更多信息将在本章的使用 WMAP进行群集扫描一节中讨论。完成最终配置后,下一阶段是启动 WMAP。

启动 WMAP

默认情况下,WMAP 运行目标上的所有模块,但您可以更改模块的执行顺序(这将在下一主题中介绍):

  1. 要运行 WMAP,请执行以下命令:
wmap_run -e

以下屏幕截图显示了前面命令的输出:

执行上述命令后,将开始执行加载的模块。WMAP 中没有暂停或恢复选项,因此您必须等待扫描完成,或者您可以通过按Ctrl+C中断扫描过程。

  1. 要了解更多关于wmap_run命令的信息,您可以执行wmap_run -h命令,查看启动时可以使用的其他可用选项:

您甚至可以使用关键字字符串或正则表达式基于模块启动 WMAP 扫描。在本例中,我们使用了一个字符串来搜索加载模块列表中的任何version 关键字:

我们可以根据需要使用正则表达式。我们现在已经了解了 WMAP 扫描过程的不同阶段。在下一节中,我们将学习 WMAP 中的执行顺序。

WMAP 模块执行顺序

WMAP 以特定顺序运行加载的模块。顺序由一个数值定义。默认情况下,运行 web 扫描的第一个模块是http_version,其中有OrderID=0模块和open_proxy模块以及OrderID=1。这也意味着将首先执行http_version模块,然后运行open_proxy。测试人员可以通过相应地更改OrderID来更改模块执行的默认行为:

  1. 模块执行顺序可根据我们的需要进行更改。我们可以通过执行wmap_modules -l命令获得OrderID

以下屏幕截图显示了前面命令的输出:

  1. OrderID在 Metasploit 模块代码中设置。我们来看看http_version模块的OrderID

WMAP 模块的执行顺序可以使用register_wmap_options()方法进行调整。

  1. 我们用这个方法来改变http_version模块的OrderID

  1. 现在,让我们重新加载模块:

  1. 重新加载完成后,我们使用wmap_modules -l命令列出模块,以查看更新后的模块执行顺序:

从前面的截图中,我们可以看到OrderID现在已经更改。现在,我们已经完成了模块执行顺序,让我们在下一节中向 WMAP 添加一个模块。

向 WMAP 添加模块

WMAP 允许我们添加自己的模块。这可以是 MSF 的模块,也可以完全从头开始制作我们自己的模块。让我们使用 SSL 模块的一个示例。以下屏幕截图显示了 WMAP 目前正在使用的两个模块:

我们还可以添加另一个基于 SSL 的扫描仪模块(除了 MSF 中提供的 SSL 实验室模块):

  1. 我们将使用ssllabs_scan模块,该模块将通过 Qualys 提供的公共 API,使用 Qualys SSL 实验室的在线 SSL 扫描仪执行 SSL 扫描:

  1. 我们现在编辑此模块的源代码,以便添加扫描中可以使用的必要库和方法:

  1. 我们在MetasploitModule类下方添加以下行:
include Msf::Auxiliary::WmapScanSSL

前面提到的 WMAP 库为扫描中包含的 WMAP SSL 扫描程序模块提供了方法。这可以在以下屏幕截图中看到:

仅仅添加库是不够的;仅在添加库的情况下运行模块将导致错误:

原因是这是HOSTNAME数据存储区,它是ssllabs_scan模块选项,WMAP 插件根本无法获取它。插件只定义了以下方法(参见metasploit-framework/lib/msf/core/auxiliary/wmapmodule.rb文件):

在这种情况下,我们需要为 WMAP 找到一种方法来识别ssllabs_scan模块的HOSTNAME数据存储。可能有许多变通方法,但我们将使用此方法,因为它对我们来说很方便:

  1. 我们将要使用的数据存储从datastore['HOSTNAME']更改为datastore['VHOST']

存储来自HOSTNAME数据存储的变量将保存来自VHOST数据存储的数据。同时,WMAP 将通过wmap_target_vhost()方法识别VHOST数据存储:

  1. 现在,我们保存代码并返回 Metasploit 控制台,通过键入reload重新加载模块:

我们还使用以下命令重新加载 WMAP 模块:

wmap_modules -r

以下屏幕截图显示了前面命令的输出:

  1. 现在让我们列出模块:

模块已加载!

以下是可在任何模块中使用的混合类型:

| 混合物 | 说明 | | WmapScanSSL | 对 SSL 服务运行一次扫描 | | WmapScanServer | 对 web 服务运行一次扫描 | | WmapScanDir | 对目标中找到的每个目录运行扫描 | | WMAPSCAN 文件 | 对目标中找到的每个文件运行扫描 | | WMAPSCANIQUERY | 对目标的每个请求中找到的每个唯一查询运行扫描 | | WmapScanQuery | 对目标的每个请求中找到的每个查询运行扫描 | | WmapScanGeneric | 扫描完成后要运行的模块(被动分析) |

  1. 更新正在运行的 WMAP 模块:

模块发现的漏洞保存在数据库中,可通过执行wmap_vulns -l命令查看:

在下一节中,我们将介绍 WMAP 的分布式扫描功能。

使用 WMAP 进行群集扫描

WMAP 还可用于对目标进行分布式评估。此功能允许在不同服务器上运行的多个 WMAP 实例在主从模式下协同工作,如下所示:

WMAP 主机接收目标并以作业的形式自动将其分配到从机。作业完成后,向主机报告并将结果存储在主机数据库中:

  1. 让我们添加一个用于扫描的站点:

  1. 使用auxiliary/scanner/http/crawler模块在现场使用爬虫;相应地设置选项:

  1. 运行爬虫以收集表单和页面:

  1. 使用wmap_sites -l命令确认从爬网中找到的页面/表单数量:

  1. 让我们为分布式扫描设置 WMAP 节点。我们将使用msfrpcd -U <user> -P <password>命令在节点上运行msfrpcd。此命令将在后台启动 RPC 服务器,以便 WMAP 与 Metasploit 交互:

  1. 一旦配置好节点,我们将使用wmap_nodes命令来管理和利用这些节点:

  1. 我们将使用以下命令将节点添加到 WMAP:
wmap_nodes -a <IP> <RPC port> <SSL status - true/false> <rpc user> < rpc pass>

以下屏幕截图显示了前面命令的输出:

  1. 节点连接后,我们可以使用wmap_nodes -l命令列出节点:

  1. 一切都安排好了。我们只需要定义扫描仪开始扫描的目标。这可以使用wmap_targets命令完成:

在本例中,我们使用-d开关根据 ID 添加目标。可以使用wmap_sites -l命令检索 ID。当前设置的问题是,在节点上执行的所有模块都将在节点上保存数据。

  1. 如果要保存节点上的数据,需要将节点连接到本地 MSF 数据库。这可以使用以下命令完成:
wmap_nodes -d <local msf db IP> <local msf db port> <msf db user> <msf db pass> <msf db database name>

以下屏幕截图显示了前面命令的输出:

  1. 现在让我们使用wmap_run -e命令运行 WMAP:

WMAP 加载的每个模块将在相应的节点上分发和执行。

WMAP has a limit of 25 jobs per node. This is done to prevent nodes from being over-burdened.

  1. 我们可以通过键入wmap_nodes -l来查看已连接节点的列表,如下所示:

  1. 我们也可以使用 WMAP 只运行一个模块;例如,如果要运行dir_scanner模块,可以使用以下命令:
wmap_run -m dir_scanner

输出如下所示:

以下屏幕截图显示了发现的目录的输出:

  1. 正如我们在前面的屏幕截图中看到的,模块开始列出找到的目录。要在树结构中查看输出,请使用以下命令:
wmap_sites -s 1

以下屏幕截图显示了前面命令的输出:

  1. 要查看分配给节点的当前作业,可以使用以下命令:
wmap_nodes -j

以下屏幕截图显示了前面命令的输出:

  1. 要删除节点,可以使用以下命令:
wmap_nodes -c 1

这将从列表中删除节点 1。

总结

在本章中,我们学习了 WMAP、其体系结构和扫描过程。接下来,我们学习了如何将来自不同工具(如 Burp Suite)的输出导入 Metasploit,并使用 WMAP 模块加载、配置和执行扫描。在本章末尾,我们了解了如何在 WMAP 中使用群集扫描。

在下一章中,我们将介绍 WordPress 的笔测试。

问题

  1. 有多少 WMAP 实例可用于分布式扫描?

  2. WMAP 插件是否支持报告?

  3. 我可以在 Metasploit 中导入要在 WMAP 中使用的其他服务器日志和报告吗?

  4. 我想为我的组织环境进一步定制 WMAP。我该怎么做?

  5. WMAP 支持每个节点多少个作业?

进一步阅读

  • 有关 WMAP web 扫描仪的更多信息,请访问以下链接:

https://www.offensive-security.com/metasploit-unleashed/wmap-web-scanner/