Skip to content

Latest commit

 

History

History
1252 lines (858 loc) · 51.2 KB

File metadata and controls

1252 lines (858 loc) · 51.2 KB

三、枚举:明智选择目标

要成功地渗透到一个安全的环境中,您必须很好地了解您所面临的问题。收集的枚举数据将有助于确定目标优先级。在本章结束时,您应该能够选择哪些目标是初始攻击的理想候选目标。某些攻击类型比其他类型发出更多的“噪音”,因此目标攻击不太可能被注意到。多亏了开源社区的辛勤工作,我们有了大量可供选择的工具来帮助我们枚举网络。在本章中,我们将讨论以下内容:

  • 如何向虚拟实验室添加额外的计算机

  • 高级 Nmap 扫描技术

  • 将自定义 Nmap 脚本添加到您的库中

  • 使用 SNMP 节省时间

  • 使用 PBNJ 为您的目标网络打下基础

  • Avoiding enumeration attempts — confusing the enemy

    本章中的一些示例利用防火墙和 IDS 日志,让读者了解某些扫描和技术对网络的影响。我们将在后面的章节中回顾这两个的安装和配置。

向我们的实验室添加另一个虚拟机

我们已经达到了书中的一个点,在我们的实验室中有一个额外的系统是有益的。在本节中,我们将在我们的网络上安装另一台机器,以便我们可以尝试所描述的枚举技术。

虽然有益,但此时安装另一个虚拟系统并非绝对必要。书中清楚地记录了所有的例子。

本文中的示例将使用 Ubuntu10.04 LTS 64 位。您可以从下载 Ubuntu 10.04 LTShttp://www.ubuntu.com/download/ubuntu/download 。一旦你拿到了 ISO 的副本,我们就可以开始安装了。

在 VirtualBox 中准备一个新的虚拟机,如下所示:

  • **名称:**Ubuntu\u TestMachine\u 1

  • **操作系统:**Linux,**版本:**Ubuntu 或 Ubuntu 64(64 位)

  • **内存:**512 最小值

  • **Create new hard disk:**VDI, Dynamically allocated, 10 GB minimum

    Adding another virtual machine to our lab

启动Ubuntu\u TestMachine\u 1虚拟机,使用首次运行向导选择您下载的 Ubuntu ISO 作为安装介质。使用完整的虚拟机(VBOX ATA)驱动器,遵循标准的 Ubuntu 安装过程。

在安装过程中选择以下设置:

  1. 你叫什么名字:学生
  2. 您想使用什么名称登录:学生
  3. 选择一个密码:1easyPassword
  4. 这台计算机的名字是什么?:火卫一
  5. 需要我的密码才能登录:已选择

成功安装 Ubuntu 后,需要对其进行更新。打开终端窗口,进入左上菜单,选择应用程序【附件】终端并键入:

# sudo apt-get update 

然后:

# sudo apt-get upgrade 

由于我们将使用此系统作为典型网络上可能看到的示例,因此我们需要安装一些有趣的服务。

  1. 打开终端会话并键入以下命令,该命令将安装 Apache、MySQL 和 PHP:

    # sudo apt-get install lamp-server 
    
    
  2. 安装将继续进行,下载一些文件后,您需要为 root 用户输入您选择的MySQL密码。

  3. 确认您的密码并按进入

系统已经更新,我们有一些有趣的端口可供扫描。我们现在可以关闭新的来宾计算机,并使用VM VirtualBox Manager 设置图标将网络设置更改为内部网络,名称设置为:Vlab_1。将网络适配器设置为内部网络允许我们的回溯系统与新创建的 Ubuntu 机器共享同一子网。

Adding another virtual machine to our lab

配置和测试我们的 Vlab_1 客户机

让我们启动两个虚拟机,然后配置和测试网络连接。

回溯手动 ifconfig

BT5\U R1\U Tester1中打开一个终端并键入以下内容:

# ifconfig eth1 192.168.50.10 netmask 255.255.255.0 broadcast 192.168.50.255 promisc 

我们已经将我们的虚拟 VLab_1段上的 eth1设置为 192.168.50.10的 IP 地址,将网络掩码设置为 255.255.255.0,将 broadcast地址设置为 192.168.50.255。作为额外的奖励,我们还将设备设置为混乱模式。

提示

为了使混杂模式工作,必须启用它。该选项位于网络设置下的虚拟机管理器中。默认情况下,所有网络适配器都禁用此设置。

混杂模式允许您监控网段上的流量。

Ubuntu-手动 ifconfig

使用顶部菜单栏打开 Ubuntu_TestMachine_1中的终端,点击应用程序【附件】终端。键入 sudo ifconfig检查您当前的配置。如果所有配置都正确,则不应将 IP 地址分配给 eth0。我们将通过重复回溯机器使用的步骤来纠正这种情况。这次我们将使用 eth0而不是 eth1,并且我们不会将此网络适配器置于混杂模式。

# sudo ifconfig eth0 192.168.50.20 netmask 255.255.255.0 broadcast 192.168.50.255 

验证连通性

我们将尝试 ping 机器以验证连接。在BT5\U R1\U 测试器 1上类型:

# ping 192.168.50.20 

Ubuntu_TestMachine_1上,类型:

# ping 192.168.50.10 

如果所有配置都正确,您将看到以下屏幕截图:

Verifying connectivity

重启后维护 IP 设置

如果您希望静态分配网络信息,而无需每次手动输入此信息,您可以编辑相应以太网设备的 /etc/network/interfaces文件。

提示

两个虚拟机都可以完成以下步骤。确保为每台机器使用正确的 IP 和适配器信息。

以下是回溯来宾计算机需要在该文件中更改的内容的示例:

auto eth1
iface eth1 inet static
address 192.168.50.10
netmask 255.255.255.0
network 192.168.50.0
broadcast 192.168.50.255

请确保在修改此文件(/etc/init.d/networking restart)后重新启动网络服务。

提示

Ubuntu 用户可以使用 ufw(简单防火墙)来管理基于主机的 iptables 防火墙。本章中提到使用基于主机的防火墙的示例利用了这一事实。有关 UFW 的更多信息,请访问网站https://help.ubuntu.com/10.04/serverguide/C/firewall.html

该防火墙易于配置且非常稳定。默认情况下禁用 UFW,但只需键入: sudo ufw enable即可启用 UFW。

Nmap-了解你

如果您正在阅读本文,很可能您以前使用过 Nmap。对于那些没有的人,这里是这个强大的枚举工具的简短描述。Nmap(网络映射器)自 1997 年开始出现,最初由 Gordon“Fyodor”Lyon 创建。即使您以前从未使用过该程序,您也可能在它所拍摄的众多电影中至少有一部看到过它的输出。

Nmap 可用于扫描网络、监视服务、协助执行系统资源清册任务等。根据选择的选项,Nmap 将能够提供操作系统类型、开放端口等。似乎这还不够,可以使用 Nmap 脚本引擎进一步扩展基本功能。

根据http://nmap.org 网站 Nmap 5 中包含 177 个脚本。这些脚本的用途从猜测苹果归档协议密码到验证是否可以与 X 服务器建立连接。

Nmap 套件还包括:

  • **ZenMap:**Nmap 图形用户界面。

  • **Ncat:**基于 netcat,但更新了更大的功能集,如 Ncat 链接、SSL 支持等。二进制文件可用。

  • **Ncrack:**用于测试认证实现和密码强度。支持许多常用的协议。

  • **Ndiff:**可用于对网络进行基线设置。相互比较 nmap 扫描。

  • Nping: Allows you to craft custom packets that can then be integrated into your scans. Able to perform raw packet manipulation.

    以下部分中使用的一些示例显示了需要结合防火墙和 ID 来演示工具行为的某些方面的示例输出。设置这些设备在本书的后续章节中有详细介绍,但超出了本章的范围。

常见的 Nmap 扫描类型和选项

Nmap 命令语法: nmap -{type(s)} -{opt(s)} {target}

有用选项:

|

扫描选项

|

标题

|

功能

| | --- | --- | --- | | -g | 指定源端口 | 使用指定的源端口发送数据包。 | | --spoof_mac | 欺骗 Mac | 创建一个假 Mac 地址以从中发送数据包。可以随机化 MAC。 | | -S | 源 IP 地址 | 伪造源 IP 地址或告诉 Nmap 使用哪个 IP。 | | -e | 选择以太网接口 | 确定在哪个 eth 上发送和接收数据包。 | | -F | 快速扫描 | 将 nmap 服务文件中的默认扫描减少到 100 个端口。 | | -p | 指定端口范围 | 确定扫描哪些端口。 | | -R | 反向查找 | 强制反向查找。 | | -N | DNS 解析 | 执行反向查找。 | | -n | 没有 DNS 解析 | 不执行反向查找。 | | -h | 帮助文本 | 提供 Nmap 帮助文本。 | | -6 | IPv6 启用 | 扫描 IPv6。 | | -A | 侵略性的 | 一次启动多个选项,例如版本和脚本扫描。小心使用。 | | -T(0-5) | 时间选择 | 确定您希望扫描的攻击性。 | | --scan_delay | 增加延迟 | 在探测之间添加延迟。 | | -sV | 服务版本 | 探测服务软件版本。 |

有用类型:

|

扫描类型

|

标题

|

功能

| | --- | --- | --- | | -sA | 确认扫描 | 检查端口是否有状态。用于测试防火墙。 | | -sP | 平扫 | 用于快速网络发现。 | | -sR | RPC 扫描 | 查找 RPC 应用程序。可能会在成功扫描的主机上保留启动日志条目。这现在是 -sV的别名。 | | -sS | TCP 同步扫描 | 非常快速和隐蔽。半开放扫描。 | | -sT | TCP 扫描 | 建立完全连接。效率不高。非常嘈杂的扫描类型,很容易被注意到。 | | -sU | UDP 扫描 | 确定某些 UDP 端口是否打开。 | | -sX | XMAS 扫描 | 隐形扫描对某些防火墙配置很有用。查找 RST 数据包以确定端口是否已关闭。适用于扫描 UNIX 系统。 | | -sL | 列表扫描 | 列出将被扫描的 IP 地址。使用 -n确保网络上没有发送数据包。 | | -sO | IP 协议扫描 | 搜索主机上正在使用的 IP 协议。 | | -sM | 财务/确认 | 隐形扫描。对基于 UNIX 的系统有很好的抵抗力。查找 RST 数据包。 | | -sI | 空闲扫描 | 僵尸主机扫描非常隐蔽的扫描。 | | -sW | 窗口扫描 | 查看 RST 数据包 TCP 窗口值以确定打开或关闭的端口。 |

输出类型:

|

输出类型

|

标题

|

功能

| | --- | --- | --- | | -oA | 全部的 | 可归格、普通、XML。 | | -oG | 可歌可泣 | 格式化为 grepping。 | | -oX | XML | 将结果输出到 XML。 | | -oN | 典型的 | 人类可读的输出。 |

基本扫描-预热

我们将首先在 192.168.50.20对我们的Ubuntu\u TestMachine\u 1进行一些基本扫描。在这里,我们将使用 -A选项执行一个简单的扫描,以确定目标系统上打开了哪些端口。

# nmap -A 192.168.50.20 
Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2050-12-22 14:32 EDT
Nmap scan report for 192.168.50.20
Host is up (0.00045s latency).
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.14 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:64:38:C7 (Cadmus Computer Systems)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.19 - 2.6.35
Network Distance: 1 hop
TRACEROUTE
HOP RTT ADDRESS
1 0.46 ms 192.168.50.20
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.07 seconds

查看突出显示的结果,我们可以确定在 80/tcp有一个开放端口运行 Apache httpd web server version 2.2.14。我们还看到在目标系统上运行的操作系统是 Linux2.6.x。此外, -A标志启动了一个 traceroute命令,该命令向我们提供了一个事实,即目标距离我们只有一跳。

NMAP -A扫描非常嘈杂,在需要隐身时不应使用。

这是从一个非常简单的命令中获得的大量信息。让我们继续讨论这个很棒的工具的一些更高级的功能。

其他 Nmap 技术

Nmap 可用于多种用途。除了是一个快速的网络发现工具外,它还可以用于秘密地建立网络基线、指纹服务、制定防火墙规则,以及配置为绕过 IDS 签名。我们现在将试用 Nmap 提供给我们的一些更高级的特性。这些信息绝不是全面的,因此我们将重点关注帮助我们测试安全环境的功能。

保持隐身状态

网络扫描过程包括向网络主机发送精心编制的数据包,并根据特定标准检查结果。根据这些结果,您将有望确定网络上的主机、它们正在运行的服务以及这些服务的版本级别。然后,该信息用于确定哪些类型的攻击可能会成功。我们可以使用几种方法来确定这些信息,有些方法类似于在街上尖叫你的名字,而另一些方法类似于在夜间的阴影中爬行。

在一个安全的环境中,您可能需要处理 ID,这些 ID 会查找特定的行为,例如:发送了多少数据包,发送速度有多快,流量是否异常,等等。防火墙将很容易标记任何异常连接尝试。为了确保你有一个微小的机会保持不被发现,有一些措施需要采取。

慢慢来

您可以使用以下 nmap 选项更改扫描时间:

  • **-T(0-5)**模板允许您设置扫描的攻击性。这是最简单的避免探测的方法。0 是偏执狂,5 是疯子,应该只在局域网上使用。这比单独设置这些选项快得多,但会减少对扫描的控制。
  • --max hostgroup将限制一次只能扫描一台主机。您可以将该值更改为任何您熟悉的值,但请记住,IDS 将在检查其签名时组合您发送的探测(例如,2 分钟内 5 个探测,依此类推)。
  • **——最大重试次数:**在渗透测试中,除非您非常确定网络的稳定性,否则您可能不想调整此设置。如果您非常偏执,并且不担心在扫描中丢失可能有漏洞的系统,则可以将此值减小为 0。
  • -最大平行度****10只允许同时输出 10 个未完成的探针。使用此选项可以控制一次要输出多少探测器。
  • --扫描延迟允许您在探头之间设置暂停。

让我们在以下命令中尝试其中一些选项:

# nmap -P0 -n -sS --max_hostgroup 1 --max_retries 0 --max_parallelism 10 192.168.50.0/24 

重传上限将被击中;港口将被放弃。扫描完成时,我们将知道 192.168.50.X 子网上有哪些系统。

使用 --max_parallelism时不要使用 --scan_delay选项,因为它们彼此不兼容。

尝试不同的扫描类型

这是从 192.168.50.10 到 192.168.75.11 的典型扫描结果。

root@bt:~# nmap -T5 192.168.50.10 
Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 18:50 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0017s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
79/tcp open finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 13.19 seconds

我们可以从这个输出中看到 21、79、80、110 和 443 在这个主机上是打开的。

即使大多数 ID 在默认配置下运行,也会检测到这种扫描类型;但是,基于网络和主机的防火墙默认情况下可能会忽略流量,除非专门配置为记录允许的流量。如果您想查看操作结果,请启用 UFW 并使用它打开和关闭特定端口。此练习可能有助于完全理解结果输出。

如果您使用基于主机的有状态防火墙阻止端口 79 和 21 的流量,尝试此扫描,您将看到与以下类似的流量:

root@bt:~# nmap -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 18:56 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0014s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp filtered ftp
79/tcp filtered finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 14.22 seconds

通过仔细查看突出显示的代码,我们可以看到端口 2179的端口状态为 filtered。虽然我们无法确定端口是否打开,但我们确实知道它们在某些上下文中存在于目标计算机上。

同步扫描

在 192.168.75.11 的 192.168.50.10 的大开放主机上使用 -sS可以看到以下内容:

root@bt:~# nmap -sS -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:09 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0019s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp filtered ftp
79/tcp filtered finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 14.23 seconds

与前面的示例一样,这表明我们至少有五个打开和/或过滤端口可用。在尝试枚举目标网络时,请确保使用不同的扫描类型,否则您可能会错过一些可能对您的测试工作产生巨大影响的内容!

零扫描

如果我们尝试的唯一扫描是空扫描,我们会非常失望:

root@bt:~# nmap -sN -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:15 EDT
Nmap scan report for 192.168.50.10
Host is up (0.00051s latency).
All 1000 scanned ports on 192.168.50.10 are open|filtered
Nmap done: 1 IP address (1 host up) scanned in 24.24 seconds

这告诉我们所有的端口都是 open|filtered。我们可以假设我们有一些防火墙操作,但实际上我们并没有学到任何立即有用的东西。

确认扫描

由于在 Null 扫描中没有找到任何内容,我们继续使用 ACK 扫描类型。

root@bt:~# nmap -sA -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:18 EDT
Nmap scan report for 192.168.50.10
Host is up (0.00059s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
443/tcp unfiltered https
Nmap done: 1 IP address (1 host up) scanned in 61.22 seconds

至少这次扫描为我们提供了一个未过滤的端口。如果我们真的想执行测试,我们需要所有的开放端口,而不仅仅是一个!

结论

使用不同的扫描类型可能会引起更多的注意,但有时需要收集所需的数据。理想情况下,您可以从最不明显的扫描类型开始扫描,然后根据收集的信息类型逐步进行扫描。在移动到下一个子网之前,请务必仔细检查,特别是如果您有充分的理由相信有一些有价值的端口没有显示出来。

推卸责任——是僵尸干的!

由于未被发现的可能性很小,我们需要设法转移责任。我们可以使用一个空闲扫描,让一个僵尸为我们的扫描获得所有的积分。

提示

nmap.org网站对空闲扫描的工作原理有非常详细和透彻的描述。请看http://nmap.org/book/idlescan.html 了解这些工作原理的完整概述。

关于空闲扫描(-sI)需要记住的一个重要事项是,您需要找到一个具有良好TCP 序列预测评级的僵尸主机。空闲扫描的名称很贴切,因为作为替罪羊使用的机器必须尽可能接近空闲。业内许多人认为网络打印机是完美的僵尸,因为它们通常没有固定的流量,而且它们的序列预测难度评级通常非常低。

空闲扫描的第一步是定位可能的僵尸。您可以通过执行以下操作(详细、操作系统检测、无 ping、无名称解析)找到 TCP 序列预测评级:

# nmap -v -O -Pn -n 192.168.50.10 

您希望关注的输出部分如下所示:

Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=195 (Good luck!) 
IP ID Sequence Generation: Sequential

上面的系统并不理想,但应该可以用作僵尸。难度等级越高,尝试将此机器用作僵尸失败的可能性越大。此外,生成是连续的这一事实将提高扫描成功的可能性。

让我们回顾一下空闲扫描的概念:

  1. 向 zombie 发送 SYN/ACK,zombie 反过来提供一个带有片段标识号(IPID)的 RST。
  2. 带有僵尸主机 IP 地址的巧尽心思构建的数据包被发送到目标计算机。
  3. 目标机器上关闭的端口将导致 RST 发送到僵尸,在这种情况下不会发生任何事情。另一方面,打开的端口将导致目标机器使用 SYN/ACK 响应伪造数据包的 IP 地址,这反过来导致我们的僵尸机器在意识到没有有效连接时向目标发送 RST。IPID 现在已增加!
  4. 我们通过向僵尸发送另一个 SYN/ACK 并检查 IPID 是否增加了 2(一次用于 RST,一次用于目标机器 RST)来结束循环。
  5. 重复此操作,直到探测到所有目标机器端口!

在查看僵尸扫描的工作原理时,很容易看出,正确使用空闲扫描有助于减缓 blue 团队成员(防御性安全专业人员)的速度。

那么,这个命令的语法是什么呢?有这么大的能量,一定会非常困难,对吧?当看到以下命令结构时,您可能会感到惊喜:

nmap -p 23,53,80,1780,5000 -Pn -sI 192.168.1.88 192.168.1.111 

在这里,我们使用 -p来启动对已经打开的 TCP 端口的扫描;我们还表示不想用 -Pnping(这会泄露我们),然后启动了一个空闲扫描(-sI),使用 192.168.1.88作为我们的僵尸,使用 192.168.1.111作为我们的目标。这将在此示例网络上产生以下输出:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 22:09 EDT
Idle scan using zombie 192.168.1.88 (192.168.1.88:80); Class: Incremental
Nmap scan report for 192.168.1.111
Host is up (0.036s latency).
PORT STATE SERVICE
23/tcp open telnet
53/tcp open domain
80/tcp open http
1780/tcp open unknown
5000/tcp open upnp
MAC Address: 30:46:9A:40:E0:EE (Netgear)
Nmap done: 1 IP address (1 host up) scanned in 1.18 seconds

如果我们查看 Wireshark 的输出,我们可以看到从 192.168.1.88192.168.1.111:正在进行一些奇怪的活动

Shifting blame — the zombies did it!

查看 Wireshark 的结果,我们发现之前的 Nmap 命令在我们的网络上启动了大量从 192.168.1.88192.168.1.111的流量。此流量将启动增加 IPID 所需的活动,IPID 告诉我们目标系统具有开放端口。

IDS 规则,如何避免

真正避免 IDS 规则的唯一方法是了解它们是什么,并在虚拟环境中测试您的攻击。我们将用这本书的整整一章来避免被发现。请准备好花时间了解 IDS 查找的内容,并使用我们已经描述的方法来管理您的扫描以执行避免检测。

使用诱饵

Nmap 诱饵的使用可能是一个有趣的概念。我们告诉 Nmap 向扫描添加其他主机。您不会从这些诱饵中得到任何响应,但它们会使管理员更难确定哪个 IP 正在积极扫描,而哪个 IP 只是在那里搅浑水。理想情况下,您将启动一个扫描,该扫描将具有足够的实时诱饵,以降低目标管理员的检测能力。

扫描时使用实时诱饵。这将使确定哪个系统正在积极扫描变得更加困难。实时诱饵是网络上当前处于活动状态的 IP。

需要注意的是,在使用诱饵时,您可以执行许多扫描类型。你不会受到限制,可以毫不犹豫地使用你所有的技巧。

让我们在虚拟实验室中尝试一下:

# nmap -D192.168.75.10,192.168.75.11,192.168.75.1,ME -p 80,21,22,25,443 -Pn 192.168.75.2 

在这里,我们调用 Nmap,然后调用 -D开关,这将导致我们执行诱饵扫描。我们按照这个命令列出了我们选择的诱饵,在本例中,所有诱饵都是活机器。再一次,我们不想发送 ping 请求,因此我们使用 -Pn停止此操作。选择的端口范围设置为 -p80,21,22,25443

提示

可以使用ME来代替键入您的本地主机 IP 地址。

以下是此次扫描的结果:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 23:03 EDT
Nmap scan report for 192.168.75.2
Host is up (0.00036s latency).
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
25/tcp filtered smtp
80/tcp open http
443/tcp filtered https
MAC Address: 08:00:27:DF:92:32 (Cadmus Computer Systems)
Nmap done: 1 IP address (1 host up) scanned in 14.35 seconds

这里没有什么新鲜事;我们再次确定了打开、过滤或关闭哪些端口。真正的魔法发生在电线上。让我们来看看基于网络防火墙的情况:

Using decoys

如果您查看 source 字段,您应该注意到我们使用的诱饵现在正在填充防火墙过滤器,该过滤器已设置为记录所有流量。如果使用足够多的诱饵,您可能会造成各种风暴,从而在执行枚举时完全混淆和延迟网络管理员。

提示

如果您想查看正在进行的扫描,可以在回溯机器上使用 Wireshark。在后面的章节中,我们还将全面介绍如何向实验室添加防火墙。

将自定义 Nmap 脚本添加到您的兵工厂

Nmap 脚本引擎允许您创建和使用执行许多不同功能的自定义脚本。如前所述,Nmap 附带了许多已经为您打包的脚本。有关 Nmap 脚本引擎的详细指南,请访问http://nmap.org/book/nse.html 。通过使用 --script选项,您可以调用自己的脚本,或者从现有的大量脚本库中进行选择。

确保您完全理解您运行的任何脚本。NSE 非常强大,如果您不了解过程的每个步骤,可能会造成损害!不要盲目地运行找到的所有脚本,否则以后可能会后悔。

如何判断剧本是否适合你

使用 Nmap 的 --script-help选项将允许您显示特定脚本的几个有用字段,而无需实际运行它。例如,如果我们查看位于 /usr/local/share/nmap/scripts的 BackTracks nmap 脚本文件夹并执行 ls -lah,我们会看到一长串未知项:

# cd /usr/local/share/nmap/scripts
# ls -lah

-rw-r--r-- 1 root root 2.7K 2011-07-19 21:02 afp-brute.nse
-rw-r--r-- 1 root root 5.5K 2011-07-19 21:02 afp-ls.nse
-rw-r--r-- 1 root root 5.0K 2011-07-19 21:02 afp-path-vuln.nse
-rw-r--r-- 1 root root 5.3K 2011-07-19 21:02 afp-serverinfo.nse
-rw-r--r-- 1 root root 2.5K 2011-07-19 21:02 afp-showmount.nse
-rw-r--r-- 1 root root 15K 2011-07-19 21:02 asn-query.nse
-rw-r--r-- 1 root root 2.0K 2011-07-19 21:02 auth-owners.nse
-rw-r--r-- 1 root root 831 2011-07-19 21:02 auth-spoof.nse
-rw-r--r-- 1 root root 8.6K 2011-07-19 21:02 backorifice-brute.nse
-rw-r--r-- 1 root root 9.3K 2011-07-19 21:02 backorifice-info.nse
-rw-r--r-- 1 root root 5.4K 2011-07-19 21:02 banner.nse
-rw-r--r-- 1 root root 2.9K 2011-07-19 21:02 broadcast-avahi-dos.nse
-rw-r--r-- 1 root root 1.5K 2011-07-19 21:02 broadcast-dns-service-discovery.nse
-rw-r--r-- 1 root root 3.4K 2011-07-19 21:02 broadcast-dropbox-listener.nse
-rw-r--r-- 1 root root 3.6K 2011-07-19 21:02 broadcast-ms-sql-discover.nse
-rw-r--r-- 1 root root 1.8K 2011-07-19 21:02 broadcast-netbios-master-browser.nse

此列表比本书中显示的内容更进一步,并且不断更新。不久前,Fyodor 在 Defcon 18 会议上提供了一个关于 Nmap 脚本引擎的精彩演示,已经将脚本添加到存储库中的渗透测试人员和利用人员的数量一直在增加。

那么,如果我们想了解 banner.nse?这个脚本看起来很有趣,我们可以根据名称做出假设,但最好通过键入以下内容查看作者提供的描述:

# nmap --script-help "banner.nse" 

这将导致以下输出:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 23:50 EDT
banner
Categories: discovery safe
http://nmap.org/nsedoc/scripts/banner.html
A simple banner grabber which connects to an open TCP port and prints out anything sent by the listening service within five seconds.
The banner will be truncated to fit into a single line, but an extra line may be printed for every increase in the level of verbosity requested on the command line.

因此,在这种情况下,我们的假设很可能是正确的。我们不仅了解到, banner.nse文件用于连接打开的 TCP 端口以获取横幅,而且还了解到它被认为属于 discoverysafe类别,这两个类别都是在使用命令行中的脚本选项时可以调用的类别。您也可以访问http://nmap.org/nsedoc/ 便于获取脚本信息。

我们还没有 banner.nse可以在我们的实验室工作的任何东西,但是让我们继续运行由简单 -sC选项启动的 50 多个脚本。如果您尚未查看 Nmap NSE 网站以了解这些脚本,您可能希望快速访问它,以确保在生产网络上尝试之前完全理解正在启动的脚本。

虚拟实验室中的 Ubuntu 机器已经更新,为这个例子提供了有趣的服务。您的输出很可能会有所不同。

查看以下命令生成的输出:

# nmap -Pn -sC 192.168.50.11 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-30 00:19 EDT
Nmap scan report for 192.168.50.11
Host is up (0.00090s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
|_ftp-bounce: no banner
79/tcp open finger
| finger:
| Debian GNU/Linux Copyright (c) 1993-1999 Software in the Public Interest
|
| Your site has been rejected for some reason.
|
| This may be caused by a missing RFC 1413 identd on your site.
|
| Contact your and/or our system administrator.
|_
80/tcp open http
|_http-title: Site doesn't have a title (text/html).
110/tcp open pop3
|_pop3-capabilities: capa APOP
443/tcp open https
|_http-title: eBox Platform
|_http-methods: No Allow or Public header in OPTIONS response (status code 403)
|_sslv2: server still supports SSLv2
Nmap done: 1 IP address (1 host up) scanned in 18.39 seconds

-sC选项为我们提供了许多其他扫描类型无法提供的细节。这是一个相关的成本。您刚才看到运行的许多脚本在网络和/或正在运行它们的主机上非常明显。看看前面的输出,我们现在可以看到,不仅在 port 110pop3打开,而且它还具有 capaAPOP功能。我们现在还知道,该系统将支持到 SSLv2的连接,这是一个已知的易受攻击的协议,我们可以利用它来发挥我们的优势。

向数据库添加新脚本

所有这些预加载的脚本都很好,但是如果你想在你的武库中添加其他脚本,或者是因为你自己编写的脚本,或者是因为你信任的人向你提供了他们利用的最新和最伟大的东西,你想在执行渗透测试时利用这些脚本呢?这可能非常简单!

  1. script .nse文件添加到其他 Nmap NSE 脚本所在的目录中。

  2. 运行以下命令更新通过类别绑定脚本的数据库:

    # nmap -script-updatedb 
    
    
  3. 现在,您可以通过 nmap --script "scriptname.nse或使用脚本关联的分类分组来使用新脚本。

SNMP:等待发现的信息金矿

**简单网络管理协议(SNMP)**通常由繁忙的管理员和利用人员管理不当。通常,您会看到默认的社区字符串,或者在您测试的整个组织中重用的社区字符串。您需要确保您的客户机使用的是最安全的 SNMP 版本,并且您不能简单地走进大楼,拔掉电话插头,嗅探社区字符串。较新版本的 SNMP 包含强加密以避免此类缺陷。

SNMPEnum

幸运的是,有许多工具可以使 SNMP 测试变得简单。我们将首先使用 SNMPEnum,这是一个 Perl 脚本,可以在 /pentest/enumeration/snmp/snmpenum目录的 BackTrack 5 R1 中找到。

如果你想跟随这些例子,你可以跳过前面的几章,跟随 pfSense 安装和配置演练,或者 Ubuntu 机器可以设置为使用 SNMP。可按如下方式进行:

对于本例,已设置防火墙虚拟设备,并已使用非常弱的社区字符串“public”启用 SNMP。

在这里,我们将使用 snmpenum.pl显示它将向渗透测试仪披露的信息类型。

# ./snmpenum.pl 192.168.121.252 public linux.txt > myFW.txt 

此命令调用 snmpenum.plPerl 脚本,并传递目标 IP 192.168.121.252和所选社区字符串 public. linux.txt,该字符串位于给定导入文件中 snmpenum工具的工作目录中。我们已经指定将输出放在 myFW.txt中,因为成功连接到 SNMP 守护进程会提供大量信息。以下是我们刚刚学到的一些更有趣的部分:

----------------------------------------
LISTENING UDP PORTS
----------------------------------------
0
53
67
161
514
57613
----------------------------------------
LISTENING TCP PORTS
----------------------------------------
53
80

哇!我们只需向运行在该路由器/防火墙上的 SNMP 守护进程发送一个简单请求,即可获得该设备的所有开放端口。在这种情况下,我们可以跳过尝试运行 Nmap(这是一个遗憾,因为我们在本章中已经了解了很多关于 Nmap 的内容!),只需开始我们的横幅抓取练习。然而, myFW.txt文件中还有更多内容:

----------------------------------------
SYSTEM INFO
----------------------------------------
pfSense.localdomain 744728609 FreeBSD 8.1-RELEASE-p4

现在我们也知道了这台机器的确切名称,它的用途(快速查看 google.com将告诉您有关 pfSense 的所有信息)以及我们正在处理的操作系统和版本。

我们还可以从运行的 SNMP 扫描中获得什么?

----------------------------------------
RUNNING PROCESSES
----------------------------------------
kernel
init
g_event
g_up
g_down
crypto
crypto returns
sctp_iterator
pfpurge
xpt_thrd
audit
idle
intr
ng_queue
yarrow
pagedaemon
vmdaemon
pagezero
idlepoll
bufdaemon
vnlru
syncer
softdepflush
md0
check_reload_status
check_reload_status
devd
login
sshlockout_pf
sh
sh
syslogd
tcpdump
logger
php
inetd
lighttpd
sleep
php
php
php
php
dhcpd
php
dnsmasq
bsnmpd
ntpd
ntpd
sh
cron
minicron
minicron
minicron
kernel

如果在测试过程中存在可以利用的缺陷,那么此时您就拥有了所需的一切。我鼓励您访问制造商的网站,熟悉您可以通过 SNMP 获得的信息类型。如果使用得当,它可能对一个组织极为有益;但是,如果配置不正确,SNMP 可能会失败。

SNMPCheck

回溯中包含的另一个伟大工具是 snmpcheck,由 Matteo Cantoni 从 Nothink.org提供。这个 Perl 脚本允许您枚举 SNMP 设备,并将输出以非常人性化的可读友好格式放置。

# ./pentest/enumeration/snmp/snmpcheck/snmpcheck-1.8.pl -t 192.168.75.1 

此命令假定设备将响应 public社区字符串,但您可以通过添加 -c开关轻松更改要使用的字符串。成功扫描后,输出将类似于以下内容:

snmpcheck.pl v1.8 - SNMP enumerator
Copyright (c) 2005-2011 by Matteo Cantoni (www.nothink.org)
[*] Try to connect to 192.168.75.2
[*] Connected to 192.168.75.2
[*] Starting enumeration at 2011-10-30 04:03:57
[*] System information
-------------------------------------------------------------
Hostname : pfSense.localdomain
Description : pfSense.localdomain 744728609 FreeBSD 8.1-RELEASE-p4
Uptime system : 11 hours, 02:32.69
Uptime SNMP daemon : 46 minutes, 47.88
Contact : Lee Allen
Location : USA
Motd : -
[*] Devices information
-------------------------------------------------------------
Id Type Status Description
1 Other Running nexus0:
10 Other Running isab0: PCI-ISA bridge
11 Other Running isa0: ISA bus
12 Other Running orm0: ISA Option ROMs
13 Other Running pmtimer0:
14 Other Running sc0: System console
15 Other Running vga0: Generic ISA VGA
18 Other Down ppc0: Parallel port
19 Other Down uart0: ns8250
[*] Storage information
-------------------------------------------------------------
Real Memory Metrics
Device id : 1
Device type : Ram
Filesystem type : BerkeleyFFS
…
[*] Software components
-------------------------------------------------------------
1\. FreeBSD: FreeBSD 8.1-RELEASE-p4 #0: Tue Sep 13 16:58:57 EDT 2011
2\. bsdinstaller-2.0.2011.0913
3\. gettext-0.18.1.1
4\. grub-0.97_4
[*] Mountpoints
-------------------------------------------------------------
Swap:/dev/ad0s1b
/, type: ufs, dev: /dev/ad0s1a
/dev, type: devfs, dev: devfs
/var/run, type: ufs, dev: /dev/md0
/var/dhcpd/dev, type: devfs, dev: devfs
[*] Enumerated 192.168.75.2 in 3.70 seconds

前面的输出已经大大缩短,但是我们在这里提供的内容应该可以让您了解该工具提供给渗透测试人员的数据类型。

snmpcheck已移植到 Metasploit,可直接在该框架内使用。

当 SNMP 社区字符串不是“公共”时

您很可能找不到许多默认设置的社区字符串。这时,你必须深入研究你的工具集并赚取报酬。有许多实用程序可以帮助执行诸如强制使用 SNMP 社区名称之类的操作。我最喜欢的一个名字叫 onesixtyone。该扫描仪速度快、效率高,可以并行发送请求以加快速度。

提示

测试时请记住以下几点:仅仅因为一个工具对大多数任务都很有用,并不意味着它对所有任务都有用。有可能你必须回到你的工具箱,尝试一些不同的东西。您对工具的功能了解得越多,测试成功的可能性就越大。例如,onesixtyone 在发出 SNMP 请求时正在查找特定值。我的虚拟实验室中使用的防火墙可能不使用此值,因此,该工具不可见此值。在看到我们在前一节中获得的丰富知识后,仅仅因为我们手头的任务只使用了一种工具而错过了这些信息不是很可怕吗?

onesixtyone 的命令语法非常简单:

# ./onesixtyone -c dict.txt 192.168.50.10 

其中,我们有一个 SixtyOne,使用提供的 dict.txt文件检查 192.168.50.10,这会在我的虚拟网络上产生以下结果:

Scanning 1 hosts, 49 communities
192.168.50.10 [public] Linux Phobos 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:39:17 UTC 2011 x86_64

查看这些结果,我们注意到我们扫描的主机使用的是 Ubuntu Linux 操作系统,并且具有以前未知的公共社区字符串。让我们在主机上对此进行更改,并查看使用相同命令时的情况:

Scanning 1 hosts, 50 communities

正如所料,由于我们的列表中不再有社区名称,我们无法找到它。我们可以创建自己的 dict.txt文件,或者添加到已经提供给我们的文件中。

在处理字典文件时,最好有几个可用文件来满足特定的需要。最好至少有三个可用于 SNMP 目的。一个具有许多默认值,另一个具有人们用于社区名称的常用名称,最后是一个具有许多名称的大文件,这些名称可以根据公司名称、用户名等定制给您的客户。

使用 scanPBNJ 创建网络基线

在进行渗透测试时,了解在一段时间内何时发生变化以及发生了什么变化是很重要的。管理员通常工作过度,在您进行测试时可能仍然需要完成工作。确保你不是在一个不断变化的领域中比赛的一种方法是抓住你正在测试的网络的基线。PBNJ 非常有能力完成这项任务。scanPBNJ 的网站位于http://pbnj.sourceforge.net 该工具也可作为回溯 5 R1 发行版的一部分提供。关于 scanPBNJ的关键注意事项是,它使用 Nmap 扫描网络,然后将结果与扫描时间戳一起存储在数据库中。

为 PBNJ 设置 MySQL

BackTrack 预装了 MySQL。我们将利用这一点,让 PBNJ 将我们的扫描结果存储到一个 MySQL 数据库中,以便进行准备。

启动 MySQL

在命令行中键入以下内容:

# service mysql start 

应该启动服务。您也可以用同样的方式使用 service stopservice restart

准备 PBNJ 数据库

使用以下步骤准备 PBNJ 数据库:

# mysql -uroot -ptoor 

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE BTpbnj; 

Query OK, 1 row affected (0.02 sec)

mysql> CREATE USER 'tester'@'localhost' IDENTIFIED BY 'password'; 

Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON BTpbnj.* TO 'tester'@'localhost'; 

Query OK, 0 rows affected (0.01 sec)

mysql> exit 

我们已经创建了一个名为 BTpbnj的数据库,添加了一个名为 tester的用户,密码为 password,授予该用户对数据库的完全访问权限,并退出了数据库。

现在我们需要编辑 PBNJ 配置文件以使用新创建的数据库。在根目录下创建一个名为 .pbnj-2.0/(mkdir -p .pbnj-2.0)的目录,然后切换到该隐藏目录。执行以下命令将您的 mysql.yaml配置文件复制到 config.yaml:

root@bt:~/.pbnj-2.0# cp /usr/share/doc/pbnj/examples/mysql.yaml config.yaml 

复制文件后,我们需要使用 nano 编辑多个项目:

# nano config.yaml 

# Configuration file for PBNJ 2.0
# YAML:1.0
#
# Config for connecting to a DBI database
# SQLite, mysql etc
db: mysql 
# for SQLite the name of the file. For mysql the name of the database
database: BTpbnj 
# Username for the database. For SQLite no username is needed.
user: "tester" 
# Password for the database. For SQLite no password is needed.
passwd: "password" 
# Password for the database. For SQLite no host is needed.
host: "127.0.0.1" 
# Port for the database. For SQLite no port is needed.
port: "3306" 

config.yaml中突出显示的以下字段需要更改为以下匹配项:

  • 数据库:mysql
  • 数据库:BTpbnj
  • 用户:测试仪
  • 密码:密码
  • 主持人:127.0.0.1
  • 端口:3306

先用CTRL+O保存您的工作,然后进入,然后CTRL+X退出 nano。

第一次扫描

这里我们扫描 192.168.75.0/24:

# /usr/local/bin/scanpbnj -a "-p- -T4" 192.168.75.0/24 

此命令启动 scanpbnj并使用 -a标志使用现在熟悉的 Nmap 标志之一。在本例中,我们以 192.168.75.0/24网络为目标。

如果以下内容与示例一起使用实验室或网络的 IP 范围替换 192.168.75.0/24

扫描完成后,您将看到屏幕上出现以下输出:

--------------------------------------
Starting Scan of 192.168.75.2
Inserting Machine
Inserting Service on 53:tcp domain
Inserting Service on 80:tcp http
Scan Complete for 192.168.75.2
--------------------------------------

就这些。我们现在有了一个数据库中的 192.168.75.0/24网络记录,可以供我们审查。

默认扫描设置将在前 1025 个端口(不包括很少使用的端口 0)上执行 Nmap 非常详细的操作系统检测 SYN scan。

查阅资料

信息现在在数据库中,但我们如何才能查看它?好吧,因为我们已经决定使用 MySQL,我们可以依靠我们以前的 MySQL 知识来执行我们喜欢的任何类型的查询!以下是一些例子:

登录数据库并告知其使用 BTpbnj数据库:

# mysql -utester -ppassword 

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use BTpbnj; 

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

登录后,让我们尝试一些查询:

mysql> show tables; 

+------------------+
| Tables_in_BTpbnj |
+------------------+
| machines |
| services |
+------------------+
2 rows in set (0.00 sec)

MySQL BTpbnj数据库中有两个表。

mysql> describe machines; 

+-----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| mid | int(11) | NO | PRI | NULL | |
| ip | text | YES | | NULL | |
| host | text | YES | | NULL | |
| localh | int(11) | YES | | NULL | |
| os | text | YES | | NULL | |
| machine_created | text | YES | | NULL | |
| created_on | text | YES | | NULL | |
+-----------------+---------+------+-----+---------+-------+
7 rows in set (0.01 sec)

现在我们有了一些字段,可以作为下一个查询的基础。注意 created_onmachine_created字段。这些时间戳在执行基线时非常方便。

mysql> select ip,os,created_on from machines where ip = "192.168.75.2"; 

+--------------+------------+--------------------------+
| ip | os | created_on |
+--------------+------------+--------------------------+
| 192.168.75.2 | unknown os | Sun Oct 30 10:57:39 2011 |
+--------------+------------+--------------------------+
1 row in set (0.00 sec)

我们已经从数据库中选择了 ip,oscreated_on字段。现在让我们来看一些更有趣的信息。

mysql> describe services; 

+-----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| mid | int(11) | YES | | NULL | |
| service | text | YES | | NULL | |
| state | text | YES | | NULL | |
| port | int(11) | YES | | NULL | |
| protocol | text | YES | | NULL | |
| version | text | YES | | NULL | |
| banner | text | YES | | NULL | |
| machine_updated | text | YES | | NULL | |
| updated_on | text | YES | | NULL | |
+-----------------+---------+------+-----+---------+-------+
9 rows in set (0.00 sec)

查看这些信息,我们可以看到,我们现在不仅能够为一台主机,而且能够同时为所有主机提取查询。此外,该数据库的输出可以是 XML 格式,然后传输到我们用于跟踪渗透测试结果的任何工具。

提示

可以从命令行运行 MySQL 命令,以便将输出导出为您选择的格式。调用 MySQL 命令时,使用 -X-H开关保存到各个文件类型。大多数渗透测试人员都需要很好地理解 MySQL 命令语法才能完全有效。

让我们看看在我们的简单扫描中收集了什么类型的数据:

mysql> select * from services; 

+------+---------+-------+------+----------+-----------------|
| mid | service | state | port | protocol | version | banner | machine_updated | updated_on |
+------+---------+-------+------+----------+-----------------+
| 42 | domain | up | 53 | tcp | unknown version | unknown product | 1319986659 | Sun Oct 30 10:57:39 2011 |
| 42 | http | up | 80 | tcp | unknown version | unknown product | 1319986659 | Sun Oct 30 10:57:39 2011 |
+------+---------+-------+------+----------+-----------------+

使用数据库存储您的发现是非常有效的,强烈建议使用。扫描虚拟实验室,测试提取数据的一些不同方法。通过明智地使用这些数据,可以快速确定网络环境、标准软件版本和其他信息,这些信息对于确定渗透测试下一阶段应关注的目标至关重要。

枚举避免技术

如本章内容所示,攻击者可以通过使用免费提供的工具和技术获得大量关键的基础架构信息。作为渗透测试人员,我们不能只关注网络攻击,我们还必须充分了解缓解控制措施,以便能够向客户提供建议和指导。公司可以使用多种方法,使攻击者更难获得对客户资产进行秘密、成功攻击所需的信息。

命名约定

应鼓励管理员使用不会泄露设备信息的命名方案。例如,如果要使用 Nmap Fu 或 DNS Fu 提取主机名,并发现机器的标签如下:

  • dns1.example.com
  • mail.example.com
  • domainserver
  • devserver
  • administratorspivotpoint
  • rogueWAP

这将立即让您了解您希望首先瞄准哪些系统。更好的命名方法可以是一些标记化,比如 ST1=DNS 服务器,或者所有利用服务器都有 71 个作为名称的一部分。这将使入侵者更难理解,同时允许有效的管理员快速识别资产。

港口爆震

通常,管理员可以选择使用端口敲门来避免端口枚举尝试。这个概念可以很简单,比如要求某人在连接到有效的管理端口(如 SSH)之前先连接到一个秘密端口。

端口敲打的一个更高级的用法是设置一个 telnet 服务器,并让基于主机的防火墙触发规则,一旦 IP 触及 telnet 端口,就暂时阻止它连接到系统上的任何端口。

入侵检测与防范系统

尽管这些并不能提供供应商经常声称的完美安全性,但正确配置的入侵检测系统(基于主机或基于网络)可以在检测枚举尝试方面起到很大的作用。这些设备应作为公司纵深防御战略的一部分使用,并应进行适当的管理、监控和更新,以便为相关公司的安全态势提供最大的好处。

触发点

战略部署的系统在访问时发出警报,可以用作预警系统,类似于在物理安全中使用周界运动检测器。管理员可以在网段上设置一个系统,该系统在进行不正当连接尝试时自动发送警报或启动某些操作。

管理员应避免试图通过在此系统上打开尽可能多的端口来“增加交易”,因为这可能会泄露系统的用途。需要注意的一点是,如果在环境中使用此类系统,则必须以与网络上其他系统相同的勤勉程度对其进行维护。在您的网络上有一个未修补的系统肯定会成为攻击者的诱人目标;然而,给上述攻击者一个在您的网络中获得立足点的快速方法并不是一个好主意。一旦建立了一个轴心点,攻击者的工作就容易多了,到您可以响应触发点警报时,攻击者可能已经在其他系统上设置了进入您网络的后门。

SNMP 锁定

确保管理员以安全的方式使用 SNMP。如前所述,SNMP 可用于获取丰富的知识,在攻击者手中,这将基本上成为最终游戏。SNMP 应该使用最新的安全机制,如加密。如果您已检查 SNMP 是否安全,请使用最新版本的 SNMP。它还应该被锁定,并限制为只能由某些主机访问。最重要的是,公共社区应该被移除。

有时,由于各种原因,您的客户端可能无法使用最新版本的 SNMP。在这些情况下,尝试尽可能地保护协议。例如,您可以建议他们将 SNMP 锁定到特定主机。

总结

此时,我们讨论了枚举网络所需的几种方法。我们已经创建了一台额外的机器来添加到我们的虚拟实验室中,以便我们能够测试这些方法,并获得在实时网络上执行这些操作所需的经验。

您应该对可用的工具和技术有很好的了解,例如用于 SNMP 暴力强制的 onesixtyone,或用于网络扫描的 Nmap。借助 PBNJ 数据的强大功能,我们确定以 MySQL 格式获取网络基线非常简单,然后使用该数据为下一阶段的渗透测试快速选择正确的目标。

在下一章中,我们将深入探讨剥削问题。将介绍您使用 Metasploit、破解密码和手动利用远程漏洞从 Web 编译或重写概念验证(POC)漏洞代码。