在 Nmap 中执行积极扫描

NmapBeginner
立即练习

介绍

在本实验中,你将学习如何在 Nmap 中执行高强度扫描。本实验涵盖了对目标 IP 地址运行高强度扫描、扫描特定端口、增加扫描的详细程度、保存扫描结果、分析详细输出以及将其与基本扫描进行比较。你将在 Xfce 终端中使用诸如 nmap -Anmap -A -pnmap -v -Anmap -A -oN 等命令来完成这些任务。

使用 nmap -A 192.168.1.1 运行高强度扫描

在本步骤中,我们将使用 Nmap 执行高强度扫描。高强度扫描结合了多种扫描技术,以收集有关目标的全面信息。-A 选项启用操作系统检测、版本检测、脚本扫描和路由跟踪。这种类型的扫描对于识别开放端口、在这些端口上运行的服务以及目标的操作系统很有用。

在开始之前,让我们先明确一下什么是 IP 地址。IP 地址是分配给连接到使用 Internet 协议进行通信的计算机网络的每个设备的数字标签。在我们的例子中,192.168.1.1 是一个私有 IP 地址,通常用于家庭或小型办公网络。

现在,让我们执行高强度扫描。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

然后,运行以下 Nmap 命令:

sudo nmap -A 192.168.1.1

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

此命令将针对目标 IP 地址 192.168.1.1 发起高强度扫描。Nmap 将尝试识别操作系统、检测正在运行的服务的版本、运行默认脚本并执行路由跟踪。

输出将显示扫描结果的详细报告,包括开放端口、服务版本以及扫描期间收集的其他信息。确切的输出将取决于目标系统及其配置。以下是输出可能的样子的示例(尽管你的结果可能会有所不同):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p0 Ubuntu 7ubuntu2 (protocol 2.0)
| ssh-hostkey:
|   2048 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (RSA)
|   256 SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy (ECDSA)
|_  256 SHA256:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz (ED25519)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2018-08-22T12:20:36
| Not valid after:  2028-08-19T12:20:36
| ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.00 ms 192.168.1.1

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

此输出显示了开放端口(在此示例中为 22、80 和 443)、在这些端口上运行的服务(SSH 和 HTTP)以及有关操作系统(Linux)的信息。路由跟踪部分显示了到目标的路径。

使用 nmap -A -p 22,80 127.0.0.1 扫描特定端口

在本步骤中,我们将把 Nmap 扫描聚焦在特定端口上。我们不会扫描所有端口或依赖 Nmap 的默认端口选择,而是指定 Nmap 仅扫描目标 IP 地址 127.0.0.1 上的 22 和 80 端口。当你想要快速检查已知服务的状态或缩短扫描时间时,这会很有用。

在继续之前,让我们了解一下什么是端口。在网络中,端口是网络连接开始和结束的虚拟点。端口基于软件并由操作系统管理。它们允许多个应用程序同时使用单个网络连接。端口 22 通常用于 SSH(安全外壳协议),这是一种用于远程访问的安全协议,而端口 80 通常用于 HTTP(超文本传输协议),它是万维网上数据通信的基础。

127.0.0.1 是回环地址,也称为本地主机。它指的是你正在使用的当前机器。扫描 127.0.0.1 对于测试在你自己机器上运行的服务很有用。

现在,让我们执行 Nmap 命令来扫描特定端口。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

然后,运行以下 Nmap 命令:

sudo nmap -A -p 22,80 127.0.0.1

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

此命令将发起一次高强度扫描,但仅针对 127.0.0.1 的 22 和 80 端口。Nmap 将尝试识别在这些端口上运行的服务并收集其他信息。

输出将显示扫描结果的报告,特别是针对 22 和 80 端口的。以下是输出可能的样子的示例(尽管你的结果可能不同):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
| ssh-hostkey:
|   3072 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (RSA)
|   256 SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy (ECDSA)
|_  256 SHA256:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)

Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.57 seconds

此输出表明端口 22 开放并运行着 SSH,端口 80 开放并运行着 Apache HTTP 服务器。每个服务的版本信息也会显示出来。

使用 nmap -v -A 192.168.1.1 添加详细程度

在本步骤中,我们将在 Nmap 高强度扫描中增加详细程度。Nmap 中的详细程度意味着在扫描期间增加显示的信息量。这有助于理解 Nmap 正在做什么以及排查任何问题。-v 选项会增加详细程度级别。多次使用 -v(例如 -vv-vvv)会进一步提高详细程度级别,提供更详细的输出。

让我们说明一下为什么详细程度很有用。默认情况下,Nmap 会提供扫描结果的摘要。然而,在排查问题或试图理解扫描过程时,更详细的信息可能非常宝贵。详细输出会显示扫描的进度、发送的探测以及收到的响应。

现在,让我们执行带有详细程度的 Nmap 命令。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

然后,运行以下 Nmap 命令:

sudo nmap -v -A 192.168.1.1

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

此命令将针对目标 IP 地址 192.168.1.1 发起高强度扫描,并增加详细程度。Nmap 在扫描过程中会显示有关扫描过程的更多信息。

输出将比之前的高强度扫描更详细。你将看到有关发送的探测、收到的响应以及扫描每个阶段的进度的信息。以下是输出可能的样子的示例(尽管你的结果可能不同):

Starting Nmap 7.80 ( https://nmap.org )
NSE: Loaded 151 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
NSE: Executing script msrpc-enum on 192.168.1.1
NSE: Starting runlevel 2 (of 3) scan.
NSE: Starting runlevel 3 (of 3) scan.
NSE: Finished script pre-scanning.
Initiating Ping Scan at 14:35
Scanning 192.168.1.1 [4 ports]
Completed Ping Scan at 14:35, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:35
Completed Parallel DNS resolution of 1 host. at 14:35, 0.00s elapsed
Initiating SYN Stealth Scan at 14:35
Scanning 192.168.1.1 [1000 ports]
Discovered open port 22/tcp on 192.168.1.1
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 443/tcp on 192.168.1.1
Completed SYN Stealth Scan at 14:35, 0.15s elapsed (1000 total ports)
Initiating Service scan at 14:35
Scanning 3 services on 192.168.1.1
Completed Service scan at 14:35, 5.23s elapsed (3 services total)
Initiating OS detection at 14:35
Completed OS detection at 14:35, 5.18s elapsed
Nmap scan report for 192.168.1.1
Host is up (0.00078s latency).
Not shown: 997 closed ports
... (rest of the output)...

详细输出显示了扫描的不同阶段,例如 ping 扫描、端口扫描、服务检测和操作系统检测。它还显示了 Nmap 脚本引擎(NSE)正在执行的脚本。

使用 nmap -A -oN aggressive.txt 127.0.0.1 保存高强度扫描结果

在本步骤中,我们将学习如何将 Nmap 高强度扫描的输出保存到文件中。这对于后续的分析、报告或与其他扫描结果进行比较很有用。Nmap 提供了多种以不同格式保存输出的选项。我们将使用 -oN 选项,它会以“普通”的人类可读格式保存输出。

-oN 选项后面跟着一个文件名,这会告诉 Nmap 使用普通输出格式将扫描结果保存到指定的文件中。这种格式旨在便于人类阅读。

现在,让我们执行 Nmap 命令,将高强度扫描输出保存到文件中。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

然后,运行以下 Nmap 命令:

sudo nmap -A -oN aggressive.txt 127.0.0.1

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

此命令将针对目标 IP 地址 127.0.0.1 发起高强度扫描,并将输出以普通格式保存到 ~/project 目录下一个名为 aggressive.txt 的文件中。

扫描完成后,你可以使用像 nanocat 这样的文本编辑器查看 aggressive.txt 文件的内容。

要使用 nano 查看文件内容,运行以下命令:

nano aggressive.txt

这将在 nano 文本编辑器中打开 aggressive.txt 文件。你可以滚动浏览文件以查看扫描结果。

或者,你可以使用 cat 命令在终端中显示文件内容:

cat aggressive.txt

这会将 aggressive.txt 文件的内容打印到终端。

aggressive.txt 文件的内容将类似于你在不使用 -oN 选项运行 Nmap 时在屏幕上看到的输出,但现在它被保存在一个文件中以供后续使用。

## Nmap 7.80 scan initiated Mon Nov 21 14:45:32 2023 as: nmap -A -oN aggressive.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
| ssh-hostkey:
|   3072 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (RSA)
|   256 SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy (ECDSA)
|_  256 SHA256:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)

Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
## Nmap done at Mon Nov 21 14:45:35 2023 -- 1 IP address (1 host up) scanned in 2.57 seconds

在 Xfce 终端中分析详细输出

在本步骤中,我们将分析上一步中保存的高强度扫描的详细输出。理解 Nmap 扫描的输出对于识别系统中潜在的漏洞和配置错误至关重要。我们将使用 cat 命令在 Xfce 终端中查看 aggressive.txt 文件的内容,并讨论输出的关键部分。

高强度扫描(nmap -A)执行多种类型的扫描,包括:

  • TCP 连接扫描:通过完成 TCP 三次握手来检查端口是否开放。
  • 服务版本检测:确定在开放端口上运行的软件版本。
  • 操作系统检测:尝试识别目标主机的操作系统。
  • Traceroute:映射到目标的网络路径。
  • Nmap 脚本引擎(NSE):执行脚本来识别漏洞并收集更多信息。

现在,让我们分析输出。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

然后,使用 cat 命令显示 aggressive.txt 文件的内容:

cat aggressive.txt

输出将显示在终端中。让我们分解关键部分:

  1. Nmap 扫描报告:此部分提供有关扫描的一般信息,包括目标 IP 地址、主机名(如果可用)以及扫描的开始和结束时间。

    ## Nmap 7.80 scan initiated Mon Nov 21 14:45:32 2023 as: nmap -A -oN aggressive.txt 127.0.0.1
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000028s latency).
    Other addresses for localhost (not scanned): ::1
    
  2. 端口扫描结果:此部分列出目标主机上开放、关闭和被过滤的端口。对于每个开放端口,Nmap 尝试识别在该端口上运行的服务及其版本。

    PORT   STATE SERVICE VERSION
    22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
    | ssh-hostkey:
    |   3072 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (RSA)
    |   256 SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy (ECDSA)
    |_  256 SHA256:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz (ED25519)
    80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
    |_http-server-header: Apache/2.4.41 (Ubuntu)
    
    • PORT:端口号和协议(例如,22/tcp)。
    • STATE:端口状态(openclosedfiltered)。
    • SERVICE:在端口上识别出的服务(例如,sshhttp)。
    • VERSION:服务版本(例如,OpenSSH 8.2p1Apache httpd 2.4.41)。
    • ssh-hostkey:SSH 主机密钥指纹。
    • http-server-header:HTTP 服务器标头。
  3. 服务信息:此部分提供有关目标主机上运行的服务的其他信息,例如操作系统。

    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
  4. 操作系统检测:此部分显示 Nmap 操作系统检测尝试的结果。Nmap 将从目标主机收到的响应与已知操作系统指纹数据库进行比较,以识别操作系统。

    OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    
  5. Nmap 脚本引擎(NSE)结果:此部分显示扫描期间执行的任何 NSE 脚本的输出。这些脚本可以提供广泛的信息,例如识别漏洞、收集用户信息和检测配置错误。(如果没有运行脚本或脚本没有产生任何输出,此部分可能不存在。)

  6. 扫描摘要:此部分总结扫描结果,包括扫描的 IP 地址数量和总扫描时间。

    ## Nmap done at Mon Nov 21 14:45:35 2023 -- 1 IP address (1 host up) scanned in 2.57 seconds
    

通过分析高强度扫描的详细输出,你可以全面了解目标系统的网络服务、操作系统和潜在漏洞。

在 Xfce 终端中与基本扫描结果进行比较

在本步骤中,我们将执行一次基本的 Nmap 扫描,并将其输出与我们之前执行的高强度扫描进行比较。这种比较将突出每次扫描在细节程度和收集的信息类型上的差异。基本扫描通常只执行 TCP 连接扫描,速度更快,但提供的信息比高强度扫描少。

一次基本的 Nmap 扫描,在没有任何特定选项的情况下,会对最常见的 1000 个端口执行 TCP 连接扫描。它会识别这些端口是开放、关闭还是被过滤。默认情况下,它不会执行服务版本检测、操作系统检测或运行 NSE 脚本。

现在,让我们执行一次基本的 Nmap 扫描并比较结果。打开你的 Xfce 终端。确保你在 ~/project 目录中。

cd ~/project

运行以下 Nmap 命令对目标 IP 地址 127.0.0.1 执行基本扫描:

sudo nmap 127.0.0.1

系统会提示你输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

基本扫描的输出将显示在终端中。它会显示目标主机上开放、关闭和被过滤的端口。

Starting Nmap 7.80 ( https://nmap.org ) at Mon Nov 21 15:00:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

现在,让我们将此输出与我们保存在 aggressive.txt 文件中的高强度扫描输出进行比较。你可以再次使用 cat 命令查看 aggressive.txt 文件的内容:

cat aggressive.txt

将基本扫描的输出与 aggressive.txt 文件的内容进行比较。你会注意到以下差异:

  • 服务版本检测:高强度扫描会识别开放端口上运行的服务的具体版本(例如,OpenSSH 8.2p1Apache httpd 2.4.41),而基本扫描只识别服务名称(例如,sshhttp)。
  • 操作系统检测:高强度扫描会尝试识别目标主机的操作系统,而基本扫描不会。
  • NSE 脚本:高强度扫描可能会运行 NSE 脚本以收集更多信息,而基本扫描不会。
  • 扫描的端口数量:基本扫描只扫描最常见的 1000 个端口,而高强度扫描可能会根据使用的选项扫描更多端口。

总之,与基本扫描相比,高强度扫描提供了对目标系统更详细和全面的视图。然而,它完成扫描所需的时间也更长,并且更有可能被入侵检测系统检测到。选择使用哪种类型的扫描取决于评估的具体目标和环境的限制。

总结

在本实验中,参与者学习了如何使用 Nmap 进行高强度扫描。他们执行了诸如 nmap -A 之类的命令,以进行综合扫描,这些扫描结合了操作系统检测、版本检测、脚本扫描和 Traceroute。他们还学习了使用 -p 扫描特定端口,使用 -v 增加详细程度,并使用 -oN 将扫描结果保存到文件中。此外,他们在 Xfce 终端中分析了详细的扫描输出,并将其与基本扫描进行了比较。