Skip to content

Latest commit

 

History

History
94 lines (50 loc) · 11.7 KB

File metadata and controls

94 lines (50 loc) · 11.7 KB

三、Nmap 基础知识

现在我们了解了网络的工作原理,是时候开始实际使用 Nmap 扫描计算机和网络了。本章旨在涵盖几个主题,这些主题将帮助您实际浏览其中一些内容。

在本章中,我们将介绍:

  • 如何选择目标
  • 如何运行默认扫描
  • 如何检查服务版本
  • 如何记录扫描(以及不同日志类型的含义)
  • 如何指定特殊扫描范围
  • 如何学习 Nmap 结果的推理

如何选择目标

虽然人们普遍认为在互联网上扫描计算机不是犯罪行为,但系统管理员也不理解这一点。在互联网的各个领域,每秒都有数千次扫描,但这并不意味着如果扫描错误的机器,你就不会收到虐待投诉(或更糟)。确保您选择的任何目标都知道(并同意)您可能决定进行的任何扫描。有几种方法可以让你自己设定目标,有些读者可能会发现这比在网上使用免费目标更容易。

最简单的目标,也是最容易设置的目标,就是只使用局域网上的另一台计算机。您可以使用您的路由器(家庭路由器通常位于 192.168.1.1),网络上的另一台机器(我们将讨论查找),甚至可以购买便宜的笔记本电脑作为测试实验室。

如果您无法访问另一台机器进行扫描,或者您对扫描另一台机器感到不舒服(或无权),您可以通过虚拟化一台机器来创建自己的机器。尽管您需要对 Linux 的安装有所了解,才能实现这一点,但有免费软件解决方案(如 VirtualBox)和商业软件解决方案(如 VMWare 或 Parallels)可以为您虚拟化机器。如果你决定通过这条路线来扫描本书中的目标,我建议你安装 Ubuntu 或 Debian,你也可以从这些机器上扫描!除了创建自己的虚拟服务器,还可以从云主机提供商处购买虚拟专用服务器VPS,而无需花费大量资金。常见的提供商包括 Linode、DigitalOcean(在撰写本文时,其 VPSE 每月仅为 5 美元)、亚马逊网络服务AWS)、Rackspace 等。运行这些基于云的服务器的优势在于,您还可以获得运行成熟 Linux 服务器的经验。如果您愿意,您甚至可以在此服务器上托管 web、电子邮件、FTP 或任何其他服务!

最后,如果您不想拥有自己的虚拟机,网络上没有任何其他机器,也不想为虚拟专用服务器付费;您可以扫描自己的机器(这不是很令人兴奋),也可以使用 Nmap 团队在提供的免费服务 http://scanme.nmap.org/

本网站授予您扫描的完全权限,因此您不必担心对任何网络管理员无礼或烦人。另一方面,实际上不可能更改此主机上侦听的任何服务,因此您永远无法真正更改所获得的结果。使用您自己的计算机(“localhost”或 127.0.0.1)有时可能是更好的选择,因为您可以运行服务并看到检测到的不同端口。

为了扫描本书中的示例,我们将使用http://scanme.nmap.org/ 以及为明确扫描目的而设置的各种附加虚拟机。请记住:未经允许请勿扫描!

运行默认扫描

一旦安装了 Nmap 并选择了目标,使用默认设置运行扫描就相对简单了。命令与nmap scanme.nmap.org一样简单(假设为http://scanme.nmap.org/ 是此特定扫描的目标)。

Running a default scan

正如在前面的屏幕截图中所示,运行默认扫描非常容易。通常,Nmap 使用 SYN 扫描作为默认扫描类型;但由于我们没有通过sudo以 root 权限运行扫描,Nmap 将改为“连接”扫描。我们将在第 4 章高级 Nmap 扫描中讨论特定扫描类型的差异。

现在,您可以看到我们已经检测到三个开放服务。最左边的一列显示端口号和协议(在本例中为22/tcp80/tcp9929/tcp),表明端口已打开,以及服务是什么。当我们运行 Nmap 时,没有指定任何附加内容(例如刚才运行的扫描),SERVICE列是根据/etc/services(Linux 上)中的端口规范填写的,而不是实际分析协议。如果我们想要检查实际的服务版本(通过检查横幅),我们需要指定不同类型的扫描:服务版本扫描。

服务版本扫描

运行服务版本扫描非常简单;我们需要做的就是添加一个额外的标志,-sV。这意味着我们正在进行服务版本扫描,可以显示每个软件正在运行的版本。如果有人在非默认端口(与/etc/services不匹配)上运行服务,这一点尤其有用——在这种情况下,能够准确地知道运行的是什么更为重要。

Service version scans

当我们运行此后续扫描时,您将看到结果略有不同:

您可以在前面的屏幕截图中看到,更多的信息现在被输入到扫描结果中;在本例中,我们可以看到OpenSSHHTTPNping echo服务的实际补丁版本。

在安全评估的上下文中,您可以看到这是多么有用!如果您正在查找某些软件版本中的漏洞,那么能够准确地知道运行的是哪个版本是至关重要的。漏洞通常只存在于特定版本的软件中(如 1.0.1 和 1.0.4 之间),因此我们在这里看到的内容的粒度非常重要。但是,需要注意的是,如果系统管理员限制服务版本,则无法准确地判断正在运行的是什么。从防守的角度来看,这是非常重要的!

您可能还注意到,在扫描的顶部,在结果之前,会显示文本Not shown: 997 filtered ports。Nmap 不会在扫描中显示所有关闭的端口,因为这会使扫描结果本身变得混乱。通过增加扫描的详细程度(我们将在第 4 章高级 Nmap 扫描中看到),可以看到这些(以及它们是否被列为关闭或过滤)。但是,更重要的是,您应该记住,每台机器上都有 65535 个端口可以打开或关闭。如果我们在已经打开的三个端口中添加 997 个,我们只会得到 1000 个,这只是端口总数的一小部分!

默认情况下,Nmap 只扫描通常打开的前 1000 个端口。这并不对应于前 1000 个端口,而是最常打开的端口。您可以通过使用--top-ports 1000标志或指定不同的数字(例如--top-ports 200)获得相同的结果。

日志扫描

虽然在短期内逐案查看扫描结果非常有帮助;对于更长的评估时间(或者对于屏幕上滚动的较大扫描),最好将扫描记录到文件中。

Nmap 支持三种不同类型的日志记录。每种类型都有不同的标志来记录特定的日志类型和不同的用途。幸运的是,Nmap 开发团队足够聪明,能够超前思考;使用-oA(全部输出)标志,可以输出所有三个日志文件。该标志的第二个参数只是日志的基本名称。它们将自动拥有自己唯一的文件扩展名。

Logging scans

正如您在前面的屏幕截图中所看到的,Nmap 自动保存所有三个日志文件扩展名(.xml.nmap.gnmap,并使用-oA标志中指定的基本文件名。

正如您所见,在使用-oA logbase标志运行扫描后,当前目录中现在有三个文件。我们现在有一个.xml文件,其中包含 XML 格式的扫描结果(以及时间细节),还有一个.nmap文件,它是人类可读的扫描输出。换言之,基本上与运行扫描时在屏幕上看到的输出相同,也许最有趣的是,还有一个.gnmap文件。.gnmap文件代表支持 grep 的 nmap输出,该文件的设计便于 Linux 命令行工具grep使用。换句话说,它很容易搜索。

Logging scans

在前面的示例中,您可以很容易地看到,当 greping 为“open”时,我们得到了具有打开端口的.gnmap文件的行。因为我们只扫描了一台主机,所以返回的主机必须是我们扫描的主机-scanme.nmap.org -但是在更大的扫描中,找出哪些主机有任何打开的端口(并且我们可以安全地忽略这些端口)是非常有用的。

其次,我们为443/open做了grep。此grep没有返回任何内容(因为端口443在此扫描中未打开),但您可以看到,使用类似这样的可升级输出可以快速有效地确定哪些主机具有某些联机端口。当我们谈论通过 Nmap 进行主动攻击时,我们将能够更好地理解像这样的信息有多重要。

指定的扫描范围

我们在前面了解到默认情况下,Nmap 只扫描前 1000 个端口。但是,服务可以在 65535 个端口中的任何一个(而不仅仅是最常见的端口)上线。许多系统管理员和网络工程师在非常高的端口(如 65001)上运行服务,因此正常扫描无法检测到这些端口。然而,通过默默无闻实现的安全从未真正起作用!

可以使用-p标志指定特定的端口范围。因此,如果您只想扫描scanme.nmap.org上的80端口,您可以键入nmap -p 80 scanme.nmap.org。端口规范标志也适用于范围,因此在另一个示例中,nmap -p1-1024 scanme.nmap.org将扫描目标主机上的端口11024(所有特权端口)。

扫描机器上所有 65535 个端口还有一个有用的技巧:不必键入-p1-65535,只需使用快捷方式-p-。Nmap 开发人员很善良,也很有见地,他们意识到经常输入数字“65535”会让人很累!

尽管我们目前只扫描一台主机,但值得注意的是,有几种方法可以指定多个 IP 地址或主机名。CIDR 符号(192.168.1.0/24)、IP 地址列表(1.2.3.4,1.2.3.5,1.2.3.6)和目标文件(-iL targets.txt)都是指定要扫描的主机的有效方法。它们都将以相同的扫描类型进行扫描,所涉及的时间由 Nmap 本身进行优化。我们将在第 5 章性能优化中详细介绍此流程的优化。

理解原因标志

由于已经在第 2 章网络基础中介绍了包括 TCP 三方握手在内的基本网络,您已经知道端口为open意味着什么,以及通常如何确定。但是,在某些边缘情况下(尤其是对于filtered端口),理解打开、关闭和过滤端口背后的 Nmap 逻辑非常有助于理解。

您可以使用--reason标志确定 Nmap 是如何得出结论的。

Understanding the reason flag

如前面的屏幕截图所示,在调用--reason标志后,第四列现在添加到扫描中。在这种情况下,我们可以清楚地看到,被标识为在线的三个服务是因为 syn ack 而这样做的,一旦我们看到给定端口上的服务试图完成 TCP 三方握手,就表示对syn请求的syn/ack响应,我们知道有人在倾听。

总结

阅读本章后,您应该能够进行多种不同且有趣的扫描。您还应该知道如何更改正在扫描的端口以及如何一次扫描多个主机。您已经了解到,抓取服务横幅可以帮助您查看正在运行的软件版本,以及如何输出各种不同类型的日志文件。最后,您现在应该能够理解为什么 Nmap 以某些方式标记结果的基于网络的原因。要成为一名真正的 Nmap 大师还有很长的路要走,但是你已经征服了扫描的基础。在下一章中,我们将学习如何进行高级 Nmap 扫描,以便在更复杂的情况下获得结果。下一章将允许您在陌生或敌对的环境中进行扫描,这些环境是安全专业人员在交战过程中经常遇到的。