Nmap 渗透测试弹药库:精准扫描与隐蔽渗透技术手册
引言:
💡 阅读策略建议
本文设计为「工具字典」,无需死记硬背,遇到问题时直接按场景查阅即可。
你只需要:
🔸 了解每个指令能解决什么问题
🔸 收藏本文作为实战弹药库
🔸 需要时用 Ctrl+F 精准提取
⚠️免责提醒:“请确保获得授权后再对目标网络进行扫描,未经授权的扫描可能违反法律法规。”
文章目录
- 一、Nmap 基础认知
- 什么是Nmap?
- nmap的安装
- 二、扫描结果解读
- 1.端口状态详解(TCP/UDP 通用与差异)
- 2.基础扫描示例与结果分析
- 三、常用扫描选项
- 扫描类型
- 批量扫描
- 报文分段扫描
- 诱饵主机隐蔽扫描
- 防火墙穿透扫描
- 脚本扫描
- 四、常用扫描组合
一、Nmap 基础认知
什么是Nmap?
nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取哪台主机正在运行以及提供什么服务等信息。nmap 支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp 代理(bounce 攻击)、反向标志、ICMP、FIN、ACK 扫描、圣诞树(Xmas Tree)、SYN 扫描和 null 扫描。还可以探测操作系统类型。
NMAP 可用于:
- 检测网络上的存活主机(主机发现)
- 检测主机上开放的端口(端口发现或枚举)
- 检测端口对应(服务发现)的软件和版本
- 检测操作系统、硬件地址以及软件版本
- 检测脆弱性的漏洞(Nmap 的脚本)
- 端口扫描是 Nmap 最基本最核心的功能,用于确定目标主机的 TCP/UDP 端口的开放情况。
nmap的安装
sudo apt install nmap -y
注:该安装指令适用于Debian/Ubuntu,其他系统请使用对应包管理器
二、扫描结果解读
1.端口状态详解(TCP/UDP 通用与差异)
扫描结果中TCP端口状态有以下几种:
open
: 应用程序在该端口接收 TCP 连接或者 UDP 报文。closed
: 关闭的端口对于 nmap 也是可访问的,它接收 nmap 探测报文并作出响应。但没有应用程序在其上监听。filtered
: 由于包过滤阻止探测报文到达端口,nmap 无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则或者主机上的软件防火墙。unfiltered
: 未被过滤状态意味着端口可访问,但是 nmap 无法确定它是开放还是关闭。只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态。open | filtered
: 无法确定端口是开放还是被过滤,开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP、IP 协议,FIN、Null 等扫描会引起。closed | filtered
:(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的。
扫描结果中UDP端口状态有以下几种:
-
open
:从目标端口得到任意的 UDP 应答 -
open|filtered
:端口可能开放,但未收到响应(如服务配置为不回复),防火墙可能丢弃探测包。 -
closed
:防火墙或网络设备拦截了探测包,并返回 ICMP 不可达错误 -
filtered
:目标主机返回 ICMP 端口不可达错误
“▓░░░░░░░░░ 5% 正在加载硬核知识…”
2.基础扫描示例与结果分析
基础用法:nmap 目标ip
示例如下:
- 第一行信息:nmap版本和扫描时间,如上nmap版本为7.95,扫描时间为2025-08-11 10:50
- 第二行信息:目标主机的主机名(kali)和ip地址。
Host is up
:主机存活(在线),0.00027s是延迟时间。Not shown
: nmap默认扫描的是常用的1000个端口,这里表示999个端口关闭,1个端口开放。-
PORT STATE SERVIC
22/tcp open ssh
开放的端口为22端口,提供ssh服务。 MAC Address
:目标主机的mac地址和产商信息,该 MAC 地址属于 VMware,表明目标主机是一台 VMware 虚拟机。Nmap done
:扫描结果统计,扫描确认 192.168.43.158 在线,总耗时 0.27 秒(因大部分端口明确关闭,响应速度快)。
注意:扫描出来的端口对应的服务不一定对,还需要自行去验证。
三、常用扫描选项
-sV
:服务识别,向目标主机开放的服务发起请求。即nmap 目标ip -sV
扫描结果:
增加该选项后,新增的结果信息:
-
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.9p1 Debian 3 (protocol 2.0)
ssh服务的软件版本为OpenSSH 9.9p1
,发行版信息:Debian 3
;协议版本:``protocol 2.0```。 Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
:目标主机的操作系统Linux,使用的内核为linux_kernel
注:要查询更详细的操作系统信息,加-O选项即可
注:目标ip也可以替换成域名扫描
-v
:显示详细信息。
-p
选项,指定端口扫描,如:
-p 端口号
(指定端口扫描)-p 0-65535
(全端口扫描)-p-
(全端口扫描)-p 22,23,100-230
(指定端口和指定范围混合扫描)
注意:如果扫描到自己电脑的一些病毒程序,关闭了可能还会重新生成,因为它还有父进程。
扫描类型
扫描类型 | 选项 | 完成三次握手? | 隐蔽性 | 权限要求 |
---|---|---|---|---|
半扫描 | -sS | 仅完成前两次 | 高 | root |
全连接扫描 | -sT | 完成三次握手 | 低 | 任意用户 |
UDP 扫描 | -sU | 无握手 | 中 | root |
ACK 扫描 | -sA | 仅 ACK | 中 | root |
- 注意:Nmap 默认扫描类型为 TCP SYN 扫描(半连接扫描),但该扫描需要 root 权限;若普通用户未指定扫描类型,会自动使用 TCP connect () 扫描(全连接)。
批量扫描
-iL
:批量探测。把ip地址都放在一个文件里,然后从文件中读取探测,如下指令探测文件里各个目标ip主机的80号端口:nmap -p 80 -iL /文件路径
。
注意:文件里格式是一行一个ip地址。
目标ip可使用通配符批量扫描:nmap 192.168.43.*
指定区间批量扫描:nmap 192.168.43.20-190
如何更隐蔽的去扫描? 频繁扫描会被屏蔽或者锁定 IP 地址。
--randomize_hosts
:随机扫描,对目标主机的顺序随机划分--scan-delay
:延时扫描,单位秒,调整探针之间的延迟,示例:
nmap --randomize_hosts --scan-delay 3000ms 192.168.43.*
报文分段扫描
使用-f
选项可以对 nmap 发送的探测数据包进行分段。这样将原来的数据包分成几个部分,目标网络的防御机制例如过滤、防火墙等在对这些数据包进行检测的时候就会变得更加困难。
- 注意:分段扫描的本质技术IP分片技术。 对IP分片技术感兴趣的小伙伴点击这里
- 注意:加-f选项扫描结果和其他方式结果是一样的,只是探测方式不同。
- 注意:把数据包分段发送,不容易被防火墙识别出来,但老系统处理分包可能常出现死机情况。需谨慎使用。
诱饵主机隐蔽扫描
伪造IP主机 迷惑目标 隐藏自己
通常在对目标进行扫描时,有可能会被发现。一个比较巧妙的方法就是同时伪造大量的主机地址对目标进行扫描。这时目标主机即使发现了有人正在进行扫描,但是由于扫描数据包来自于多个主机,即使是 IDS 也只能知道目前正在受到扫描,并不知道到底是哪台主机在进行扫描。这是一种常用的隐蔽自身 IP 的可靠技术。
-D
选项指定ip地址扫描。如:
nmap -D RND:n 目标IP
:随机伪造n个IP对目标进行扫描。nmap -D ME 目标IP
:自己做诱饵进行扫描。(没什么意义,通常不会这么用)nmap -D 伪造的IP 目标IP
:伪造IP扫描目标主机。nmap -D 伪造IP 伪造IP ... 目标主机IP
:伪造多个IP对目标扫描。
注意:在初始的 ping 扫描(ICMP、SYN、ACK 等)阶段、真正的端口扫描阶段,以及远程操作系统检测(-O)阶段,都可以使用诱饵主机选项。但是,在进行版本检测或 TCP 连接扫描时,诱饵主机选项是无效的。
--source-port
:指定源端口(可伪造)进行扫描,如:nmap --source-port 伪造端口 目标IP
。或使用-g
选项,如:nmap -g 伪造端口 目标IP
。
防火墙穿透扫描
许多网络会屏蔽ICMP请求(如ping),导致Nmap误判主机离线。添加-Pn
选项可忽略存活检测,避免因此漏扫实际在线的目标。
- 本质:跳过存活检测,直接发送探测包(如SYN/ACK),即使目标不响应ICMP请求仍会扫描端口。
示例:nmap -Pn 目标IP
指定扫描速度:
-T
选项用于指定扫描速度,共分 6 个等级(0 到 6),通常使用-T3
,-T4
脚本扫描
--script
选项指定脚本进行扫描。如nmap --script=auth 目标IP
NMAP 脚本类型:
auth
: 负责处理权限证书(绕开鉴权)的脚本 。broadcast
: 在局域网内探查更多服务开启状况,如 dhcp/dns/sqlserver 等服务 。brute
: 提供暴力破解方式,针对常见的应用如 http/snmp 等 。default
: 使用 -sC 或 -A 选项扫描时候默认的脚本,提供基本脚本扫描能力。discovery
: 对网络进行更多的信息,如 SMB 枚举、SNMP 查询等 。dos
: 用于进行拒绝服务攻击 。exploit
: 利用已知的漏洞入侵系统 。external
: 利用第三方的数据库或资源,如WHOIS查询或DNS解析。fuzzer
: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 。intrusive
:入侵性的脚本,此类脚本可能引发对方的 IDS/IPS 的记录或屏蔽。malware
: 探测目标机是否感染了病毒,开启了后门等信息。safe
: 此类与 intrusive 相反,属于安全性脚本 。version
: 负责增强服务与版本扫描(Version Detection)功能的脚本 。vuln
: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有 MS08_067 。
四、常用扫描组合
Intense scan
nmap -T4 -A -v
-T4
:指定扫描速度
-A
:操作系统以及版本探测
-v
:显示详细信息
Intense scan plus UDP
nmap -sS -sU -T4 -A -v
-sS
:TCP SYN 扫描
-sU
:UDP扫描
Intense scan,all TCP ports
nmap -p 1-65535 -T4 -A -v
扫描所有TCP端口,范围是1-65535,试图扫描所有端口开放情况,速度比较慢。
Intense scan,no ping
nmap -T4 -A -v -Pn
-Pn
:非ping,绕过防火墙扫描。
Ping scan
nmap -sn
ping
扫描,速度快,但容易被防火墙屏蔽,导致扫描无结果。
Quick scan
nmap -T4 -F
-F
模式,快速扫描。
Quick scan plus
nmap -sV -T4 -O -F --version-light
-sV
:探测端口及版本服务信息。
-O
:开启 OS检测。
--version-light
:设定侦测等级为2。
Quick traceroute
nmap -sn --traceroute
路由跟踪
-sn
:Ping扫描,关闭端口扫描。
-traceroute
:显示本主机到目标主机的路由跃点。
Slow comprehensive scan
nmap -sS -sU -T4 -A -PE -PP -PS80,443,-PA3389,-PU40125 -PY -g 53 --script all
慢速全面扫描。
📌 写给读者的小纸条
“这些指令组合就像厨房里的调味罐——不用记住每一瓶的位置,用的时候拉开抽屉随手拿就好。
建议把本文丢进收藏夹吃灰(偶尔能翻出来用的才是好工具),需要时Ctrl+F一搜,省下的时间够喝杯咖啡啦 ☕”
非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!