您现在应该完全能够对各种主机运行 Nmap 扫描。太好了!了解如何运行基本扫描将帮助您克服许多情况,但有几个显著的例外和不同的扫描类型对于成为超级用户至关重要。
我们现在将专门介绍主机检测的不同方法(以便您知道扫描什么)、如何对试图隐藏自己的设备运行扫描、扫描 UDP、不同的详细选项,等等。
在本章中,我们将介绍:
- 进行平扫
- 运行 ping 不可知扫描
- 扫描 UDP 服务
- 在诸如 Xmas 树扫描之类的扫描上运行不同的 TCP 标志
- 操作系统检测
- 增加 Nmap 输出中的详细信息
- 在扫描中显示数据包跟踪
为了有效地扫描主机,首先了解如何检测“活动”或在线的主机非常重要。由于许多系统管理员试图在互联网上隐藏他们的系统,因此某些主机在被进一步探测之前似乎处于脱机状态。幸运的是,Nmap 有几种方法可以检测哪些主机在线。
检测主机最直接的方法是运行 ping 扫描。机器设计用来响应的 ping 或 ICMP 回送请求是一个简单的“你在吗?”问答对话。
Ping 是以声纳命名的。声纳是潜艇用来探测该地区其他船只和潜水器的水下“Ping”,其工作方式与计算机类似。虽然您只需键入ping google.com
,就可以非常轻松地测试 ping 命令,但使用 Nmap 进行 ping 扫描可以在更大的目标网络范围内获得显著的效率提升。
使用-sn
标志很容易使用 Nmap 运行ping only
扫描。这样可以确保只运行 ping 扫描,而不是完全端口扫描,这对于找出哪些主机处于联机状态非常有用。
在前面的屏幕截图(作为-sn
(ping-sweep)扫描运行)中,您可以清楚地看到,在扫描的 256 个 IP 地址中,有 18 个“向上”,或响应 ping。
然而,有时您需要进一步采用这种扫描方法。为了“隐藏”扫描,系统管理员通常会让他们的系统忽略 ping 请求。这通常是隐藏网络扫描的有效方法!
当一个系统对 ping 扫描隐藏时,很难知道什么是在线的。幸运的是,Nmap 提供了一种与 ping 无关的扫描方法,这对解决其中一些问题非常有益。
当 Nmap 运行“正常”扫描时,它将首先运行 ping 扫描,然后进行实际端口扫描(指定的任何端口范围)。如果主机没有响应 ping,它们将不会被完全扫描,这意味着即使它们有在线服务,也不会检测到这些服务。运行端口扫描时,丢失服务或主机是一个非常严重的问题!
通过使用-Pn
标志运行扫描,Nmap 将完全跳过运行初始 ping 扫描,并将扫描指定目标范围内的所有主机。虽然这通常需要更长的时间来运行,因为扫描真正脱机的主机是一种巨大的时间浪费,但查找可能丢失的主机非常有用。
在前面的屏幕截图中,您可以很容易地看到dshaw.net
-我的个人网页(出于本次扫描的目的,该网页被配置为不响应 ping)仍在本次 ping 不可知扫描中被扫描。在扫描大范围(如 B 类网络)时,能够检测到试图脱机显示的主机对安全专业人员来说是非常宝贵的。
虽然它不是一种特定类型的扫描,但使用 Nmap 的-sL
标志或执行简单列表扫描的功能来 ping 或扫描目标范围也很有用。这对于获取反向 DNS 查找以及了解指定范围内有多少主机处于联机状态非常有用。
通过扫描,或者更确切地说,不以这种方式扫描,可以获得极好的结果。
在前面的屏幕截图中,您可以看到 Nmap“列表扫描”范围指向1e100.net
域,这些域归谷歌所有。这被称为零包侦察,因为实际上没有向任何相关域发送探测,但实现了完整的 DNS PTR 记录查找。
帮助主机检测和发现的最后一个伟大的 Nmap 功能是 TCP SYN ping 扫描。如果主机在给定端口响应 SYN 请求,则 TCP SYN 扫描可以在线处理主机,而不是发送 ICMP ping 请求(许多管理员禁用响应)。例如,如果您正在扫描通常运行 SSL web 服务器的 IP 地址块,如果有响应尝试在端口 443 上连接,则调用-PS 443
标志将联机处理主机。这非常有用,并且是 Nmap 主机检测库中最有价值的功能之一。
到目前为止,我们已经提到了 UDP 服务,但还没有讨论如何实际扫描它们。UDP 服务是无连接的,这使得扫描它们比传统端口扫描更困难有时连接需要基于协议才能接收任何响应,即使大多数服务接收到实际响应,也可能需要花费大量时间,换句话说,扫描 UDP 服务通常比它们的 TCP 对等服务更慢、更不可靠。
尽管如此,能够扫描仅在 UDP 上侦听的服务是非常重要的。例如,许多 VPN 的侦听端口仅为 UDP。类似地,NTP 和 DNS 通常只在 UDP 端口上侦听。因此,了解如何扫描它们很重要。
这里需要注意的是,通常最好只使用 TCP 进行第一轮扫描,使用 UDP 进行第二轮扫描。这一点很重要,因为强制整个扫描等待 UDP 响应可能会使本应为五分钟的扫描花费五个多小时!
扫描 UDP 服务的标志是简单地调用-sU
。当你有足够的时间等待扫描时,一定要小心操作!
另外,UDP 扫描确实需要 root 权限才能运行。
公共 NTP 服务器tick.ucla.edu
的扫描显示端口123
-网络时间协议(NTP)正在接受来自互联网上任何位置的连接。
我们已经介绍了 Nmap 建议的两种基本扫描类型,即 TCP 连接扫描(-sT
和 SYN 隐形扫描(-sS
。这些“完全”和“半”连接扫描将帮助您通过几乎任何情况,并且绝对是几乎所有安全专业人员、系统管理员、网络工程师和爱好者的“转到”扫描类型。
然而,尽管这些类型的扫描可以产生灵活性,但偶尔还是有理由在数据包上尝试不同的标志。对于这些扫描,我们将介绍三种新的扫描类型:FIN、圣诞树和空扫描。
运行这些扫描背后的驱动概念是,关闭的端口将通过发出 RST(重置)数据包尝试重置连接,而打开的端口将完全断开连接。这是非常有用的,因为许多入侵检测系统(IDS)都在关注 SYN 扫描,而隐形渗透测试人员从不想被抓到!
这三个新选项中的第一个是 FIN 扫描,它首先向每个端口发送一个 FIN 数据包。
正如您在前面的示例扫描中所看到的,在对我自己的 web 服务器运行 FIN 扫描(-sF
时,没有对 FIN 请求的响应,这是有意义的,因为在dshaw.net
的端口 80 上运行着一个活动服务。
下一种扫描类型被称为圣诞树扫描,也就是所谓的圣诞树扫描,因为它就像一个包被点亮一样!Xmas 树扫描(-sX
通过在数据包头上标记 FIN、URG 和 PUSH 标志来工作。
这三种扫描类型中的最后一种是 null 扫描,它在发送到目标端口的数据包头上不设置任何标志。可以使用-sN
选项启动此扫描。确保如果启动空扫描,则大写N
——否则,您将意外运行 ping swing(我们在主机检测方法一节中介绍了这一点)。
尽管这些扫描类型通常非常有用,但值得注意的是,FIN、Xmas 和 NULL 扫描已知对 Microsoft Windows 主机不起作用。
虽然能够扫描端口和使用不同的数据包头以产生最佳、最准确的结果非常有用,但有一些事情是简单的端口扫描无法始终可靠实现的。这些元素中最重要的一个是操作系统检测。
当试图识别和攻击目标时,最有用的信息之一是机器正在运行的操作系统。由于许多软件可以在多个操作系统上运行,这在传统上是一件“很难”的事情。然而,Nmap 的开发人员在整个信息安全社区的帮助下,已经能够编译一个包含最常见(甚至是一些非常罕见的)操作系统指纹的数据库,这可以持续帮助确定目标正在运行的操作系统。这是一个容易记住的标志,您只需调用带有-O
标志的扫描即可。
正如你所看到的,这张思科安全设备的扫描很容易识别出关键信息的几个部分。首先,我们可以看到 MAC 地址以及谁创建了该设备。但是,请记住,正如我们在第 2 章、网络基础中所了解的,我们只能在局域网而不是互联网上扫描 MAC 地址。其次,我们可以看到操作系统 CPE 甚至操作系统的详细信息:一个运行 Linux 2.6 内核的 Cisco SA520 防火墙。这绝对是我们从端口扫描中获得的最有价值的信息之一。
尽管如果操作系统检测总是像本例中那样简单明了,那就太好了,但事实并非如此。不过,好消息是,一旦您开始操作系统扫描,Nmap 将尝试评估它对所给出结果的信心。在下面的示例中,您可以看到虽然 NMAP 还不能完全确定我的机器正在运行什么操作系统(当您考虑补丁频繁地改变底层操作系统的工作方式时,这是有意义的),它仍然可以给我们一个很好的主意!
正如你在整本书中可能已经注意到的,当运行扫描时,更多的信息几乎总是更好的。幸运的是,Nmap 开发人员允许我们在扫描运行时快速轻松地检索有关扫描的信息,方法是增加扫描的详细程度。
“详细性”允许在扫描运行时,定时、并行性和内部调试信息直接显示在控制台上。这可以很好地确定我们何时需要尝试通过以下几种方法之一优化扫描(我们将在下一章中了解)。当以更详细的方式运行扫描时,您还可以点击输入查看扫描进度,以及在完成当前目标文件之前必须完成的距离。有几个不同级别的冗长,但我通常使用第三个级别。
第一级详细信息提供了有关扫描进度的基本信息,可以使用-v
标志调用。第二级详细性提供更多信息,包括一些网络和数据包信息,可以使用-vv
作为标志调用。最后,可以使用-vvv
标志调用三重冗余,它提供了扫描的大部分信息。如果您想使 Nmap 比正常情况下更详细,还可以使用--reduce-verbosity
标志。
您可以在前面的屏幕截图中看到,在这个单端口扫描中,显示了更多的定时和数据包信息。这是非常有用的,尤其是在长时间扫描期间,例如包括 1000 多台主机的扫描,以便更好地了解 Nmap 当时在做什么。更重要的是,此信息可用于确定是否需要进行定时、并行性或其他性能调整。例如,如果扫描正在正常进行,但一次只完成几个主机,我们知道要提高并行性以加快整个扫描。但是,如果我们收到网络超时错误,我们知道在这种情况下扫描速度太快,我们希望使用较慢的timing
标志。
与增加扫描的详细程度类似,了解主机之间发生的网络跳数和查看通过的实际网络流量非常重要。虽然可以使用系统工具,如traceroute和tcpdump来查找网络目标服务器的位置,但同时对多台主机执行此操作可能是一个痛苦(且耗时)的过程。
Nmap 不使用外部工具,而是允许对每次扫描进行数据包跟踪,以显示我们需要的确切信息。与其将其视为一种安全功能(尽管它确实具有与安全相关的用途),不如将其视为系统管理员和网络工程师的工具。
此数据包跟踪示例显示了从 Nmap 到目标机器的 tcpdump 样式输出。虽然它在这个简单的单端口扫描中没有提供过多的价值,但是在更大的扫描中,这些信息对于理解网络拥塞、数据包丢失、脱机主机等等都非常有用。
在本章中,我们介绍了如何选择目标、运行默认扫描、检查服务版本、日志扫描(以及不同日志类型的含义)、指定特殊扫描范围,以及学习 Nmap 结果的推理。
在下一章中,我们将讨论如何确保扫描以最高性能运行。Nmap 有几个功能可以帮助扫描快速运行,并尽可能准确地提供结果。这些时间、并行性和性能改进将在下一章中进行分类和解释。