使用 Nmap 进行网络扫描

NmapBeginner
立即练习

介绍

在本实验中,你将学习如何使用 Nmap。这是一款功能强大的开源网络扫描工具,被安全专业人员广泛使用。Nmap 可以帮助识别网络中的活跃主机、开放端口以及运行的服务,为安全评估提供必要的可见性。

你将获得执行基础 Nmap 扫描、解读扫描结果以及理解不同扫描技术的实践经验。这些技能是网络安全分析的基础,同时我们也强调在获得授权的网络上进行道德扫描实践的重要性。

安装 Nmap

在开始探索网络之前,我们需要为自己配备合适的工具。Nmap(网络映射器)是一个免费且开源的实用程序,可帮助网络管理员和安全专业人员发现网络上的设备并识别可用服务。在这一步中,我们将在你的系统上安装 Nmap。

  1. 首先,让我们打开终端。终端是我们运行所有 Nmap 命令的地方。在像我们实验环境这样的 Linux 系统中,终端是与网络工具交互的主要方式。在你的桌面上,找到并打开 Xfce Terminal。

Xfce Terminal 窗口已打开

注意:免费用户无法连接互联网,因此 Nmap 已预装在实验环境中,你可以直接跳到列表中的第 4 项(检查 Nmap 是否已安装)。升级为 Pro 用户可以练习自行安装 Nmap。

仅限 Pro 用户
  1. 终端打开后,我们需要更新软件包列表。这是重要的第一步,因为它能确保我们的系统了解最新的可用软件版本。输入以下命令并按回车键:
sudo apt-get update

sudo 代表「以超级用户身份执行」(superuser do),它赋予我们管理权限,这在安装软件时通常是必需的。

  1. 现在我们的软件包列表已经是最新的了,让我们安装 Nmap。以下命令将下载并安装 Nmap 及其所有必需的依赖项:
sudo apt-get install nmap -y

-y 标志会自动对任何安装提示确认「是」,这在运行脚本或当你确定要继续执行时非常有用。

  1. 安装完成后,我们应该验证 Nmap 是否已正确安装。检查版本有两个目的:确认安装成功,并告知我们正在使用的版本。输入:
nmap --version

你应该会看到类似以下内容的输出:

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.6 openssl-3.0.2 nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

版本号可能会有所不同,因为 Nmap 会定期更新功能和改进。

恭喜!你现在已经安装好 Nmap 并准备就绪。可以将 Nmap 想象成一个功能强大的手电筒,让你看清网络中正在发生的事情。它可以显示哪些设备已连接、它们正在运行什么服务,甚至它们使用的是什么操作系统。这些功能使 Nmap 成为网络管理和安全测试的必备工具。

如果你想探索 Nmap 的全部功能,可以在终端输入 man nmap 来查看其手册页。这份文档包含了所有高级选项和功能,但不要感到压力——我们将在本实验中从基础开始,循序渐进地构建你的知识体系。

理解 IP 地址

在开始扫描网络之前,理解 IP 地址至关重要。可以将 IP 地址想象成计算机在网络上的家庭住址。就像邮政服务需要你的家庭住址来投递邮件一样,网络上的其他设备也需要你的 IP 地址来与你的计算机通信。

  1. IP 地址是网络上设备的唯一标识符。它通常看起来像是一系列由点分隔的数字,例如 192.168.1.1。这些数字的范围从 0 到 255,每个部分代表网络层级结构的一部分。第一部分标识网络本身,而后面的部分标识特定的设备。
graph LR
    A[互联网] --- B[路由器 192.168.1.1]
    B --- C[电脑 192.168.1.10]
    B --- D[笔记本 192.168.1.11]
    B --- E[智能手机 192.168.1.12]
    B --- F[智能电视 192.168.1.13]
    style A fill:#f9f,stroke:#333,stroke-width:4px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#dfd,stroke:#333,stroke-width:2px
    style D fill:#dfd,stroke:#333,stroke-width:2px
    style E fill:#dfd,stroke:#333,stroke-width:2px
    style F fill:#dfd,stroke:#333,stroke-width:2px
  1. 为了找到你自己的 IP 地址,我们将使用一个显示网络接口信息的命令。这很重要,因为在扫描网络上的其他设备之前,我们需要知道自己的地址。输入此命令:
ip addr show | grep inet

让我们逐步分解这个命令:

  • ip addr show 显示系统中所有网络接口的详细信息。
  • | 符号(称为管道)将第一个命令的输出发送给下一个命令。
  • grep inet 过滤输出,仅显示包含「inet」的行,这些行包含了我们易于阅读的 IP 地址格式。

你会看到类似这样的输出:

inet 127.0.0.1/8 scope host lo
inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1

斜杠后的数字(如 /8/16)使用 CIDR 表示法(无类别域间路由)。这种表示法指示了 IP 地址中有多少位用于网络部分,多少位用于设备部分。例如,/16 意味着前 16 位(前两个数字)标识网络,而其余位可以分配给单个设备。

  1. 在此输出中,你会看到几个 IP 地址。以下是它们的实际含义:

    • 127.0.0.1 被称为「回环」(loopback)或「本地主机」(localhost)地址。这个特殊地址始终指向你自己的计算机,当程序需要与自身通信时会使用它。
    • 172.19.0.3 是你机器的实际网络地址。这是其他设备向你的计算机发送数据时会使用的地址,类似于你的街道地址标识你的家。
  2. 记下那个不是 127.0.0.1 的 IP 地址(在本例中为 172.19.0.3)。我们将在扫描练习中使用这个真实的网络地址。

CIDR 表示法对于理解哪些设备位于你的本地网络以及哪些位于远程网络非常重要。

你可能会注意到一些以「fe80::」开头的地址——这些是 IPv6 地址,是旨在取代 IPv4 的新一代 IP 地址版本。虽然 IPv6 变得越来越重要,但大多数本地网络仍然主要使用像我们这里检查的 IPv4 地址。为了我们的网络扫描目的,我们将专注于 IPv4 地址,因为它们在本地网络环境中更常用。

执行基础 Nmap 扫描

现在我们理解了 IP 地址并安装了 Nmap,让我们执行第一次网络扫描。这次初始扫描将针对你自己的机器,这是在扫描其他系统之前学习 Nmap 基础功能最安全的方法。

  1. 首先,我们将使用你在上一步中识别的 IP 地址。基础 Nmap 扫描命令只需要目标 IP 地址。运行以下命令,将 <YOUR_IP> 替换为你找到的 IP 地址:
nmap <YOUR_IP>

例如,如果你的 IP 是 172.19.0.3,你应该运行:

nmap 172.19.0.3

此命令告诉 Nmap 扫描指定 IP 地址上最常用的 1000 个 TCP 端口。TCP 端口就像计算机上编号的门,网络服务可以通过这些门进行通信。

  1. 执行命令后,Nmap 将执行扫描并显示结果。以下是你可能看到的典型输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:00 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.00017s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
  1. 让我们检查输出的每个部分,以了解 Nmap 在告诉我们什么:

    • 「Starting Nmap 7.80」:显示正在使用的 Nmap 版本。不同版本的功能或输出格式可能略有不同。
    • 「Host is up (0.00017s latency)」:确认目标机器响应了网络请求,响应时间以秒为单位显示。
    • 「Not shown: 998 closed ports」:表示在扫描的 1000 个常用端口中,有 998 个不接受连接。
    • 「PORT STATE SERVICE」:列出了扫描期间发现的所有开放端口:
      • 22/tcp open ssh:22 端口已开放,运行着 SSH(安全外壳),用于系统的安全远程管理。
      • 3001/tcp open nessus:3001 端口已开放,运行着 Nmap 认为是 Nessus 的服务,这是一款漏洞扫描器。
  2. 这种基础扫描提供了关于你机器上运行的网络服务的宝贵信息。在实际应用中,这些信息有助于:

    • 通过识别可能被利用的不必要开放端口来进行安全审计。
    • 通过验证预期服务是否可用来进行网络故障排除。
    • 通过发现可能表明系统受损的异常服务来进行事件检测。

请记住,网络扫描只能在你拥有或获得明确许可进行测试的系统上执行。未经授权扫描网络可能违反法律和道德准则。在扫描任何非你所有的系统之前,务必获得适当的许可。

执行操作系统检测扫描

Nmap 不仅仅局限于寻找开放端口。它还可以尝试确定目标机器的操作系统。这一功能对于网络管理员和安全专业人员非常有用,因为不同的操作系统具有不同的漏洞,需要不同的安全措施。

在开始之前,了解操作系统检测的工作原理很重要。Nmap 向目标发送特制的封包并分析响应。每个操作系统对网络请求的响应都略有不同,从而产生一个独特的「指纹」,Nmap 可以将其与其数据库进行匹配。

  1. 要执行操作系统检测扫描,我们使用 -O 标志(注意这是大写字母「O」,而不是数字零)。此扫描需要 root 权限,因为它需要在底层发送和分析原始封包。我们将使用 sudo 来运行此命令。将 <YOUR_IP> 替换为你想要扫描的实际 IP 地址:
sudo nmap -O <YOUR_IP>

例如,如果你的目标 IP 是 172.19.0.3,你应该运行:

sudo nmap -O 172.19.0.3
  1. 输出将像基础扫描一样显示开放端口,但现在包含了操作系统信息。以下是典型结果的示例:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:01 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.000035s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.76 seconds
  1. 让我们详细检查新的操作系统相关信息:

    • 「Device type: general purpose」:这告诉我们该设备是一个标准计算机系统,而不是像路由器或物联网设备那样的专用硬件。
    • 「Running: Linux 2.6.X」:Nmap 对操作系统家族和版本的主要猜测。
    • 「OS CPE」:这是操作系统版本的标准化标识符。
    • 「OS details」:基于指纹匹配的更具体的版本识别。
  2. 理解这些信息对于几个实际应用非常有价值:

    • 安全专业人员使用它来识别需要打补丁的潜在易受攻击系统。
    • 网络管理员维护其网络设备的准确资产清单。
    • 系统管理员验证机器是否运行着预期的操作系统。

请记住,操作系统检测并非百分之百准确。有几个因素会影响准确性:

  • 防火墙可能会拦截 Nmap 用于检测的探测包。
  • 自定义内核配置可能与标准指纹不匹配。
  • 虚拟机有时会显示宿主机操作系统而不是客户机操作系统。

为了获得最佳结果,请将操作系统检测与其他 Nmap 技术结合使用,并在可能的情况下通过多种方法验证发现结果。

扫描网络范围

在真实的网络环境中,你经常需要扫描多个 IP 地址或整个网络段。这对于发现网络上的所有设备非常有用,是网络管理员和安全专业人员的常见任务。让我们尝试扫描一个网络范围。

  1. 我们将从扫描一小段 IP 地址范围开始。这通常是探索陌生网络的第一步。下面的命令扫描从 172.19.0.1 开始的 20 个连续 IP 地址:
nmap 172.19.0.1-20

此命令告诉 Nmap 按顺序检查从 172.19.0.1 到 172.19.0.20 的每个 IP 地址,报告哪些主机在线以及哪些端口是开放的。

  1. 现在,让我们使用之前学过的 CIDR 表示法扫描整个子网。/24 后缀意味着我们要扫描最后一个八位字节中的所有 256 个地址。运行以下命令,将 <YOUR_NETWORK> 替换为你的网络地址:
nmap YOUR_NETWORK /24

例如:

nmap 172.19.0.0/24

此扫描将检查从 172.19.0.0 到 172.19.0.255 的每个 IP。/24 表示法相当于 255.255.255.0 的子网掩码。

  1. 为了保存扫描结果以便记录或稍后分析,我们使用 -oN(正常输出)标志。这将创建一个人类可读的文本文件:
nmap 172.19.0.0/24 -oN network_scan.txt

该命令执行相同的子网扫描,但将输出写入当前工作目录下的 network_scan.txt

  1. 让我们检查输出文件的内容:
cat network_scan.txt

输出显示了每个有响应主机的详细信息。以下是你可能看到的一个示例:

## Nmap 7.80 scan initiated Fri Sep 27 15:45:29 2024 as: nmap -oN network_scan.txt 172.19.0.0/24
Nmap scan report for iZrj9gvdh5xn02z8rmsn9mZ (172.19.0.1)
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10010/tcp open  rxapi

Nmap scan report for node_openresty.external (172.19.0.2)
Host is up (0.00047s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 36cff415ddd9.external (172.19.0.3)
Host is up (0.00045s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 041bf22f47a1.external (172.19.0.4)
Host is up (0.00050s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 2299e8eff7e5.external (172.19.0.5)
Host is up (0.00048s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

## Nmap done at Fri Sep 27 15:45:32 2024 -- 256 IP addresses (5 hosts up) scanned in 3.25 seconds
  1. 让我们分解一下输出:

    • 扫描覆盖了 172.19.0.0/24 范围内的所有 256 个可能地址。
    • 只有 5 台主机响应了扫描(处于「up」状态)。
    • 每个主机条目显示:
      • 主机名(如果可解析)和 IP 地址。
      • 网络延迟测量。
      • 检查的端口数量(默认不显示关闭的端口)。
      • 开放端口及其相关服务的列表。
  2. 网络扫描的实际应用包括:

    • 网络资产清单:维护网络上所有设备的准确列表。
    • 安全审计:识别未经授权的设备或服务。
    • 故障排除:验证网络连接和服务可用性。
    • 漏洞评估:发现潜在的易受攻击服务。

请记住,网络扫描只能在你自己拥有或获得明确许可扫描的网络上执行。未经授权的扫描可能违反隐私法或网络使用政策。

总结

在本实验中,你学习了使用 Nmap 进行网络扫描的基础知识,Nmap 是网络侦察和安全评估的强大工具。你练习了安装 Nmap、执行基础扫描以识别开放端口和服务、检测操作系统,以及在有效管理扫描输出的同时探索网络范围。

这些技能构成了更高级网络安全实践的基础。请记住,在扫描网络之前务必获得适当的授权,并负责任地使用这些知识来增强数字安全。