一、Nmap的定义

Nmap(Network Mapper)是一款开源的网络扫描和安全审计工具,广泛用于网络管理和安全评估。它能够发现网络上的设备、开放的端口、运行的服务及其版本信息,帮助用户识别潜在的安全风险。

二、Nmap的作用

  1. 网络发现:识别网络中活跃的设备和主机,了解网络拓扑结构。
  2. 端口扫描:检测目标主机上开放的端口,了解哪些服务在运行。
  3. 服务版本探测:识别运行在开放端口上的服务及其版本,帮助评估安全性。
  4. 操作系统探测:推测目标主机的操作系统类型,帮助进行针对性的安全评估。

三、Nmap的安装

  1. 在Linux上安装

    • 使用包管理器安装
      • Ubuntu/Debian:
        sudo apt-get update
        sudo apt-get install nmap
      • CentOS/RHEL:
        sudo yum install nmap
    • 从源代码安装
      • 下载源代码:
        wget https://nmap.org/dist/nmap-<version>.tar.bz2
      • 解压并编译:
        tar -xjf nmap-<version>.tar.bz2
        cd nmap-<version>
        ./configure
        make
        sudo make install
  2. 在Windows上安装

    • 访问Nmap官网下载Windows安装包。
    • 双击安装包,按照安装向导完成安装。
  3. 在macOS上安装

    • 使用Homebrew:
      brew install nmap

四、Nmap的基本扫描

image.png

  1. 基本命令格式

    • Nmap的基本命令格式为:
      nmap [选项] [目标]
  2. 常用扫描命令

    • 扫描单个IP地址:默认扫描1000个端口

image.png
image.png

nmap 192.168.1.0/24
nmap 192.168.1.1,192.168.1.2
  1. 扫描特定端口

    • 扫描特定端口(如80和443):使用 -p 参数
      nmap 192.168.1.1 -p 80,443 
      • 该命令将仅扫描指定IP地址的80和443端口。
        image.png
  2. 服务版本探测

    • 识别服务版本
      nmap -sV 192.168.1.1
      • 该命令将探测目标IP地址上运行的服务及其版本信息。
      • -sV 参数告诉 Nmap 执行 服务版本检测(Service Version Detection),目的是识别目标主机上运行的服务以及这些服务的版本号。具体来说,Nmap 会扫描目标主机的开放端口,并对每个端口尝试识别正在运行的服务(如 HTTP、FTP、SSH 等),然后进一步尝试确认这些服务的版本信息。例如,可能会显示出运行的 Apache 服务器版本,或者是 OpenSSH 的版本号。
  3. 操作系统探测

    • 识别目标操作系统
      nmap -O 192.168.1.1
      • 该命令将尝试识别目标IP地址的操作系统类型。
  4. 输出结果到文件

    • 将扫描结果保存为文本文件
      nmap -oN output.txt 192.168.1.1
      • 该命令将扫描结果保存到名为output.txt的文件中。

以下是您请求的 Nmap 扫描选项的详细说明汇总表:

扫描选项 描述 示例命令 详细说明
-sS TCP SYN 扫描(半开放扫描) nmap -sS 192.168.1.1 发送 SYN 包(握手请求),但不完成握手过程,因此目标主机不会记录到连接。它是最常见的扫描方式,具有隐蔽性,能够绕过一些防火墙和入侵检测系统(IDS)。
-sT TCP 连接扫描(全开放扫描) nmap -sT 192.168.1.1 完全建立 TCP 连接,发送 SYN 包并回应 ACK 包,完成三次握手。目标主机会记录到连接,但比 -sS 更容易被检测到,通常在目标机器未配置防火墙时使用。
-sU UDP 扫描 nmap -sU 192.168.1.1 扫描 UDP 服务,类似于 TCP 扫描,但因 UDP 是无连接的协议,响应的检测比较复杂,通常通过发送特定请求来判断端口是否开放。
-sP Ping 扫描(主机发现) nmap -sP 192.168.1.0/24 仅检测目标主机是否在线(即是否响应 ICMP Echo 请求)。在大规模网络中进行主机发现,扫描结果会列出哪些主机在指定的子网内处于活动状态。
-sA TCP ACK 扫描 nmap -sA 192.168.1.1 发送 ACK 包,用来探测防火墙或过滤器。通过响应判断目标主机的端口是否存在过滤或 NAT(网络地址转换)。如果目标端口关闭,返回 RST 包;如果端口开放,返回 RST 或无响应。
-sW TCP Window 扫描 nmap -sW 192.168.1.1 基于 TCP 窗口大小进行扫描,用来探测防火墙策略和端口状态。它通过观察 TCP 窗口大小的变化来判断端口的开放与否。
-sM TCP Maimon 扫描 nmap -sM 192.168.1.1 使用 SYN/FIN 标志的组合(SYN+FIN),这是一种非常隐蔽的扫描方法,可以绕过某些防火墙或过滤系统。并非所有操作系统都支持此扫描。
-O 操作系统检测 nmap -O 192.168.1.1 通过分析目标主机的网络行为,Nmap 尝试推测其操作系统类型和版本。包括 TCP/IP 栈的特征、TTL(生存时间)值等信息,精度不一。
-sV 服务版本检测 nmap -sV 192.168.1.1 检测每个开放端口的服务类型及其版本信息。Nmap 会尝试通过与服务交互或分析返回的 banner 信息来获取版本号,帮助评估潜在的漏洞风险。
-p 指定端口 nmap -p 22,80 192.168.1.1 指定需要扫描的端口或端口范围(如 -p 1-1000 或 -p 22,80)。可以用于精确控制扫描的端口,避免扫描所有端口。
-Pn 不进行主机发现,直接扫描指定的主机 nmap -Pn 192.168.1.1 跳过主机发现步骤,直接扫描目标主机的指定端口。用于目标不可响应 ping 或防火墙阻止 ICMP 请求的情况下,强制扫描目标主机。
-T 设置扫描速度(0-5,0为最慢,5为最快) nmap -T4 192.168.1.1 设置扫描速度,T4 为常用的平衡速度(速度快且较为隐蔽),T0 最慢,T5 最快(非常高效,但可能会引起 IDS/IPS 警报)。根据需求选择速度。
-v 增加详细输出 nmap -v 192.168.1.1 输出更详细的扫描过程和结果,适用于分析扫描过程的细节。可以查看每个端口的扫描信息和主机状态,通常用于调试或对扫描过程进行深度分析。
-oN 将输出保存为普通文本文件 nmap -oN output.txt 192.168.1.1 将扫描结果保存为普通文本格式。适合查看和进一步分析结果。输出文件为 output.txt,包含标准的扫描报告。
-oG 将输出保存为 grepable 格式 nmap -oG output.gnmap 192.168.1.1 将结果保存为 grep 可处理的格式,适合用脚本进一步分析扫描结果。输出文件为 output.gnmap。
-oX 将输出保存为 XML 格式 nmap -oX output.xml 192.168.1.1 将结果保存为 XML 格式,适合进一步与其他工具或系统进行数据交换。输出文件为 output.xml,可以通过脚本或程序进一步处理。
--script 使用 Nmap 脚本引擎(NSE)执行脚本 nmap --script=http-enum 192.168.1.1 使用 Nmap 脚本引擎(NSE)执行指定的脚本,例如 http-enum 脚本用于列出 HTTP 服务的目录和文件。NSE 脚本可用于渗透测试、漏洞扫描等。
-iL 从文件中读取目标主机列表 nmap -iL targets.txt 从指定的文件中读取多个目标 IP 地址进行扫描。适用于大规模网络扫描。文件 targets.txt 中每行列出一个目标 IP。
-R 反向 DNS 查找 nmap -R 192.168.1.1 对目标 IP 地址执行反向 DNS 查找,获取其域名(如果存在的话)。有助于确定目标主机的域名信息。
--traceroute 路由追踪 nmap --traceroute 192.168.1.1 跟踪到目标主机的路由路径,查看经过的中间节点(路由器)。这对于网络分析、诊断和性能评估很有帮助。

端口状态

  1. open (开放的)

    • 端口是开放的,且可以接受外部的连接。
  2. closed (关闭的)

    • 端口是关闭的,目标主机明确表示它没有在该端口上提供服务。你可以与此端口建立连接,但是目标主机拒绝它。
  3. filtered (被过滤的)

    • 端口受到防火墙或某种过滤机制的保护,无法判断端口是否开放或关闭。Nmap通常无法得到关于该端口是否开放的明确反馈。
  4. unfiltered (未被过滤的)

    • 端口没有受到过滤,可以得出端口的开放或关闭状态。一般来说,Nmap能直接得到关于该端口的反馈。
  5. open|filtered (开放或者被过滤的)

    • 这种状态通常出现在某些TCP端口的扫描中,Nmap无法确认端口是开放还是被过滤。当目标主机没有响应(比如目标防火墙丢弃了响应)时,就会出现这种情况。Nmap无法确定端口的状态,可能是开放的,也可能是被过滤的。
  6. closed|filtered (关闭或者被过滤的)

    • 这通常表示Nmap无法确定端口是关闭还是被过滤,可能是由于某些特殊的网络条件,比如丢失了响应。

五、利用Nmap进行扫描的步骤

  1. 确定扫描目标

    • 确定需要扫描的IP地址或子网。例如,选择192.168.1.0/24作为目标。
  2. 选择扫描类型

    • 根据需求选择合适的扫描选项:
      • 如果只需快速了解网络设备,可以使用基本扫描命令。
      • 如果需要详细信息,可以选择服务版本探测和操作系统探测。
  3. 执行扫描

    • 在终端中输入相应的Nmap命令。例如:
nmap -sV -O 192.168.1.0/24
  1. 分析结果

    • 查看Nmap输出,分析开放端口、运行服务及其版本信息。输出示例:
PORT STATE SERVICE VERSION 
22/tcp open ssh OpenSSH 7.6 (protocol 2.0) 
80/tcp open http Apache httpd 2.4.29
  1. 采取措施