高度安全环境下的高级渗透测试(四)

161 阅读1小时+

高度安全环境下的高级渗透测试(四)

原文:annas-archive.org/md5/37A61AD0202D37F5F9B9CA71821CCC1E

译者:飞龙

协议:CC BY-NC-SA 4.0

第八章:绕过防火墙和避免检测

渗透测试的类型和范围将决定在渗透测试期间需要保持隐秘的需求。避免在测试期间被检测到的原因各种各样;其中一个好处可能包括测试据说保护网络的设备,另一个可能是您的客户想知道信息技术团队对环境中的有针对性攻击做出反应需要多长时间。您不仅需要警惕目标网络上的管理员和其他观察者,还需要了解自动检测方法,例如网络、基于主机的入侵检测系统,以避免触发警报。

提示

当面对最有利的目标时,花时间验证一下,确保它不是一种蜜罐,当检测到异常流量或活动时会触发警报!不要走进一个聪明管理员设置的陷阱。请注意,如果您确实发现了这样的系统,仍然非常重要确保它设置正确,不要因配置错误而无意中允许访问关键内部资产!

在本章中,我们将回顾以下内容:

  • 渗透测试防火墙环境

  • 在 IDS 下滑

  • 在内部设置店铺

  • 审查网络流量

  • 使用标准凭据

  • 清理被入侵的系统

实验室准备

为了跟上本章的示例,需要进行一些实验室准备。

提示

在整本书中,我们一直专注于能够模拟目标网络。这对于学习和实践最新和最伟大的技术至关重要,因为安全研究领域的优秀头脑继续用新的漏洞和可能的攻击向量给我们带来惊喜。本书无法涵盖测试网络的每种可能方法,但构建实验室是为了增加长期价值的尝试,希望能够导致终身的“黑客心态”。如果您继续建立自己的实验室并增加对自己设置的练习挑战的难度,您将很快就能够舒适地测试任何类型的环境。

BackTrack、pfSense 和 Ubuntu 虚拟机应该以以下方式进行配置:

实验室准备

需要进行某些配置更改:

BackTrack 客户机

这台机器需要连接到192.168.75.0/24子网。在 Oracle VM VirtualBox Manager 控制台中,突出显示 BackTrack 实例,然后从顶部导航栏中选择设置选项。确保只启用一个网络适配器。适配器应使用 Vlan1 内部网络选项。

BackTrack 客户机

如前所述,在第三章中,枚举:明智选择目标,我们可以通过在 BackTrack 中输入以下命令将 IP 地址(在本例中为192.168.75.10)分配给以太网适配器(eth0)来进行配置。

# ifconfig eth0 192.168.75.10 netmask 255.255.255.0 broadcast 192.168.75.255 promisc 

由于 pfSense 机器还需要作为我们的路由器,我们需要将其设置为默认网关。可以按照以下步骤完成:

# route add default gw 192.168.75.1 

Ubuntu 客户机

Ubuntu 机器将被用作目标。它需要配置为连接到 VLAN2,这是我们以前没有使用过的新内部网络。要创建内部网络,您需要在 Oracle VM VirtualBox Manager 的网络配置屏幕中手动输入 VLAN2。您的设置应该类似于以下内容:

Ubuntu 客户机

pfSense 客户机配置

配置我们的防火墙需要更多的工作。它需要能够将来自 VLAN1 网络的限制流量路由到 VLAN2 子网。我们需要进行几项配置更改,以确保这一点能够正常工作。

注意

pfSense 提供了从配置菜单重置为出厂默认设置的选项。请注意,如果选择此选项,则必须重新配置适配器。这并不困难,但所有先前的设置将丢失。如果担心丢失先前的配置,请务必制作 pfSense 机器的副本/快照。

pfSense 网络设置

我们的防火墙客户机将使用两个网络适配器。一个将用于 VLAN1 段,另一个将用于 VLAN2 段。在本章的示例中,VLAN1 将被视为不受信任的广域网。网络适配器 1 应类似于以下截图:

pfSense network setup

网络适配器 2 应类似于以下内容:

pfSense network setup

WAN IP 配置

剩下的网络设置将需要在客户机内部执行。

  1. 启动您的 pfSense 虚拟实例。当 pfSense 尝试配置 WAN 适配器时可能会有额外的延迟。允许其完全加载,直到您看到以下菜单:WAN IP configuration

  2. WAN 和 LAN 接口将需要正确配置。选择选项2)设置接口 IP 地址

  3. 选择选项 1 — WAN。WAN IP configuration

  4. 在要求通过 DHCP 配置 WAN 接口时,输入* n *以进行否。

  5. WAN 适配器的 IP 应为192.168.75.1

  6. 子网位数应设置为 24。输入24并按EnterWAN IP configuration

  7. Enter返回到配置菜单。

LAN IP 配置

我们也可以从配置菜单中设置 LAN IP 信息。在此配置 LAN 的一个好处是,我们可以同时为 VLAN2 配置 DHCP 服务器。

  1. 从配置菜单中选择选项2以启动 LAN IP 配置模块。

  2. 选择 LAN 接口(选项2)。

  3. 在提示输入 IP 地址时,输入192.168.101.1

  4. 位数应设置为24

  5. 当询问是否要在 LAN 上启用 DHCP 服务器时,选择* y *以进行是。

  6. DHCP 客户端 IP 范围起始为192.168.101.100

  7. DHCP 客户端 IP 范围停止为192.168.101.110

  8. EnterLAN IP configuration

  9. 再次按Enter返回到配置菜单。

您的 LAN 和 WAN IP 范围应与以下匹配:

LAN IP configuration

防火墙配置

pfSense 可以使用直观的 Web 界面进行配置。启动 Ubuntu 机器,打开终端并执行sudo dhclient以从 VLAN2(192.168.101.0/24)上的 pfSense DHCP 服务器获取地址。在 Ubuntu 机器上的 Web 浏览器中输入http://192.168.101.1/以访问配置面板。如果您已将其重置为出厂默认设置,则需要通过向导进行步骤以进入标准控制台。

注意

pfSense 的默认用户名和密码组合是:admin/pfsense

要查看当前的防火墙规则,请选择Firewall | Rules并查看当前配置。默认情况下,WAN 接口应被阻止连接到内部,因为没有预先建立的规则允许任何流量通过。

Firewall configuration

为了测试目的,我们将启用端口 80、443、21,并允许 ICMP。添加以下规则:

  1. 单击前面截图中显示的添加新规则按钮。

  2. 使用以下规则设置来启用 ICMP 通过:

  • 操作:通过

  • 接口:WAN

  • 协议:ICMP

  • 其他所有人:默认

  1. 单击屏幕底部的保存按钮。

  2. 单击屏幕顶部的应用更改按钮。

  3. 使用Interface | WAN导航菜单进入 WAN 接口配置菜单,并取消选中Block private networks。应用更改并返回到Firewall | RulesFirewall configuration

  4. 单击添加新规则按钮。

  5. 使用以下规则设置启用 HTTP 通过。

  • 操作:通过

  • 接口:WAN

  • 协议:TCP

  • 目标端口范围:HTTP

  1. 继续添加端口,直到配置与以下匹配:防火墙配置

在这一点上,连接到 VLAN1 的任何机器都可以通过开放的端口进行通信,以及 ping VLAN2 段上的机器,如下面的屏幕截图所示(运行扫描的系统位于192.168.75.10):

防火墙配置

通过防火墙进行隐秘扫描

在当今时代,最常见的安全机制将是某种防火墙。防火墙是一个很好的安全机制,当与其他安全控制一起使用时;然而,它们必须得到适当的维护和监控才能真正发挥作用。有几种机制可以尝试绕过这些设备。

查找端口

在扫描时知道您被阻止的位置是很重要的。通过防火墙测试时,如果您没有所有的信息,准备一个隐秘的攻击可能会变得困难。记住,诸如 Firewalker 或 Hping 之类的工具可以帮助确定阻塞发生的位置,以及端口是否真的可用或者只是关闭。虽然这可能看起来微不足道,但首先知道是否有防火墙是相当重要的。

使用 Traceroute 查找是否有防火墙

有时我们可以使用 traceroute 来查看到目标系统的路径。让我们看一下从 VLAN2 到 VLAN1 的开放 traceroute:

student@Phobos:~$ traceroute 192.168.75.10 
traceroute to 192.168.75.10 (192.168.75.10), 30 hops max, 60 byte packets
1 pfSense.localdomain (192.168.101.1) 0.248 ms 0.166 ms 0.117 ms
2 192.168.75.10 (192.168.75.10) 1.351 ms 1.243 ms 1.188 ms

查看这个结果,我们可以看到第一跳经过我们的网关192.168.101.1,然后被路由到主机。现在我们将尝试从 BackTrack 机器进行反向操作:

root@bt:~# traceroute 192.168.101.1
traceroute to 192.168.101.1 (192.168.101.1), 30 hops max, 60 byte packets
1 * * *
2 * * *
[Truncated…]
30 * * *

有些东西阻止我们接收路径信息(这是 pfSense 防火墙配置)。这种技术并不总是有用,但绝对值得了解。

查找防火墙是否阻止某些端口

有一个防火墙;接下来呢?下一步是确定防火墙阻止了哪些端口,或者更重要的是哪些是开放的。

Hping

Hping2 和 Hping3 包含在 BackTrack 5 发行版中。可以通过 GUI 导航栏应用程序 | BackTrack | 信息收集 | 网络分析 | 识别活动主机 | Hping2访问。也可以通过简单地输入hping2来在命令行中调用。Hping2 是一个强大的工具,可用于各种安全测试任务。以下语法可用于查找开放端口,同时完全控制您的扫描:

root@bt:/pentest# hping2 -S 192.168.101.100 -c 80 -p ++1 
HPING 192.168.101.100 (eth0 192.168.101.100): S set, 40 headers + 0 data bytes
len=46 ip=192.168.101.100 ttl=63 DF id=0 sport=21 flags=SA seq=20 win=5840 rtt=0.6 ms
len=46 ip=192.168.101.100 ttl=63 DF id=0 sport=80 flags=SA seq=79 win=5840 rtt=0.6 ms
--- 192.168.101.100 hping statistic ---
80 packets tramitted, 2 packets received, 98% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms

这个命令允许我们执行一个从端口 1 开始递增 80 步的SYN扫描。

注意

CTRL + Z用于手动递增端口。从低端口开始手动递增。开始一个 Hping2 扫描,试一试!

根据防火墙配置,可能也可以发送伪造的数据包。在测试中,有利于确保配置不允许发生这种行为。Hping 非常适合这项任务。以下是一个示例,您可以测试防火墙是否允许这个流量通过:

hping2 -c10 -S --spoof 192.168.101.101 -p 80 192.168.101.100 

这个命令将伪装 10 个数据包从192.168.101.101192.168.101.100的 80 端口。这是一个空闲扫描的基础,如果成功的话,将允许您对192.168.101.101机器进行hping,以查找 IP 序列号的增加。在这种情况下,我们可以在 pfSense 机器上启用监视,模拟这个流量对于审查日志的网络管理员来说是什么样子。

挑战自己创建和监视不同的数据包和 Hping 的用法,以便您可以对流量流向有很好的理解。在测试时保持不被发现的最佳方法是充分了解正在使用的技术。

查看成功扫描生成的日志,并牢记由于涉及的流量量即使是安全的网络有时也只会记录和触发基于拒绝流量的事件。

注意

需要在防火墙上启用每条规则的日志记录,以查看允许的流量。不记录允许的流量是相当标准的做法,因为它可以减少防火墙日志的大小。教育您的客户,积极监视允许的流量在试图真正保护网络时也可能是有益的。

Hping

hping2的细粒度控制与hping3的脚本功能相结合,使 Hping 工具成为每个渗透测试人员工具箱中不可或缺的一部分。

有关如何有效使用 Hping2 和 Hping3 的更多信息和教程可以在 Hping wiki 上找到:wiki.hping.org/

Nmap firewalk 脚本

测试防火墙上开放端口的最简单方法之一是简单地使用 Nmap 的 firewalking 脚本。要测试开放的防火墙端口,您需要一个位于防火墙后面的主机作为目标:

nmap --script=firewalk --traceroute 192.168.101.100 

命令序列是简单而熟悉的:我们调用nmap,使用脚本选项,并选择 firewalk 脚本。然后,我们通过对192.168.101.100执行 traceroute 来提供 firewalk 所需的输入,我们知道这个地址在我们的目标防火墙后面。

Nmap firewalk 脚本

尽管我们能够确定防火墙上开放的端口(21、80 和 443),但如果您查看防火墙拒绝的情况,很快就会发现这不是一个安静的测试,只有在不需要隐秘时才应使用。归根结底,隐秘需要耐心和一个精心制定的行动计划。手动验证防火墙上是否有任何常见的端口打开,然后尝试使用其中一个众所周知的端口进行扫描可能更容易。

注意

要有效地模拟使用 Hping 进行适当的 firewalking 或端口探测,网络需要在防火墙后面有一个网关。在复制生产环境时,这可以在实验室中完成,但超出了本章的范围。命令保持不变;获得的信息可能会大幅增加。这些工具使用 TTL 来确定端口是否打开,由于我们的网关与我们的防火墙和路由器在同一台机器上,结果是多样化和模糊的。

Nmap firewalk 脚本

总的来说,空闲扫描仍然是确定一个经过适当锁定的防火墙后面是什么的最佳方法。当下最流行的是SYN Cache Idle扫描,关于这个主题的一篇很棒的论文,题为《Idle Port Scanning and Non-interference Analysis of Network Protocol Stacks Using Model Checking》,作者是 Roya Ensafi、Jong Chun Park、Deepak Kapur 和 Jedidiah R. Crandall,来自新墨西哥大学,可以在以下网址找到:www.usenix.org/events/sec10/tech/

现在你看到我,现在你看不到我 —— 避开 IDS

在安全环境中,您可以指望遇到 IDS 和 IPS。正确配置并作为真正深度防御模型的一部分使用会极大地增加它们的有效性。这意味着 IDS 将需要得到适当的更新、监视,并在适当的位置使用。渗透测试人员将被期望验证 IDS 是否与所有其他安全控制一起正常工作,以正确保护环境。

绕过任何 IDS 的主要方法是避免创建用于查找特定模式的签名。这些签名必须经过精细调整,只能找到明显恶意行为,不应该过于限制,以至于触发正常流量模式的警报。多年来,这些签名的成熟度显著提高,但渗透测试人员或知识渊博的攻击者将能够使用各种手段来绕过甚至是最精心制作的签名。在本节中,我们将回顾一些攻击者在野外使用的方法。

规范化

规范化是指用各种输入替换文件或路径的规范名称。这种做法可以简单到用十六进制表示 ASCII 文本值进行替换。以下是一个等效字符串的示例:

  • 十六进制中的字符串 A: "54:68:69:73:20:69:73:20:61:20:73:74:72:69:6e:67"

  • 文本中的字符串 A: "This is a string"

  • ASCII 中的字符串 A: "084 104 105 115 032 105 115 032 097 032 115 116 114 105 110 103"

利用事实,有时一个 URL 可能有成千上万种组合。为了更好地理解这一点,让我们看看我们可以使用的地址,从浏览器到本地 Ubuntu Apache 服务器:

http://2130706433/ 

幸运的是,这个地址让我们的 Apache 服务器困惑了,我们收到了以下消息:

规范化

之前的请求尝试加载本地页面127.0.0.1。让我们看看当我们尝试以相同的方式加载远程 pfSense 管理控制台时会发生什么:

http://3232254721/ 

在这里,我们收到了托管 pfSense 管理控制台的 Web 服务器的警告,称可能发生了 DNS Rebind 攻击:

规范化

让我们尝试一些真正有效的东西:

在控制台中,ping我们上面列出的地址之一:

PING 3232254721 (192.168.75.1) 56(84) bytes of data. 

64 bytes from 192.168.75.1: icmp_seq=1 ttl=64 time=9.34 ms
64 bytes from 192.168.75.1: icmp_seq=2 ttl=64 time=0.265 ms
64 bytes from 192.168.75.1: icmp_seq=3 ttl=64 time=0.292 ms

正如我们所看到的,IP 地址得到了正确解析,我们也按预期收到了回复。当试图绕过 IDS 规则时,这个概念非常关键。如果能够确定 IDS 的类型,那么应该可以获取到签名。在审查这些签名时,你需要寻找模糊化 URL、文件名或其他路径信息的机会,以便能够绕过现有的规则集。

注意

尝试在常见的网站上尝试这个。许多 Web 服务器将正确解释这些 URL 并提供页面。当与社会工程活动结合使用时,这可能会很有趣。在欺诈电子邮件中模糊 URL 将导致未经适当培训的用户点击更多。

时机是关键

在之前的章节中,我们已经了解到在受保护环境中进行网络扫描时,时机可能至关重要。使用 Nmap,我们可以调整在给定时间内发送的数据包数量。IDS 签名寻找模式,向许多机器发送数据包是一个明显的模式。

在尝试绕过这些机制时,了解设备背后的逻辑和工作原理非常重要。如果你的流量与网络上通常看到的不符,那么很可能会在获得大量信息的机会之前被阻止。这可能会导致最好的情况下感到沮丧,最坏的情况下导致评估失败。花点时间规划成功测试所需的阶段。最好是慢慢开始,确定安装了哪种类型的安全机制,而不是匆忙行事,打开世界上所有可能的端口,然后让你的测试 IP 范围自动被禁止。

Nmap 和许多其他工具都具有精细度和能力来限制扫描的时间。甚至可能建议开始手动控制特定端口的网络枚举,而不是从自动扫描开始。

融入其中

内部发动攻击既令人满意又有回报。您将不再受限于网络的受保护外壳,可以自由穿越。要小心使用的工具不要暴露您。

提示

通过了解管理员在特定条件下会看到什么,渗透测试人员更有可能进行深思熟虑的工作,符合测试的最终目标,如在规则约定合同中所述。

在这里,我们从 BackTrack 机器到 Kioptrix 1 级机器建立了连接。看看防火墙记录的奇怪流量:

融入

现在,如果我们快速登录系统并设置或提升用户帐户的特权,以允许我们进行 SSH 连接,我们可以与网络上现有的流量合并。让我们看看当我们在 SSH 会话中运行tree命令时的区别:

bash-2.05# tree | head 
.
|-- X11R6
| |-- bin
| | |-- fslsfonts
| | |-- fstobdf
| | |-- mkfontdir
| | |-- xfs
| | `-- xfsinfo
| |-- include
| |-- lib |
[Output Truncated…]
| |-- i686
| | `-- noarch
| |-- SOURCES
| |-- SPECS
| `-- SRPMS
`-- tmp -> ../var/tmp
2093 directories, 33808 files
bash-2.05#

虽然这个命令正在传回 Linux 框的整个目录结构,但我们在防火墙日志中看到以下内容:

融入

请注意,没有 SSH 流量的条目。与先前的端口 139 流量相比,它很少。通过适当的脚本编写,可以在 SSH 连接中模拟通过后期利用模块完成的工作,而且这种流量是完全加密的,很可能被测试网络中的各种管理员使用。

查看流量模式

网络嗅探可以节省大量时间。使用远程 Windows 机器为您执行此任务更加困难,因为网络卡需要处于混杂模式,但这是可以做到的。理想情况下,您会找到一个可以轻松成为监听站的 Unix 或 Linux 主机。

在这里,我们看到了192.168.101.0/24子网上的一个受损的 Linux 主机。我们的攻击机器位于192.168.75.0/24,无法看到 Linux 机器所看到的相同流量。我们将使用tcpdump,这在许多 Linux 发行版中都是可用的:

tcpdump -i eth0 -c 100 -n 

在这里,我们在远程 Kioptrix 机器上调用tcpdump,使用我们在后期利用章节中设置的 games 帐户进行 SSH 连接。我们使用-i选项指定我们想要使用eth0作为我们的监听适配器。然后告诉适配器只捕获接下来的100个数据包。使用-n开关来避免 DNS 查找,并显示 IP 地址而不是主机名。此命令的输出将为我们提供与我们的 SSH 连接相关的未经过滤的数据包信息。

更有趣的是看看在该段上还有什么其他东西。例如,使用简单的icmp过滤器,我们可以看到以下内容:

查看流量模式

通过查看前面的屏幕截图,我们可以确定该子网上还有其他单元。使用tcpdump的好处在于,我们不会干扰流量,只是在流量通过时筛选信息。

清理受损主机

在处理小型网络时,很容易低估清理受损主机所需的时间和精力。这项任务对于避免被发现以及在测试完成后保持网络处于完美状态至关重要。任何人都不希望忽视一个安装了 meterpreter 后门并等待下一个人利用的受损主机!关键是要做详细的笔记,并准确记录测试期间所做的事情,以及测试后可能会持续存在的事情。

想想我们在后期利用章节中所做的事情;你认为我们启用了游戏帐户用于 SSH 登录,并且具有 root 特权和一个弱密码,这有多容易被忘记!似乎唯一更糟糕的是意外向客户发送错误的报告并泄露某人的机密信息。也许人们似乎永远不会做这两件事,但如果没有使用适当的规划和组织,这两件事都有一定的可能性。当处理一个、两个或甚至五个机器时,回头清理可能不是一个大问题或担心。但是,当您在 40 个不同子网上有 1000 台机器时会发生什么呢?

使用清单

如果您没有为完整的利用和后期利用过程编写脚本,请确保您为必须撤消的所有操作保持清单。这超出了为最终报告创建笔记和记录命令。我们正在谈论将用于确保没有留下任何机会和所有更改都正确撤消的指南,例如将临时文件添加到可写入世界目录中,以便您可以测试您的盲 SQL 注入。如果您无法自行删除文件,请准备好一些内容,以提醒管理员为您删除文件。渗透测试人员的工作是协助验证环境的安全性,而不是使其更容易受到攻击。

何时清理

现在开始清理过程永远不会太早。这不仅有助于保持不被发现,而且还确保在整个渗透测试过程中使用系统化的方法。

不需要在同一子网中打开 300 个外壳。选择一个允许您建立适当枢轴的目标,然后从列表中删除其他外壳。您需要额外的时间来报告和验证结果!

本地日志文件

了解日志文件存储位置、它们捕获的内容以及它们如何将数据报告给管理员至关重要。花时间了解至少最常用的操作系统(如流行的 Linux 发行版和 Windows 服务器)的各种日志文件。如果尝试避免被发现,简单地擦除日志可能不会帮助实现期望的结果。这就像拿走别人的冰淇淋蛋筒,吃掉冰淇淋,然后把蛋筒放回冰箱。总会有人注意到。相反,使用允许您编辑日志文件部分或提升特权到未受监视的帐户的技术。许多需要枚举内部网络的任务不需要管理员特权;也许最好使用受限帐户进行这些活动,希望只有管理员操作被记录和监视?

实际审查日志的管理员不会寻找标准流量。他们将寻找异常。为了避免被发现,您的流量和操作必须能够与普通用户的流量和操作融合在一起。

其他规避技术

可以实现的规避检测的程度因网络而异。在进行测试时,请记住,在当今这个时代,资源通常非常有限,管理员工作繁重且得不到赏识。专注于绕过自动检测方法,您不太可能被积极和热切的管理员发现,除非您的流量和行为模式与普通高级用户的大不相同。当嗅探流量并查看网络连接和活动时,您应该能够了解网络上被视为正常流量的内容。

分而治之

在执行扫描时,最好使用多个来源发起扫描。在大型网络中,一旦有几个人点击了您的社会工程活动页面上的链接,这更有可能实现。一旦您控制了几台机器,就不建议从单台机器进行扫描。使用工具将扫描分成块,并减少扫描时间。利用空闲扫描,特别是在有网络打印机可用时。

躲藏(在受控单位上)

如果您控制的任何系统开始被清理、重新映像或以其他方式进行修复,而实际的渗透测试尚未完成,请减慢速度,或者至少停止所有激进的测试,直到确定是谁或什么在控制修复系统。可能涉及第三方,如果是这种情况,那么确保您的流量和努力不会与第三方的流量和努力混淆,特别是如果该人或团体最终被证明是恶意的,并试图确保他们不会失去对“他们”拥有的系统的控制权。在一个完美的世界中,这不会是这种情况,而是一个非常好的安全和管理团队正在处理业务,并在出现威胁时予以消除。

文件完整性监控

我们在本书中没有经常讨论的一项安全措施是使用文件完整性监控。正确使用此控件对攻击者和渗透测试人员都可能具有毁灭性的影响。管理员可以非常简单地使用这些工具,让他们知道关键文件或目录何时发生了更改。当遇到那些等待被完全掠夺的开放系统时,请记住这一点。一次不当的更改,管理员甚至可能安全组都会加速并开始寻找网络上最小的异常。这将确保您的工作变得更加困难。

通常可以通过坚持使用非侵入性的后渗透和枚举手段来避免 FIM。一些目录和文件,特别是处理数据库或临时文件的文件,由于误报率高,不会被扫描更改。确保您修改或放置的任何文件都在这些目录中,并避免尝试更改关键系统文件。 (日志文件可能包括在内!)再次思考像管理员一样,并避免任何可能轻易被脚本警报的行动。

利用常见的网络管理工具来执行任务

最后但并非最不重要的:利用手头的工具进行枚举和进一步的渗透。如果目标系统安装了编译器,可以使用它来编译自己的网络扫描器,而不是从机器上访问某个随机网站并下载一个。特别是 Windows 系统具有广泛的 Net 命令和 shell 命令,使许多枚举和掠夺任务变得轻而易举。在执行测试时充分利用这些工具,您可能不会被管理员检测到。

总结

在本章中,我们学习了如何在 pfSense 中设置防火墙规则并监控我们的流量,以便了解哪种类型的活动是合法的,哪种类型不是。我们还讨论了入侵检测系统的工作原理,以及我们如何利用这些知识来避免在执行扫描、启动社会工程活动或简单评估 Web 应用程序时被检测到。

我们讨论了流量模式以及如何尝试匹配流量将有助于避免检测;毕竟,如果所有信息看起来都一样,那么任何人都无法确定什么是合法的,什么是不合法的。

还讨论了各种策略,说明了如果以战略和深思熟虑的方式进行测试,可能会避免检测。最后,还触及了有效和高效地避免检测所需的心态。

在下一章中,我们将看看数据收集工具和报告。这是渗透测试的重要方面,因此不应忽视。我们将研究生成最终报告,以及提供有效使用诸如 vim、nano、NoteCase 和 Dradis 等工具来跟踪测试工作的快速概述。

第九章:数据收集工具和报告

尽管可能看起来很痛苦,但渗透测试的每一步都必须得到适当的记录。这不仅可以确保准确和可重复的结果,还可以让其他人检查工作,并确保在测试过程中没有遗漏任何内容。随着渗透测试变得越来越普遍,测试团队也变得更加分段和专业化。团队中可能有一个人专门负责应用程序渗透测试,另一个人可能是后期利用的天才。从一个角色到另一个角色,需要适当的文档记录和报告。

幸运的是,社区中有可用的工具,可以减少记录每个渗透测试步骤、命令和结果的整体痛苦。正确使用这些工具,文档记录将变得自然而然。

本章介绍了可以使测试进展记录变得不那么痛苦,报告撰写变得更容易的工具和技术的使用:

  • 简单的文本编辑器

  • 重新审视 Dradis — 合作的时候到了

  • 报告概述

在开始有趣的事情之前,我们需要复习基础知识。这些方法经过验证,很少出错。除了效率之外,这些方法都是有效的。

立即记录 — 以后整理

本书讨论的几乎所有内容都可以通过 BackTrack 命令行实现。现在,只需记录每个输入和输出会不会很好?显然,这不会是渗透测试记录保存的巅峰,但拥有这样的日志最终可能会为您节省麻烦。

# script pentest.log 

Linux 脚本命令将记录测试过程中使用的大部分命令。

老派 — 文本编辑器方法

就像网站创建爱好者一样,有一群人只使用纯文本编辑器作为数据存储库和报告生成工具。不过,不要让这种工具表面上缺乏功能的外表愚弄您。在今年的 DerbyCon 上,我有幸与一位个人交谈,他提到他已经用 vi 自动化了数据收集的每一步。通过使用自动化和脚本,来自各种工具的输出可以被处理、转换并收集到 vi 文本文件中。然后,通过宏和脚本,他能够生成完整的报告。这个初始设置可能很复杂,但最终产品的简单优雅令人印象深刻。

流行的 Linux 文本编辑器包括vim,需要一些练习,以及 Nano,它提供了一种方便的编辑和收集简单文件数据的方法。

Nano

Nano 已经在本书中用于各种文本编辑需求。它快速简单,非常适合快速记录笔记或快速编辑文档。

注意

不要被 Nano 的表面简单所迷惑(Nano 是另一个文本编辑器)。Nano 执行强大的用户功能,如测试调整,语法高亮,强大的文本搜索等。

要从 BackTrack 启动 Nano,请键入nano,然后输入需要编辑或创建的文件名。Nano 将在当前工作目录中创建文件。

# nano test.txt 

Nano

通过命令行选项或编辑/etc/nanorc配置文件,可以对 Nano 进行非常自定义化。使用nanorc可以设置的一些选项包括以下内容,等等:

  • 区分大小写的搜索

  • 文本文件转换选项 — 您想转换 Dos 或 Mac 文本文件吗?

  • 编辑器是否应该换行您的文本?

  • 自动缩进选项

如果决定在测试过程中利用 Nano,请务必查看设置,并找到最适合您的工作流程和偏好的配置。

有关 Nano 的更多信息,请访问:tuxradar.com/content/text-editing-nano-made-easy

VIM — 强大用户的文本编辑器选择

VIM 是 vi 的改进版本,可作为慈善软件使用。

注意

如果您发现想要使用 VIM,建议您向 ICCF 捐赠。当通过vim命令启动编辑器时,将显示此信息。

VIM-首选的高级文本编辑器

有一些基本命令是任何使用 VIM 的人都应该熟悉的。为了帮助那些完全不熟悉 VIM 的人,该工具提供了一个教程,可以通过在命令行输入vimtutor来访问。

# vimtutor 

VIM-首选的高级文本编辑器

使用 VIM 收集测试数据的一些好处包括:

  • 预装在许多 Linux 发行版中。

  • 资源占用非常小,这在系统运行密集进程时非常有益。

  • 使用diff函数比较多个文件。在您三个月前执行测试并希望快速查找差异的时候非常完美。也可用于确保网站代码在测试之间未被修改。例如,比较test1.txttest2.txt

# vim test1.txt test2.txt 

VIM-首选的高级文本编辑器

  • 可以使用二进制模式查看甚至编辑二进制文件。

  • 可以以只读模式打开文件,以避免意外更改文件。

  • 通过使用-X开关进行即时文件加密。如果使用最新版本的 VIM(7.3+),可以将加密设置为使用 Blowfish 作为加密类型。要加密名为test.txt的文件,请开始一个文件:

# vim -x test.txt 

您将被提示输入加密密钥。将来解密文件时将需要此密钥。

Enter Encryption Key: ThisIsATest
Enter Same Key again: ThisIsATest

输入一些测试内容到文件中:

VIM-首选的高级文本编辑器

当保存并重新打开而没有正确的加密密钥时,文件中的信息是无法解读的。

# Vim -x test.txt 

VIM-首选的高级文本编辑器

对测试期间收集的数据进行加密既有益又受到鼓励;但是,重要的是要注意,VIM 使用的对称加密类型并不适合共享文件。在这种情况下,可能更适合专注于非对称加密方法的单独解决方案。

NoteCase

如果您更喜欢使用图形编辑器来收集和管理测试信息,那么有许多可用选项。其中一个工具是 NoteCase,可以用于在使用 BackTrack 时收集项目或测试数据。可以通过apt-get install notecase在 BackTrack 客户机中安装它。以下是 NoteCase 如何用于收集有关正在测试的站点的信息的示例:

NoteCase

Notecase 允许选择文件 | 另存为并选择适当的下拉选择,以加密格式保存文件:

NoteCase

Dradis 协作框架

在进行渗透测试期间进行协作和数据共享时,很难超越 Dradis 提供的好处和选项。这是我们在第一章中讨论的两种主要数据收集工具之一,规划和范围确定成功的渗透测试,通常是数据收集的首选工具。与往常一样,我们需要在开始之前有一些可用的数据。在本例中,我们假设一家小企业要求我们对其仍处于开发阶段且尚未在互联网上提供的 Web 服务器进行渗透测试。根据约定,我们不允许访问除了这一个特定服务器之外的任何内容,该服务器可以在192.168.75.0/24子网上本地访问。我们被允许访问192.168.75.0/24网络的 VPN,并且可以同时进行两个连接。测试的时间有限,因此我们打算使用两个人来进行测试。

为了跟随本示例,您需要以下虚拟环境处于运行状态:

  • 192.168.75.0/24子网(VLAN1)上的两台 BackTrack 客户机。

  • pfSense 配置为通过 DHCP 为192.168.75.0/24子网(VLAN1)分配地址。

  • Kioptrix Level 1 设置为连接到 VLAN1。

这个设置应该让您能够有效地跟随本章的其余部分。报告是一个非常灵活的领域,因此需要一些时间来找到您想要用于测试的“正确”模板和格式。

绑定到 127.0.0.1 以外的可用接口

需要对启动 Dradis 进行轻微修改,同时绑定到不同的端口。

# cd /pentest/misc/Dradis

# nano start.sh

更改第 15 行以匹配以下内容:

bundle exec rails server webrick $*

保存文件,并使用-h功能调用start.sh命令以显示可用选项:

# ./start.sh -h 

绑定到 127.0.0.1 以外的可用接口

此时,我们可以通过输入以下内容绑定到192.168.75.11的 3004 端口(使用托管 Dradis 服务器的 BackTrack 机器的 IP 地址):

# ./start.sh -b 192.168.75.11 -p 3004 
=> Booting WEBrick
=> Rails 3.0.6 application starting in production on http://192.168.75.11:3004
=> Call with -d to detach
=> Ctrl-C to shutdown server

通过启动浏览器并在本地主机和其他 BackTrack 机器上键入https://192.168.75.11:3004来测试您的配置。请注意,在下面的屏幕截图中,我们能够确定192.168.75.11上的 Dradis 服务器可以被两台机器访问。

绑定到 127.0.0.1 以外的可用接口

任一系统所做的更改都将更新,以便两个用户都能看到。当进行更改时,其他已登录用户会收到通知:

绑定到 127.0.0.1 以外的可用接口

当出现此提示时,只需单击节点列顶部的刷新树图标旁边的添加分支:

绑定到 127.0.0.1 以外的可用接口

有效地使用 Dradis 等工具将使您的团队在执行测试时更加高效和彻底。

报告

在渗透测试结束时,所有数据都需要转化为信息,以便业务和网络所有者采取行动。尽管渗透测试的目标可能各不相同,但将整个过程记录下来并将结果放入易于理解的格式中的需求是一样的。执行报告中应包括以下一些内容:

  • 封面

  • 您公司的标志

  • 测试执行的标题和描述

  • 保密提醒

  • 测试日期和时间

封面应该既专业又吸引人眼球。如果您的标志有任何可用的图形,这是展示它们的理想地方。看看这个样本,了解典型报告封面的基本概念:

报告

接下来的页面应提供报告中包含的材料的索引。添加索引可以让读者快速跳转到感兴趣的位置。当人们参加会议或需要快速了解报告内容时,这一点尤为重要:

报告

接下来的页面应该是执行摘要,可用于快速查看发现。执行摘要可能会根据目标受众而有所不同。在我们的示例中,我们假设我们不知道报告将被呈现给谁,因此尝试涵盖所有方面——技术和非技术管理人员。

报告的这部分应该为未参与初始测试过程的人提供足够的信息,以了解测试内容和测试目标。它还应该快速概述发现的内容,以及是否发现了需要立即注意的特定内容。

看看以下示例:

报告

正如讨论的那样,我们设法在一页内涵盖了几个主要领域。信息应该简洁明了,尽量避免技术术语,因为报告最终可能会提供给管理团队的非技术成员。

提示

必须有人付钱来修复你发现的所有漏洞,但如果他们不理解你的报告,他们不太可能这样做。

在不到一页的篇幅中应该包括的主要部分包括标题和简要描述、范围或介绍以及测试发生的时间表。许多人不明白,进行渗透测试的人和团队的其他部分一样,也受到资源的限制。如果破解一个密码需要两天,但你只有一天来进行测试,这并不一定意味着密码是安全的,只是你没有足够的时间来正确执行你的测试。

在执行摘要中,发现部分非常重要。大多数管理团队可能永远不会阅读所有必须采取的步骤,他们只想知道这些漏洞是什么,每种类型的优先级是什么,这样他们就可以开始制定补救策略和计划。

看看我们报告的下一页:

报告

我们不仅清晰地定义和总结了发现,还提供了一个漂亮的图表来帮助可视化发现。通过为客户分解漏洞,你让他们的生活更轻松,也许可以避免将来再次访问,只是为了再次讨论你的发现。

从你的角度提供一个清晰定义的网络图很重要。这使客户能够理解所有适当的系统都经过了测试,并且在某些情况下暴露了客户甚至没有意识到的问题,比如网络上不一定属于的系统。理想情况下,你会有一个列出网络上所有可用服务的列表。在下面的示例中,我们只列出了端口和描述,因为我们知道只涉及一个系统。另一种方法是列出所有服务,如下所示:

端口描述系统
80HTTP192.168.75.1, 192.168.75.2, 192.168.75.15

如果系统上存在不应该存在的服务,这样的列表就可以变得可操作。例如:一个开发服务器仍在运行一个据说几年前就关闭的 Web 服务器。

看看下面的示例页面,其中包括基本的网络图和一个虚构的端口列表,这些端口在192.168.75.15上是开放的。

报告

最后,是时候提供一些详细的报告了。这是你详细列出发现并提供有关如何发现这些问题的信息的机会。通常在详细报告部分可以放置的数据量是没有限制的。一定要提供足够的信息,以便管理员可以尝试模拟测试的特定部分,以确保已经实施的缓解控制是否真正起作用。

在文档的某个地方,应该讨论使用的方法论,无论是标准方法论的子集,还是你自己想出的东西——理解你所做的事情很重要。这就是有备忘录非常方便的地方。

这是这一部分可能看起来像的一个小例子:

报告

如果你仔细看,你会注意到有一个补救部分。所有需要补救问题的信息已经在报告中,但有时将与特定漏洞相关的脆弱系统列出来是很有用的。这样可以让企业以逻辑方式快速简单地解决漏洞。例如,管理员可以负责更新网络上的所有 SAMBA 版本,并且在报告的补救部分,他们可以直接开始处理列表上的工作。

任何与提供可操作数据无直接关系的附加信息都应该添加到附录中。这包括任何大型数据转储,如目录列表、URL、安装的软件和版本等。

读者的挑战

使用之前提供的实验室设置,对 Kioptrix Level 1 机器进行完全记录的测试!

在完成报告后,退一步,想象自己是一个收到这份报告的企业所有者。你的工作是否允许补救发现的任何问题?你是否提供了足够的交叉参考材料,以便文件在初始咨询完成后能够自行立足?

再次查看第一章,“规划和范围确定成功的渗透测试”,看看是否可以设置一个 HTML 模板,使你能够轻松地将详细数据导入最终报告。一旦像这样的东西被自动化,它就有潜力节省大量时间!

总结

在本章中,我们研究了在进行测试时安全地收集数据的几种方法,如 VIM、Nano 和 NoteCase。我们还在现有的 Dradis 知识基础上进行了扩展,配置它以供多个测试人员同时使用。

我们审查了应该包括在任何渗透测试报告中的几个关键项目。有时,你的公司所接收到的唯一可见性将基于这份报告。报告越好,你下次被要求进行渗透测试的可能性就越大。

最后,我们向读者提出了一个小挑战,要求完成并记录对本章中所审查的配置进行评估。

在下一章中,当我们继续建立一个模拟安全的虚构公司的测试实验室时,我们将有机会将所有这些信息付诸实践。

第十章:设置虚拟测试实验室环境

保持技能更新在大多数行业中都非常重要;对于渗透测试也是如此。渗透测试技能需要时间来发展,而且信息安全领域每天都在变化。考虑到这一点,在当今这个时代,获得一台配备 4-16GB RAM 和四核或六核处理器的半强大计算机系统并不困难。这样的设备可以让渗透测试人员构建出完整的虚拟网络,用作实践实验室。在本章中,我们将审查构建这样的环境。我们将尝试使用有限的系统资源来模拟我们可能在使用中看到的受保护网络类型。

我们将在本章讨论以下内容:

  • 模拟带有防火墙的简单网络

  • 设置多层 DMZ

  • 在虚拟环境中模拟更复杂的网络

为什么要设置实验室?

看起来,在更全面的测试环境中进行实验将始终是最佳选择,但实际上,您可能只会增加不必要的复杂性,这可能会转移或完全破坏测试。

让我们来看看如何设置一个运行简单 Web 应用程序的 Web 服务器。在选择实验室环境之前,我们需要确定我们要测试什么。应该问的一些问题包括:

  • 有没有特定的服务是必需的,以确保测试准确地模拟真实世界测试中所见的环境?

  • 负载均衡?

  • 特定版本的软件?

  • 防火墙?

  • 有没有因素会导致结果不准确地代表真实生产环境中发生的情况?

  • 您的实验室是否为您提供了在真实世界中复制您的发现所需的实践经验;如果没有,需要做出哪些改变?

希望这个基本问题的快速列表能为您准备好在选择哪种类型的实验室更可取以及为哪项任务考虑时应考虑的因素。有许多情景可以通过简单的虚拟客户机进行测试;另一方面,有些情景将需要使用数十甚至数百台系统来准确代表您在真实环境中的体验。无论您选择如何构建您的实验室,它都应该始终允许您进行修改或构建现有系统。它还应该简单易管理,并根据需要进行更新。

注意

对新构建的系统进行快照可能是确保必要的操作系统构建在需要时准备就绪的一种有效和高效的方法。

保持简单

有时可以建立一个满足测试要求的简单实验室。在学习环境中,保持简单通常会减少学习曲线,并使相关材料能够快速吸收,而不是被琐碎的事实或不相关的配置设置所淹没。在本书中,每个部分都试图使用最少的系统设置来审查手头的任务。在构建实验室时,不应轻率选择这种选项。

直截了当的测试示例

许多新的漏洞和漏洞的例子可以通过简单的配置进行测试,例如:

直截了当的测试示例

这个网络就是最简单的(除了直接从目标机器本身进行测试,这对于许多情况来说肯定是有用的)。

我们有一台 BackTrack 机器连接到与易受攻击目标机器相同的 LAN 段。没有内联防火墙或其他任何东西会妨碍验证利用代码是否按预期工作。如果在测试某些方法或技术时遇到问题,这将是一个很好的健全检查。

我们不会介绍设置这种类型的环境,因为它已经在整本书中多次涵盖过。

网络分割和防火墙

内联防火墙和适当的网络分割使得以下基本网络基础设施与网关或防火墙分隔测试机器与易受攻击目标成为常见现象。这种分层防御只是保护典型环境的一小步:

网络分割和防火墙

从外部世界来看,系统将拥有一个公共可访问的 IP 地址,然后在后端它将拥有一个真实的 IP 地址(可能使用 NAT 不可路由的地址)。来回传输的任何流量都将通过网关或防火墙进行处理。让我们看看如何模拟这样的环境:

要求

要跟随此示例构建,您将需要以下内容:

  • Oracle 的 Virtualbox 最新版本

  • 2 GB RAM

  • M0n0Wall 虚拟客户机

  • BackTrack 虚拟客户机

  • Ubuntu Server 10.04 稳定版与 LAMP(连接到 MyLab2)

这就是开始所需的一切!

设置

我们将从设置M0n0Wall防火墙安装开始。如果您在之前的章节中使用过 pfSense,您会注意到设置非常相似。在这种情况下,我们的 M0n0Wall 实例将有三个适配器:WAN、LAN、OPT1。首先在m0n0.ch/wall/downloads.php下载 M0n0Wall。我们将使用cdrom-1.33.iso版本,尽管任何未来的版本在设置上应该非常相似。由于所需资源有限,M0n0Wall 是一个成熟的小型防火墙,非常适合我们的需求。

在 VirtualBox 中使用以下设置来设置新的客户机:

  • 名称:M0n0Wall_Base_Install

  • 操作系统类型:BSD/FreeBSD

  • 内存:128 MB

  • 虚拟硬盘:启动盘已选中,创建新硬盘已选择

  • 创建新虚拟磁盘:VDI

  • 虚拟磁盘存储详细信息:动态分配

  • 虚拟磁盘文件位置和大小:(放在用于未来实验的文件夹中),大小为 200 MB

这台机器将需要使用 VirtualBox Manager 配置三个网络适配器。

  • 网络适配器 1应配置为使用NAT,这将是我们的 WAN 连接

  • 网络适配器 2需要配置为内部网络名称MyLab1,它将代表我们的 LAN 连接并

  • 网络适配器 3应设置为内部网络名称MyLab2,并将与我们的内部网络(OPT 设备)绑定

提示

使用PCnet-PCI II适配器将减少可能出现问题的机会。此外,建议更改每个适配器的 MAC 地址,以便更容易确定在服务器设置中选择的适配器。例如,如果网络适配器 1 的当前 MAC 地址为 0800270DD321,则将其更改为 0800270DD31A 将提供一个易于记忆的视觉提示:1A 是适配器 1,2B 可以是适配器 2,依此类推。

M0n0Wall将需要安装在新的 VirtualBox 机器上。

  1. 启动M0n0Wall_Base_Install并选择从m0n0.ch/wall/downloads.php下载的安装介质。

  2. 选择7)在硬盘上安装选项:设置

  3. 当被问及要安装在哪个硬盘时,请选择您的硬盘(在本例中是ad0)设置

  4. 在提示时重新启动,并确保系统从硬盘安装而不是 ISO 启动。

现在 M0n0Wall 已经安装好了,我们必须配置接口:

  1. 选择1)接口:分配网络端口并按Enter

  2. 当提示可用接口列表时,继续设置您的 VLAN。按y继续。

  3. 输入第一个适配器的父接口名称。这将显示在您的显示器上的 MAC 地址旁边:设置

  4. 继续为每个适配器创建过程。在这种情况下,我们的lnc0适配器分配给 VLAN 1,lnc1分配给 2,lnc2分配给 VLAN 3。这些 VLAN 可以是 1 到 4094 之间的任何未使用的数字。

  5. 确定 LAN 接口名称时,请选择分配给 MyLab1 的适配器,WAN 适配器应分配给 NAT 适配器,而 MyLab2 适配器应分配为 OPT 设备:设置

  6. 重新启动防火墙以保存您的更改。

防火墙已安装在我们的硬盘上,并且适配器已分配给 VLAN。现在我们需要设置 LAN IP 地址并连接到 Web 界面进行进一步配置。作为可选步骤,可以更改默认密码。为了简单起见,我们将在本练习的其余部分继续使用默认密码。

  1. 选择选项2)设置 LAN IP 地址并按Enter继续。

  2. 在提示时输入您想要您的 LAN 使用的 IP 地址。我们将选择192.168.50.1设置

现在我们可以在 MyLab1 内部网络上启动 BackTrack 实例,并通过首先在适当范围内获取新的 DHCP 地址,然后将我们的 Web 浏览器定向到http://192.168.50.1:来连接防火墙的 Web 界面。

设置

我们需要设置其他接口以执行我们心中的任务,即为192.168.75.0/24子网提供到我们的易受攻击主机的防火墙路由,该主机位于192.168.75.100(将 Ubuntu 机器连接到 MyLab2)。从屏幕左侧的导航菜单中选择OPT1 接口,通过选中适当的复选框启用它。将桥接到选项保留为无,并为此接口输入 IP 地址:192.168.75.1。确保下拉列表中选择24。在进行适用更改后,单击保存按钮。

设置

我们可以在 OPT1 接口上启用 DHCP 服务器。在左侧导航菜单上选择DHCP 服务器,然后在服务:DHCP 服务器下选择OPT1选项卡。选中启用此端口上的 DHCP 服务的复选框,并将范围输入为192.168.75.100192.168.75.150。选择完您的更改后,单击保存按钮继续。

设置

目前还没有为 OPT1 接口设置默认规则。让我们设置一些基本规则,以允许我们在192.168.50.0/24中的系统对192.168.75.0/24中的系统进行 ping。

单击左侧导航栏中的防火墙规则选项,然后选择 OPT1 选项卡。选择看起来像一个加号**(+)**符号在一个圆圈内的图标,将带您到允许配置新规则的屏幕。单击此图标继续。

在这个初始规则中,我们希望允许来自任何地方的 ICMP 数据包到达 OPT1 接口。需要选择以下设置:

  • **操作:**通过

  • **接口:**OPT1

  • **协议:**ICMP

  • ICMP类型:任何

  • 所有其他:默认设置

保存您的设置,并单击应用按钮以加载更改。

现在我们可以从我们的BackTrack 机器到我们的目标机器(在本例中是一个设置为接收 DHCP 地址的 Ubuntu 服务器安装)进行 traceroute。

设置

使用 M0n0Wall 允许我们在非常有限的空间内使用许多强大的选项。当您想要在虚拟实验室环境中放置几个防火墙时,这一点就变得非常重要。

增加复杂性或模拟目标环境

有时模仿客户的网络以进行真实测试之前的离线测试可能会有益。这种做法有时可以让您在进行一些简单的枚举后确定最小阻力路径。

让我们看一下以下网络示例:

增加复杂性或模拟目标环境

查看图表后,我们可以确定至少有四个已知子网、两个防火墙和六台执行各种任务的机器。还有一个位于192.168.25.0/24192.168.50.0/24之间以及 DMZ'd Web1 服务器的 Web 应用防火墙和入侵检测系统。不需要太多讨论就能理解我们正在处理的是什么类型的企业,并让我们假设这个客户自豪地使用开源社区驱动的最新和最优秀的软件。理想情况下,我们将尽量模拟客户环境,以确定是否存在任何安全控制没有正确定位或已知经常配置错误的情况。考虑到这一点,我们将尝试使用以下配置进行模拟:

  • 1 个 M0n0Wall 防火墙

  • 1 个安装和配置了 IDS 和 WAF 模块的 pfSense 防火墙

  • 5 台 Ubuntu 服务器系统

  • 1 台运行 MySQL 的 FreeBSD 系统(例如,虚构的业务所有者透露他希望开始使用 FreeBSD 作为所有服务器的操作系统,因为他们在 FreeBSD 服务器上的良好经验)

这总共是八台虚拟服务器,如果我们在实验室中进行直接系统构建,就需要模拟。再次查看图表后,我们确定如果合并一些服务器,可以使资源更加友好。默认情况下,我们的每个虚拟单元最多可以有四个网络适配器。

注意

本节中有关如何进一步配置每台机器的详细说明。在到达每台机器的部分之前,不要构建这些系统。以下清单将用作所需概述。

考虑到这一点,我们将按以下方式配置我们的虚拟实验室:

  • Firewall1

  • pfSense

  • 256 MB RAM

  • 1 GB HDD

  • IDS

  • WAF

  • DHCP 服务

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • 适配器 2:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 3:192.168.75.0/24 内部网络名称:MyLab3

  • Firewall2

  • M0n0Wall

  • 128 MB RAM

  • 200 MB HDD

  • DHCP 服务

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • Web1

  • Ubuntu 服务器

  • 512 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • WordPress 3.1

  • DB1

  • FreeBSD 8.2

  • MySQL

  • 256 MB RAM

  • 6 GB HDD(如果资源有限,可以减少)

  • 适配器 1:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 2:192.168.75.0/24 内部网络名称:MyLab3

  • App1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • WordPress 3.1

  • Admin1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • 安装了各种管理工具(Wireshark、Nmap 等)

这使我们总共需要 1664 MB 的 RAM 和超过 10 GB 的 HDD。大多数现代系统能够处理这种类型的虚拟网络,但如果您的系统无法处理,请根据需要有策略地减少 RAM 或 HDD 的数量。

注意

请注意,这不包括为您的 BackTrack 机器或主机机器保留的任何 RAM 或 HDD 空间。如果您有 16 GB 的 RAM,请不要将所有 RAM 分配给虚拟机,否则可能会遇到一些问题!

配置防火墙 1

下载并安装一个 pfSense 虚拟机,使用上述确定的设置:

  • Firewall1

  • pfSense 2.0

  • 256 MB RAM

  • 300 MB HDD

  • IDS

  • WAF

  • DHCP 服务

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • 适配器 2:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 3:192.168.75.0/24 内部网络名称:MyLab3

请确保使用与 FreeBSD 兼容的适配器类型,以避免任何问题。我们不会再次审查设置 pfSense 基本适配器配置,因为在之前的章节中已经详细介绍过。一旦基本配置完成,您应该得到类似以下的结果:

配置防火墙 1

一旦 IP 地址配置完成,设置应该如下所示:

配置防火墙 1

使用 BackTrack 虚拟机连接到其中一个网络,并配置以下 pfSense Web 控制台设置:

  • DHCP 服务器:启用 X.X.X.100 X.X.X.150 范围内的所有接口。

  • 创建一个规则,允许从 192.168.25.0/24(WAN)到 192.168.50.0/24(LAN)的 ICMP、80、443、53、161、25、22、23 和 21 TCP/UDP。删除现有的 WAN 规则。

  • 创建一个规则,允许所有来自 192.168.50.0/24(LAN)到 192.168.75.0/24(OPT1)的流量。

  • 允许所有来自 LAN 到 WAN 接口的流量。

这是一个正在进行中的工作示例,用于设置 LAN 的防火墙 1 规则:

配置防火墙 1

在 pfSense 中安装额外软件包

防火墙 1 还列出了 IDS 和 WAF。我们可以使用 pfSense 提供给我们的软件包管理器在系统上安装这些额外的功能。

注意

pfSense 系统需要临时访问互联网才能访问和下载这些软件包。这可以通过 NAT 进行配置。在连接到互联网之前,请确保禁用任何其他测试机器。启用 WAN 接口上的互联网将使使用防火墙 1 的所有系统都能访问互联网!还要注意,在从内部网络切换到 NAT 之前,机器需要关闭。

  1. 点击系统 | 软件包,选择可用软件包选项卡。

  2. 选择带有 mod_security 的代理服务器并安装。在 pfSense 中安装额外软件包

  3. 选择Snort软件包并安装。在 pfSense 中安装额外软件包

提示

花一些时间熟悉一键安装软件包,这些软件包可与 pfSense 一起使用。使用这些软件安装的便利性和出色选择的可用性使得安装这些软件快速高效。

每个安装的软件包都将添加到服务菜单中,以供进一步配置。更新软件包并根据需要进行配置。由于我们不知道这个虚构练习中的客户如何配置 WAF 或 IDS,我们可以假设默认设置正在使用,直到我们执行初始枚举时,我们可以更接近地模拟被攻击的环境。

防火墙 2 的设置和配置

我们需要设置一个 M0n0wall 虚拟实例,如下所示:

  • 防火墙 2

  • M0n0Wall

  • 128 MB RAM

  • 200 MB 硬盘

  • DHCP 服务

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

由于我们已经在本章中讨论了如何设置 M0n0wall,我们将跳过到下一个机器类型。

Web1

从典型的软件仓库下载并安装 Ubuntu Server 10.04。虚拟机需要定义如下:

  • Web1

  • Ubuntu 服务器

  • 主机名:Web1

  • 512 MB RAM

  • 1 GB 硬盘

  • LAMP

  • OpenSSH

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

一旦机器安装、更新和配置完成,我们将需要安装 WordPress。

注意

Ubuntu 网站提供了出色的资源,帮助进行直观的安装。

在 Ubuntu 服务器中安装 WordPress 可能很简单;在codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install上有很好的说明。总结一下,您可以简单地wget包在wordpress.org/latest.tar.gz,解压缩然后将其移动到服务器上的/var/www目录。这将使您能够通过http://192.168.25.100/wordpress访问 WordPress 安装,如果您已经按照之前的说明进行操作。请记住,这个练习的目标是了解如何创建一个模拟,模拟常见配置中所发现的情况。在这种情况下,数据库是抽象的,并存储在 FreeBSD 机器上。这允许更精细地控制谁以及谁对网络上的特定数据有访问权限。这也使得攻击者更难以间接访问机器,并且通常足以防止对机器本身的直接攻击(攻击者将使用 SQL 注入和其他基于 Web 应用程序的缺陷来访问和控制系统,而不是直接针对它)。

DB1

DB1 是一个非常基本的 FreeBSD 8.2 安装,只运行 MySQL 服务器、Telnet 和 SSH 作为服务。在www.freebsd.org/where.html获取 ISO 并使用以下虚拟机设置安装机器。请注意,该机器是多宿主的,可由管理员在192.168.101.0/24段直接管理。在理想的情况下,您还应该将对该机器的直接访问限制为仅限管理员和 Web1 服务器的 MySQL 端口、Telnet 端口和 SSH 端口。

  • DB1

  • FreeBSD 8.2

  • MySQL

  • 256 MB RAM

  • 6 GB 硬盘(如果资源有限,可以减少)

  • 适配器 1:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 2:192.168.75.0/24 内部网络名称:MyLab3

系统设置和配置完成后,应将其用作 Web1 和 App1 实例的 MySQL 数据库服务器,使用WP_productionWP_Test数据库。

App1

这基本上是 Web1 服务器的克隆。在典型的环境中,这台机器可能会有最新和最好的可用更改,这也意味着它可能不像位于 DMZ 中的服务器那样安全。这是进一步入侵网络的绝佳目标,因为许多管理员不会使用强密码,或者这些系统上使用的证书可能不符合野外所见的标准。

  • App1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB 硬盘

  • LAMP

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • WordPress 3.1

只需使用 VirtualBox 的克隆机制创建此机器,重命名适当的项目,并确保重置适配器 MAC 地址。您还需要适当地分配 VirtualBox 中的网络适配器

Admin1

由于这台机器很可能包含许多工具和关键数据,因此您应该确保包括诸如 Nmap、WireShark 等管理员通常使用的一些强大工具。这台机器将用作管理员在网络上执行不同管理任务的管理工具和岛屿。玩得开心,并安装 Ubuntu 服务器和您感到舒适的任何服务或软件。理想情况下,在这一点上,您在真实测试期间进行的枚举工作将为您提供更多关于这个系统的信息,以便您可以更接近地模拟它。网络中的许多系统可能会有规则,允许从这个系统直接访问,而不管网络位置如何。

例如,构建一个符合以下规格的 Ubuntu 服务器:

  • 管理员用户

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB 硬盘

  • LAMP

  • 适配器 1:192.168.101.0/24 内部网络名称:MyLab4

  • 安装了各种管理工具(Wireshark、Nmap 等)

到目前为止,您应该拥有一个功能齐全的多层环境,它在某种程度上模仿了在较小的商店中经常发现的环境。要测试真正安全的网络,您还必须添加额外的模块,并依靠严格监控的日志、文件完整性检查、基于网络的防病毒扫描(在 pfSense 上尝试!)等。无论有多少安全控件,它们都必须共同工作才能完全发挥作用。通过辛勤工作和开箱即用的思维,渗透测试人员将把这些环境推向极限,并确定客户是否得到了充分的保护(或者没有……)。

总结

在本章中,我们回顾了设置各种类型的虚拟实验室。几乎可以使用常见的可用工具和足够的资源来模拟几乎任何类型的虚拟环境。这对于使用开源软件的任何系统尤其如此,因为它是 readily available 并且不需要购买许可证(通常取决于软件是什么)。

我们还了解了 pfSense 的功能以及如何利用它更紧密地模拟在测试高度安全网络时会遇到的环境类型。使用这些技术可以轻松安装和配置 WAF、IDS、IPS,甚至反向代理。

我们还介绍了 M0n0wall 的安装和配置,这对于资源有限且需要小的占地面积时非常合适。一些渗透测试人员已经建立了跨越多台主机和数百个虚拟机的测试实验室。这对大多数人来说可能超出了必要性,但可以以低成本实现这一点的事实仍然存在。

在下一章中,我们将创建一个非常特殊的实验室,旨在模拟真实的渗透测试。您将需要使用本书中讨论的所有方法(可能还有更多,因为没有一本书可以涵盖渗透测试中涉及的所有内容!)来测试虚构公司的始终。

下一章见!

第十一章:接受挑战-把一切都放在一起

在整本书中,我们已经讨论了各种技术和方法,通过实践、持续的研究和勤奋,可以让你从头到尾执行渗透测试。本章让你把其中一些信息付诸实践,并加以理解。

我们将在本章讨论以下内容:

  • 设置实践环境

  • 使用渗透测试技术从一个系统移动到另一个系统

  • 一个虚构公司的例子从头到尾的渗透测试

情景

一个名为 NewAlts Research Labs 的虚构公司决定增加网络存在。由于他们的商业模式的性质,信息保密至关重要,任何敏感研究数据的泄露都会直接对他们的底线产生负面影响。他们的管理员已经建立了一个模拟环境,类似于他们最终想要转移到生产环境的环境。业主已要求管理员聘请外部顾问来审查环境,并告知可能存在的任何漏洞。

然后管理员委托你对模拟环境进行渗透测试,因为他已经确定他正在使用安全最佳实践,并在几个月前执行了初始的漏洞扫描,没有发现问题。他重申他正在使用提供良好支持的知名产品,并且以他的商店 100%开源为傲。

在询问网络时,你发现只有一个面向网络的服务器。这台服务器正在运行最新版本的 WordPress。唯一提到的其他服务是 SSH,他用它来在紧急情况下访问网站。在办公室时,管理员使用管理区域直接访问服务器,但这个区域无法从互联网访问,并且被防火墙隔离。服务器的 IP 地址是192.168.10.25。在询问环境时,管理员让你知道他们使用分段的内部网络、多个防火墙、IDS 和 WAF,并且确信这种分层防御方法足以保护核心数据网络,重要和机密的研究信息最终将被存储在那里。

你需要向管理层提供信心,如果这个设置要上线,他们的数据是受到保护的。你需要模拟一个没有先前网络知识和有限时间来执行攻击的攻击者。管理员提到他打算为服务器使用虚拟镜像,并且它们将在每天晚上关闭并恢复到原始状态。

设置

像往常一样,我们需要设置我们的虚拟实验室来模拟这个环境,因为我们正在执行的渗透测试纯属虚构。然而,不要认为这种努力是徒劳的;许多渗透测试人员将尝试模拟他们客户的网络,以确保他们打算使用的漏洞实际上有效且稳定,更不用说这减少了勤奋的管理员和安全专业人员检测到你的行动的可能性。根据渗透测试的类型,这可能是至关重要的。

NewAlts Research Labs 的虚拟网络

我们将在 VirtualBox 中设置以下环境:

NewAlts Research Labs 的虚拟网络

系统名称:pfsense1

  • 操作系统:pfSense 2.0(FreeBSD)

  • 虚拟磁盘大小:1GB

  • RAM:128

  • 三个网络适配器(内部):

  • WAN = 192.168.10.1(Int10)

  • LAN = 192.168.20.1(DMZ20)

  • OPT1 = 192.168.30.1(DEV30)

  • OPT2 = NAT(这是一个可选步骤,它允许您轻松下载和安装必要的软件包。这个适配器应尽快禁用。)

  • 安装的软件包:

  • Snort(确保配置和更新)

  • Strikeback(仅在 pfSense 的 32 位版本中可用。)

  • 为所有三个接口设置 DHCP 服务器。

  • 允许私有 IP 通过 WAN 接口。

  • 设置规则以允许从 WAN 到 LAN 的端口 22、80、443 和 3306。

  • 设置规则以允许从 LAN 到 OPT1 和反向的端口 21、22、23、25、80、443。

提示

在构建实验室时启用 ICMP 流量可能有助于您解决问题。在开始虚构的渗透测试之前,应阻止 ICMP。

系统名称:pfsense2

  • 操作系统:pfSense 2.0(FreeBSD)

  • 虚拟磁盘大小:1 GB

  • RAM:128

  • 两个网络适配器(内部):

  • LAN= 192.168.40.2(CORE40)

  • WAN = 192.168.30.2(DEV30)

  • 为核心(LAN)接口设置 DHCP

  • 通过 WAN 接口允许私有 IP

  • 设置规则以允许从 Core(WAN)到 Dev(LAN)适配器的所有内容

  • 设置规则以允许从 Dev(LAN)到 Core(WAN)的所有内容

提示

如果硬盘空间有限,则尝试将 pfsense1 用作链接基础。这可以通过克隆 pfsense1 并选择链接设备来实现。选中重新初始化接口 MAC 地址的复选框。

系统名称:WebServer

  • 操作系统:Ubuntu 10.04

  • 用户:John Dow(jdow),密码:039Alts2010

  • 虚拟磁盘大小:6 GB

  • RAM:最低 128 MB(建议 512 MB)

  • 要安装的软件包:

  • OpenSSH

  • lamp-server^

  • WordPress(最新版本)

  • 两个网络适配器(内部):

  • eth0 = 192.168.20.100(DMZ20)

  • eth1 = 192.168.30.100(DEV30)

  • 在锁定静态 IP 之前执行所有系统更新

系统名称:DevMachine

  • 操作系统:FreeBSD-8.2-RELEASE-i386-disc1:大多数镜像路径上都有:(/pub/FreeBSD/releases/i386/ISO-IMAGES/8.2/)

  • 用户:John Doe(jdoe),密码:1A2b3C4d!

  • 虚拟磁盘大小:4 GB(标准安装,基本用户将适合 4 GB 或更少)

  • RAM:最低 128 MB(建议 256 MB)

  • 两个网络适配器(内部):

  • eth0 = 192.168.40.101(CORE40)

  • eth1 = 192.168.30.101(DEV30)

该系统将需要安装默认的 SSH 和 INETD(Telnet,FTP)服务器。必须为此系统上的两个适配器配置 DHCP,否则您将遇到技术困难。这可以在操作系统安装过程中完成。在所有情况下使用用户名 jdoe。

系统名称:Kioptrix Level 1

  • CORE40 上的 1 个网络适配器(DHCP 将分配地址)

该系统将作为最终包含公司关键基础设施的 ArchLinux 数据库服务器的占位符。管理员声称您永远不应该能够从192.168.40.0/24网络到达此区域。他对这一事实非常确定,以至于他在核心段放置了一个已知易受攻击的系统来证明这一点。您的目标是从192.168.40.0/24网络段获得 Kioptrix 机器的 root 权限。

其他系统修改

在整本书中,我们已经全面介绍了在 VirtualBox 环境中安装和配置操作系统(如 pfSense 和 Kioptrix),因此为了简洁起见,我们将只关注使本练习中的系统与默认安装不同的步骤。幸运的是,我们只需要担心配置 Ubuntu web 服务器。

Web 服务器修改

名为Webserver的系统将需要安装并运行lamp-server^。如前所述,我们还需要安装和配置最新版本的 WordPress。WordPress 团队在提供社区详细的逐步安装和配置说明方面做得非常出色,可以在互联网上访问:codex.wordpress.org/Installing_WordPress。在这一点上,使用的用户名、数据库和密码并不重要,但应该易于记住且强大。请记住,本练习中的管理员打算构建一个安全的环境。在测试此环境时,您将需要“忘记”自己知道密码和用户名是什么…

除了完全修补和更新这个系统,我们还需要设置 SSH 服务器来接受我们在 192.168.10.0/24 模拟的(互联网)连接中的 jdow 用户,一旦 WordPress、OpenSSH 和静态 IP 被配置好。

一旦 WordPress 运行起来,我们需要用以下文本替换示例页面:

NewAlts Development and Research center
orem eu massa commodo eleifend quis gravida tortor. Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat. Aliquam vestibulum nulla gravida est sagittis non iaculis quam egestas.Thank you for visiting the NewAlts Development and Research center where we focus on examining all sorts of rocks and minerals and hope to make your life easier and safer! As we like to say in the office: NewAlts Rocks! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dolor lacus, malesuada vitae sodales eu, vulputate a leo. Mauris vulputate tristique nulla, at vestibulum nisl fringilla ut. Duis a quam quis lectus rutrum cursus. Morbi volutpat lorem eu massa commodo eleifend quis gravida tortor.
Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat. Aliquam vestibulum nulla gravida est sagittis non iaculis quam egestas. Thanks again for your visit and if you run into any problems with the website please contact our website administrator at jdow@newalts.lab! . Morbi volutpat lorem eu massa commodo eleifend quis gravida tortor. Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat.

这将为我们提供一些在现场工作的信息。我们可以继续进行本章更有趣的部分!当浏览到我们的WebServer机器时,我们应该看到类似以下截图的内容:

Web server modifications

挑战

实验室已经建立,连接已验证;现在是时候把整本书中获得的信息付诸实践了。挑战自己,在这个环境中从头到尾执行一次完整的渗透测试。这包括以下项目:

  • 确定范围(管理员只允许你在他的 VPN 上使用两个小时)。

  • 了解客户为什么要进行渗透测试。这对于真正满足用户需求至关重要。对于一些职业来说,这很容易,但对于渗透测试人员来说,情况并非总是如此。确定你的客户是想要进行渗透测试还是更接近一般性的漏洞分析。

  • 规则的参与文件:

  • 使用提供的信息创建一个实用的规则参与文件。

  • 确定并记录 ROE 中的范围。

  • 在 ROE 中巩固对测试的任何假设。

  • 明确定义的目标。你需要做什么来证明成功?仅仅展示一个带有whoami = root的屏幕截图对大多数观众来说是不够的。

  • 决定是否使用 Dradis、Magic Tree 或其他数据管理工具来管理你的结果。

  • 制定你的初始测试计划。在测试之前提前知道你的初始步骤是很重要的。

  • 进行侦察。

  • 开始枚举并决定攻击计划。根据范围的不同,你可能能够对资源进行漏洞扫描或应用程序扫描。这将会很吵。

  • 在枚举过程中,你应该收集关于可能的防火墙、IDS 或负载均衡的信息。

  • 执行你的攻击计划。由于渗透测试的性质,这将因测试而异,有时甚至需要在进行中进行更改。如果某些事情不如预期那样工作,要准备好备用计划。

  • 成功获取系统访问权限后,执行后利用,如果需要设置一个枢纽点深入网络架构。

  • 实现渗透测试的目标。

  • 清理。

  • 生成你的报告。

  • 安排会议与客户一起审查结果。

尽管渗透测试的“利用”阶段最具吸引力,但其他步骤对于成功的渗透测试同样重要。一定要练习并准备好每个步骤。了解渗透测试中的工具和技术非常重要,但这些将不断变化,而过程本身保持相对稳定,因此任何自动化或改进这些步骤的努力将对长远发展最有益。

祝你好运!在测试结束时,你应该能够完全控制 Kioptrix 机器。一定要仔细记录你的步骤和任何建议的更改,以使网络更安全!不要提前阅读,因为那会包含会破坏你测试的剧透。

步骤

希望在阅读本章的这一部分之前,你已经能够完成你的测试。它将包含示例和至少一种实现我们设定的目标的方法,即侵入我们自己网络或机器上运行的虚拟 NewAlts 开发实验室的安全。如果你的文档或获得初始目标的方法与本章描述的不同,这并不意味着它是错误的,只是不同。通过实践,渗透测试人员将开发出适合他们的技能和知识库的自己的方法。

注意

可能有其他方法可以达到我们的目标,而不仅仅是本章描述的方法。本章的目标是从头到尾给出渗透测试工作流程的一个示例。如果你找到了在 CORE 网络上的 Kioptrix 机器上获得 root 权限的其他方法,那就值得祝贺了!这就是渗透测试的全部意义!

定义范围

通过阅读情景目标和背景信息,可以清楚地定义这个特定测试的范围。

  1. 我们有两个小时的时间来测试一个虚拟环境,该环境已经被制作成模拟我们的客户最终希望在生产中使用的环境。

  2. 我们所知道的唯一用户是代表虚构的 NewAlts 研究与开发公司的管理员。

  3. 这个网络上的信息对公司完全无害。没有特殊需要加密或小心处理第三方服务。

  4. 我们的目标是完全攻破放置在 CORE 192.168.40.0/24 网络段中的 Kioptrix 机器,这个网络段无法从模拟互联网连接的 192.168.10.0/24 网络段中到达,而这将存在于生产环境中。

  5. 我们可以使用我们所知的任何技术,包括社会工程、利用、拒绝服务等。天空是极限。

  6. 这些系统上的任何数据或信息都不违反我们所知的任何法律,无论是州法还是联邦法。由于该网络仅用于教育目的,我们可以随心所欲。

  7. 网络上的所有系统都将基于开源。

考虑到这些因素,显然挑战在于有限的时间因素。如果我们团队中有几个人,我们可以建议使用几个具有非常具体任务的测试人员并行运行,以充分利用有限的两小时测试时间。(管理员拒绝支付超过两小时的标准费率,该费率基于最多三名测试人员加入测试)。

确定“为什么”

尽管在这种情况下,“为什么”对我们来说已经很清楚,但我们不应变得自满。这有助于测试人员和业务方了解你的测试的真正目标,并允许你专注于使你的测试和报告与实现这一目标保持一致。

在这种情况下,管理员已经明确表示漏洞分析工具已经针对这个网络使用过,并且他已经解决了除了业务认为可以接受的问题之外的所有问题。这将因企业的风险偏好而异,根据你所处理的公司或个人的风险偏好。了解风险偏好可能有助于确定“为什么”。也许你只是测试环境,只是为了向业务部门证明他们可以放心,攻击者需要超过两个小时才能攻破他们的网络,而这恰好是他们的安全团队在他们的环境中发现任何奇怪活动所需的时间。

那么,这个特定测试的“为什么”是什么?

管理员明确表示,如果任何关键数据被恶意入侵者收集,将直接造成经济损失。在公司工作的科学家们并不精通技术,并将使用基本的解决方案来解决技术问题。可以肯定地说,他们将在文件服务器上存储未加密的测试文件,这些文件由多个用户共享,其中包含关键数据。在这种情况下,“为什么”的原因是担心会损失大量资金,需要有人向业务保证管理员建议的安全配置足以防止发生这种情况。

制定规则的参与文件

这份最关键的文件必须写得清楚,定义明确。我们现在已经获得了制定规则的所有所需信息,在进行任何测试之前必须呈交并达成一致。

提示

规则的参与应由具有代表您的客户的全部权限的 C 级高管签署。

规则的参与必须详细说明范围、系统、网络地址以及测试期间允许和不允许做的事情。无论您决定采用的模板或外观如何,您为应对挑战而创建的文件应至少包含以下信息:

  1. ROE 创建日期:2020 年 1 月 2 日。

  2. 贵公司及任何直接参与测试的测试人员的名称和联系信息:Lee Allen。

  3. 请求摘要:我们需要完全攻陷 Kioptrix 机器,该机器位于 CORE 网络段,无法从模拟生产环境中存在的 192.168.10.0/24 段的互联网连接访问。

  4. 渗透测试的快速描述(以下内容摘自本书的第一章规划和范围确定成功的渗透测试):渗透测试使企业能够了解所采用的缓解策略是否按预期工作;它基本上消除了猜测。渗透测试人员将被要求模拟攻击者可能尝试的行动,并将被要求证明他们能够攻陷所针对的关键系统。这使企业能够了解安全控制是否按预期工作,以及是否有任何需要改进的地方。

  5. 将执行的测试类型:无限制的完全攻陷渗透测试,除了时间限制。

  6. 限制:2 小时时间。

  7. 渗透测试的明确目标:在两小时内完全攻陷位于 CORE 网络段的 Kioptrix 机器。

  8. IP 范围:192.168.10.0/24,192.168.20.0/24,192.168.30.0/24,192.168.40.0/24。

  9. 数据处理:数据被说明仅用于测试,因此不得以任何方式视为机密处理。

  10. 如何处理发现可能违反州或联邦法律的数据:在通知企业或其实体之前,将事先通知相关当局。

  11. NewAlts Development 联系人及其电话号码等清单:Jon Doe。

  12. 需要公司相关主管的签名:NewAlts Development CISO,CIO 或其他负责人。除非管理员能证明否,否则管理员没有足够的权限允许您测试 NewAlts Development Corporation 的资产。

攻击的初始计划

ROE 完成后,我们可以查看网络图并制定攻击计划。让我们审查管理员提供给我们的网络布局。

攻击的初始计划

在这次白盒测试中,我们被提供了网络架构,以弥补我们正在测试模拟环境并受到严格时间限制的事实。我们需要确定路由器是否会允许我们从 pfSense1 到 WebServer 和 DevServer。从提供的图表中不清楚我们是否可以远程访问 Kioptrix Level 1 机器。我们的初始计划如下:

  1. 对 192.168.10.1 防火墙和网关进行漏洞扫描。我们知道这一点,所以我们也可以利用它!对此图表中列出的所有系统执行相同的操作。

  2. 对 192.168.20.0/24 执行网络和漏洞扫描。

  3. 如果我们可以从 192.168.10.0/24 设备到达其他段,我们也将对它们执行网络和漏洞扫描。

  4. 如果我们无法到达任何网络,我们将对 WebServer 应用程序执行 Web 应用程序扫描,并查看是否有任何我们可以利用的 Web 应用程序漏洞。

这个最基本的计划足以让我们开始。我们从这些步骤中收集的信息应该足以让我们进入下一步。谁知道,也许管理员是对的,设置实际上是安全的!(在这种情况下不太可能!)

注意

在这次测试的有限范围内,可以使用任何可用的文档手段,以便您能够向客户提供可接受的报告。

枚举和利用

我们首先执行行动计划中的第一步,并使用我们选择的工具扫描设备。在这种情况下,我决定使用 MagicTree。它允许我从应用程序内运行查询,并且具有即时生成报告的能力。

加载 MagicTree 并创建一个新节点,就像我们在书的第一章中所做的那样,规划和范围确定成功的渗透测试,并对从 192.168.10.0/24 子网可用的任何网络运行 Nmap 扫描。如果一切配置正确,您应该只能看到192.168.20.1192.168.20.0/24网络上的Webserver

枚举和利用

在审查我们获得的数据时,我们发现这些系统上运行着一些有趣的服务,应该进行审查。让我们快速对它们进行漏洞扫描,以节省时间。我们将使用 OpenVas 执行漏洞扫描。OpenVas 包含在 BackTrack 5 R1 中,但必须在使用之前进行适当配置。有关设置 OpenVas 的说明可以在Backtrack-linux.org网站上找到www.backtrack-linux.org/wiki/index.php?title=OpenVas&oldid=756

注意

请注意,OpenVas 配置将需要互联网连接。

在意识到扫描将花费太长时间并且会使我们超过两小时的标记后,我们决定继续进行测试计划的下一阶段,并迅速确定安装的软件已经相当更新,并且没有任何已知的漏洞适用于任何开放服务。从查看网站时,我们还注意到它是最新版本的 WordPress 的标准安装。在仔细审查网站时,我们注意到一个联系电子邮件地址。我们将这个电子邮件地址添加到我们的 MagicTree 笔记中。有很大的可能性,电子邮件名称jdow也用作网络登录。如果是这种情况,我们已经解决了一半的难题。也许我们可以暴力破解 Joe 的 SSH 密码。

在这一点上,我们决定尝试 SSH 服务器。根据范围,我们被允许使用任何可用的工具,这为我们打开了暴力破解密码的可能性。再次,请记住这次测试有限的时间,所以我们决定使用cewl从 192.168.20.100 的网站上拉取密码列表。

# /usr/bin/ruby1.8 /pentest/passwords/cewl/cewl.rb -e -w dict 192.168.20.100 

这个命令在我们当前的目录中创建一个名为dict的文本文件。我们可以尝试直接运行这个列表,看看这些单词是否会帮助我们暴力破解 SSH 服务器的用户名或密码。

然后,我们将该列表通过cupp运行,以添加一些特殊字符,连接单词,并且通常滥用该文件。完成后,我们可以通过消除许多不太可能使用的密码来节省时间,例如只有数字的密码,例如 00000001 等。如果单词列表太大,则删除其中一个选项并尝试。

枚举和利用

通过xhydra使用jdow用户名和新生成的密码列表运行此列表,您将希望出现以下提示(在测试系统上花了 15 分钟,整个实验室都在运行;在您的系统上可能需要更长的时间,特别是因为整个实验室使用了大部分资源):

枚举和利用

现在我们有了一个 SSH 连接。登录到 WebServer,查看 jdow 账户的权限是什么。您会意识到我们没有安装任何软件的能力。相反,我们决定使用 WebServer 作为一个枢纽点(在这种情况下是 SSH 代理)使用 MetaSploit。首先,我们需要在 BackTrack 中设置我们的 SSH 隧道到 Webserver:

# ssh -D 127.0.0.1:3306 jdow@192.168.20.100 

这将在端口 3306 上创建我们的隧道,用于发动我们的攻击。这是使用 443 的隧道的一个示例,它将增加与网络上其他加密流量混合的额外好处。由于我们最终使用的漏洞存在一些稳定性问题,我们选择 3306 而不是 443。

枚举和利用

登录到 Metasploit,我们设置了一个代理连接,允许我们通过 WebServer 连接使用 Metasploit。在 Metasploit 中执行以下命令,这些命令是根据 HD Moore 的邮件列表回复进行调整的。原始消息可以在以下网址找到:mail.metasploit.com/pipermail/framework/2010-January/005675.html

setg Proxies SOCKS4:127.0.0.1:3306
setg LPORT 45567
setg PAYLOAD bsd/x86/shell/bind_tcp

这些命令将设置代理和首选有效载荷的全局变量。我们选择默认的本地端口为 45567。

作为下一步,我们需要确认确实有一个 FreeBSD 机器可用于 192.168.30.0/24 网络,正如管理员所通知的。为了做到这一点,我们可以从 Telnet 服务器进行横幅抓取,看看是否有哪种操作系统正在使用的迹象。这也可能是一个好主意,看看是否有任何来自 NMAP 扫描的信息。

使用标准的 Nmap 扫描,我们注意到我们的流量被拦截。在这一点上,我们可以使用其他扫描方法,但决定手动尝试找到最常见的端口,而不是等待代理扫描的结果,这可能会很慢。

注意

我们无法从这个枢纽运行标准的 SYN 扫描。有替代的扫描方法,但这超出了本章的范围。

枚举和利用

我们碰巧知道有一个已知的 FreeBSD Telnet 漏洞,管理员似乎已经安装在这个系统上(通过我们在 WebServer 上的 SSH 会话使用 NetCat 进行确认)。我们使用nc来检查最常见的端口,如 80、25、21 等。在采取这种方法之前,我们首先检查是否安装了 nmap 或其他扫描程序。

枚举和利用

让我们尝试执行已知的漏洞。目标系统很可能是脆弱的,因为这是一个相对较新的漏洞。

枚举和利用

首先,我们在 MSF 中搜索 Telnet,然后我们在exploit/freebsd/telnet/telnet_encrypt_keyid上设置了我们需要的一切,并准备尝试利用漏洞。

它起作用,我们可以运行一些命令来验证我们登录的身份,以及系统连接到了什么。

枚举和利用

注意,我们现在可以将这个系统用作攻击平台,攻击 192.168.40.0/24,这是管理员提到的 CORE 安全区域。让我们试着提升游戏账户的权限。我们切换到/etc/目录并运行以下命令:

awk -F ":" 'BEGIN{OFS = ":"} $1 == "games" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test 

复制生成的测试文件到passwd文件上,我们现在应该能够用那个账户登录了。注意:我们无法更改我们的游戏账户或其他任何账户的密码!默认的pam安全性阻止了我们进行这个本来微不足道的任务!这再次证明了作为渗透测试人员,你必须保持专注,永不放弃。如果某事不起作用,尝试做一些改变,或者改变整个方法,直到你成功为止!

幸运的是,我们以 root 身份登录到了系统,所以我们尝试/usr/sbin/adduser并设置一个名为 lee 的用户,密码为 lee。awk语句被修改后我们再次尝试:

# awk -F ":" 'BEGIN{OFS = ":"} $1 == "lee" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test
# cp test passwd

现在让我们转到 WebServer 上的 SSH 会话,看看我们的 lee 账户对我们有什么作用。

在下一阶段,我们必须利用我们已知的最后一个目标系统的知识。我们已经了解了它的漏洞,并且有代码(记得10.c?)可以在 192.168.30.101 系统上编译,以利用 192.168.40.102 系统。在这一点上,继续进行的许多方法包括简单地将10.c的代码复制到 vi 中,然后通过 FreeBSD 机器上的 GCC 进行编译。

枚举和利用

一旦10.c被编译,我们就能够运行它并获得对 Kioptrix 一级机器的 root 访问权限。为了证明我们能够访问这台机器,我们决定更改 root 密码。这通常不是一个好主意,但根据我们的约定规则,这是完全可以接受的。我们使用passwd命令将 Kioptrix 机器的密码更改为NothingIsSecure,然后注销并断开所有连接。

我们重新连接到我们的 WebServer 机器上的 SSH,然后 SSH 登录到 DevServer:

枚举和利用

我们随后使用新密码登录到我们的 Kioptrix 机器的 SSH,以验证我们已经实现了渗透测试的目标。

枚举和利用

报告

我们已成功完成渗透测试,现在必须制作文档。您的报告应该看起来专业、有条理,并清楚解释发现的问题,还应该用非技术性的语言解释这些问题可能是如何被忽视的。重点是介绍允许您进入的原因,但也要确保指出一些工作的地方,比如在尝试为标准游戏账户添加密码时遇到的pam限制(在一个声称安全的环境中,这样的账户在技术上本不应该存在)。

让我们花点时间来分析我们在这次渗透测试中遇到的问题:

  1. 我们能够暴力破解一个使用大写和小写字母以及数字的密码。密码也超过了八个字符,这在一个安全的环境中是相当标准的。用户绝对不应该使用基于公司名称或其他琐事的密码。如果有人有一个页面说他们喜欢足球,那么你最好相信它会出现在某人的基本单词列表中。建议在这里是将 SSH 连接限制在特定的 IP 上,或者至少要求除了简单登录外还需要证书。尽管这看起来微不足道,但许多公司继续忽视这一简单的步骤。账户锁定也是阻止暴力破解密码攻击的一种可靠方法。

  2. 我们利用了一个已知的漏洞。很可能这个漏洞最终会被修补。真正的问题在于 Telnet 一开始就在运行。这是一个已知的不安全协议,以明文传输数据。在这种情况下,企业必须认为这是一个可以接受的风险,因为正在传输的数据的性质。在这里学到的教训应该是,只有关键服务应该随时运行,而且只是因为有一层安全机制并不意味着其他系统可以完全依赖这种安全机制。

  3. 将一个已知的易受攻击的系统作为目标只会招来麻烦。在现实世界中,这是绝对不可接受的。通过使用这样的系统,管理员将会在一些人心中引起怀疑。他们不会明白这个系统代表了他们在启动时的“加固”服务器。解释说攻击者将有超过两个小时的时间来进行攻击,并且会安装各种恶意软件,最终帮助破解任何加固的机器。

  4. 网络安全设备在适当监控和控制时是有效的。然而,它们并不是万能药。只有通过深度防御,一个上网的企业才能真正安全,即使这样,随着安全研究人员和恶意黑客发现新技术,甚至可能会有不同程度的“安全”。要记住的是,安全研究人员报告他们的发现是为了帮助保护最终用户。当安全研究人员发布有关漏洞的信息时,重要的是要记住这个漏洞并不是的,它只是新公布的。安全研究人员并没有创造这个漏洞;他或她只是把它带给了那些负责纠正编码错误的人。恶意用户可能早就知道这个漏洞,甚至可能已经使用这个漏洞多年。恶意攻击者会保守他们的秘密,并最大化地利用这项技术。许多企业不理解这种区别,我们的工作就是确保他们知道真正的威胁是谁,以及为什么安全研究人员要做他们的工作。

如果你在你的模拟报告中捕捉到了所有这些以及更多内容,恭喜你!这个挑战并不代表最具挑战性的环境,但希望它能成为一个对使用修补系统、防火墙、入侵检测系统等来保护关键资产的高度安全环境进行渗透测试的良好介绍。

总结

在这一章中,我们首先建立了一个场景,让我们能够从头到尾模拟一个渗透测试。然后我们开始设置测试环境,然后深入到成功进行渗透测试所必需的阶段。

一旦基础知识掌握了,你就会被挑战在这个环境中进行自己的测试。希望对你来说,这既具有挑战性又令人兴奋!

我们通过提供一个可能的执行这种渗透测试的方法来完成了这一章节。有其他方法可以完成同样的任务,有些比其他方法更好。我们的目标是展示其中一种方法。在实验室中尝试不同的场景。利用它来获取你需要的技能,或者磨练你已经拥有的技能。当做工作的时候,你需要尽可能多的运气和技能,因为在这个世界上有一件事是肯定的:“任何可能出错的事情都会出错”墨菲定律。