// 红队渗透 · 2024-12-04

Nmap:网络扫描利器详解

Nmap(Network Mapper)是一款开源的网络扫描工具,因其强大功能和灵活性被广泛应用于网络安全审计、漏洞评估和渗透测试。它不仅能发现网络中的主机和开放端口,还能探测服务版本、操作系统类型甚至运行自定义脚本。本文将深入介绍Nmap的核心用法,并通过示例展示其功能。


基础用法

基本命令格式:

nmap [扫描类型] [选项] {目标}

一、目标指定

Nmap支持多种目标格式:

  • 单一主机:scanme.nmap.org 或 192.168.1.1
  • 网络范围:192.168.0.1/24(CIDR表示法)
  • IP范围:10.0.0.0-255

常用参数:

  • -iL <文件>:从文件读取目标列表。
  • -iR <数量>:随机扫描指定数量的主机。
  • --exclude <目标> / --excludefile <文件>:排除特定主机。

示例:

nmap -iL targets.txt --exclude 192.168.1.1

扫描targets.txt中的主机,跳过192.168.1.1。


二、主机发现

用于确认目标是否在线,避免浪费时间扫描不可达主机。

常用参数:

  • -sL:仅列出目标,不扫描。
  • -sn:Ping扫描(不探测端口)。
  • -Pn:跳过主机发现,直接扫描(假设所有目标在线)。
  • -PS/-PA/-PU [端口]:分别使用TCP SYN、ACK、UDP Ping。

示例:

nmap -sn 192.168.1.0/24

检测局域网内活跃主机。


三、扫描技术

Nmap支持多种扫描方式,适用于不同场景。

常用参数:

  • -sS:TCP SYN扫描(默认,半连接,隐蔽性高)。
  • -sT:TCP Connect扫描(全连接,适合无root权限用户)。
  • -sU:UDP扫描(探测无连接协议)。
  • --scanflags <标志>:自定义TCP标志(如URG,ACK)。

示例:

nmap -sS -p 80,443 192.168.1.1

SYN扫描目标的80和443端口。


四、端口与扫描顺序

灵活指定端口范围和扫描策略。

常用参数:

  • -p <范围>:指定端口,如-p22、-p1-65535、-p-(全端口)。
  • -p U:53,T:80:混合协议扫描(如UDP 53,TCP 80)。
  • --exclude-ports <范围>:排除端口。
  • -F:快速扫描100个常见端口。
  • --top-ports <数量>:扫描前N个高频端口。

示例:

nmap -p 1-1000 -F 192.168.1.1

扫描1-1000端口并覆盖常见端口。


五、服务与版本检测

识别端口背后的服务及其版本。

常用参数:

  • -sV:探测服务版本。
  • --version-light:轻量检测,速度更快。
  • --version-trace:显示探测细节。

示例:

nmap -sV -p 80,443 192.168.1.1

检测80和443端口的服务版本。


六、脚本扫描(NSE)

利用Nmap脚本引擎(NSE)扩展功能。

常用参数:

  • -sC:运行默认脚本(等同--script=default)。
  • --script=<脚本名>:指定脚本(如http-enum)。
  • --script=vuln:漏洞扫描脚本集。

示例:

nmap --script=vuln -p 22,80 192.168.1.1

检测22和80端口的已知漏洞。


七、操作系统检测

推测目标操作系统及其版本。

常用参数:

  • -O:启用OS检测。
  • --osscan-guess:增强猜测准确性。

示例:

nmap -O 192.168.1.1

扫描并识别操作系统。


八、性能优化

调整扫描速度和资源占用。

常用参数:

  • -T<0-5>:速度模板(0最慢,5最快)。
  • --min-hostgroup <数量>:并行扫描主机数。
  • --scan-delay <时间>:包间延迟(如500ms)。
  • --host-timeout <时间>:单主机超时(如30s)。
  • --min-rate <速率>:最低包发送速率。

示例:

nmap -T4 192.168.1.0/24

快速扫描整个网段。


九、防火墙规避与欺骗

绕过防火墙或IDS的检测。

常用参数:

  • -f / --mtu <值>:分片数据包(如--mtu 24)。
  • -S <IP>:伪装源IP。
  • --spoof-mac <地址>:伪装MAC地址。
  • --proxies <url>:通过代理扫描。

示例:

nmap -f -S 10.0.0.1 192.168.1.1

分片扫描并伪装源IP。


十、输出格式

保存扫描结果以供后续分析。

常用参数:

  • -oN <文件>:普通文本输出。
  • -oX <文件>:XML格式。
  • -oA <基名>:同时生成三种格式(.nmap、.xml、.gnmap)。
  • --append-output:追加而非覆盖。

示例:

nmap -sS -p 22,80,443 -oA scan_result 192.168.1.1

结果示例:

  1. scan_result.nmap(普通文本):
    Nmap scan report for 192.168.1.1
    Host is up (0.0012s latency).
    PORT    STATE SERVICE
    22/tcp  open  ssh
    80/tcp  open  http
    443/tcp closed https
  2. scan_result.xml(XML):
    <nmaprun>
      <host>
        <address addr="192.168.1.1" addrtype="ipv4"/>
        <ports>
          <port protocol="tcp" portid="22"><state state="open"/></port>
          <port protocol="tcp" portid="80"><state state="open"/></port>
          <port protocol="tcp" portid="443"><state state="closed"/></port>
        </ports>
      </host>
    </nmaprun>
  3. scan_result.gnmap(Grepable):
    Host: 192.168.1.1 ()    Ports: 22/open/tcp//ssh///, 80/open/tcp//http///, 443/closed/tcp//https///

实用示例

  1. 全面扫描:

    nmap -v -A scanme.nmap.org
    • -A:包含OS检测、版本探测、脚本扫描和路由追踪。
  2. 网段主机发现:

    nmap -sn 192.168.0.0/16
  3. 漏洞扫描:

    nmap --script=vuln -p 22,80 192.168.1.1

替代方案

  1. Bash模拟主机发现:

    for i in {1..254}; do ping -c 1 -W 1 192.168.1.$i | grep "from"; done
    • 类似Nmap的-sn,但依赖系统Ping。
  2. Netcat端口扫描:

    nc -vv -z 192.168.1.1 1-65535
    • -z:零I/O模式,仅探测连接。

总结

Nmap是网络安全领域的瑞士军刀,其丰富的扫描类型和灵活的参数使其适用于从简单主机发现到复杂漏洞评估的各种场景。在使用时,建议根据目标特性分阶段调整策略(如先-sn发现主机,再-sV探测服务),并结合-oA保存结果以便分析。无论是渗透测试还是防御优化,Nmap都是不可或缺的利器。

参考资源:

原文 https://blog.csdn.net/2301_79518550/article/details/144245944