以下是nmap扫描技能的中文翻译:
name: nmap description: 专业网络侦察和端口扫描使用nmap。支持各种扫描类型(快速,全面,UDP,隐形),服务检测,漏洞扫描和NSE脚本。当您需要枚举网络服务,检测版本或执行网络侦察时使用。
Nmap扫描 - 专业网络侦察
您正在帮助用户使用nmap执行专业网络侦察和端口扫描。这项技能提供了各种扫描类型,输出格式和结果分析的指导。
输出目录
目录结构
nmap-output/
├── nmap-portscan.nmap # 初始快速端口发现
├── nmap-portscan.xml
├── nmap-portscan.gnmap
├── nmap-services.nmap # 详细服务检测在开放端口
├── nmap-services.xml
└── nmap-services.gnmap
重要:始终将nmap输出保存到组织良好的目录结构中。默认情况下,请使用./nmap-output/或指定自定义目录。
默认扫描策略
重要:除非用户明确请求不同的扫描类型,否则始终使用这种两阶段方法:
第一阶段:快速端口发现(Root SYN扫描)
sudo nmap -p- <target> -oA <output-dir>/nmap-portscan
- 为什么sudo:以root身份运行启用快速SYN扫描(-sS是隐含的)
- 为什么-p-:快速扫描所有65535个端口
- 持续时间:SYN扫描通常1-3分钟
- 输出:所有开放端口的列表
主机下线检测: 如果扫描输出包含"注意:主机似乎下线",则自动重试:
sudo nmap -p- -Pn <target> -oA <output-dir>/nmap-portscan
-Pn:跳过主机发现,将主机视为在线- 当防火墙阻止ping探测时使用
第二阶段:目标服务检测
第一阶段完成后,解析开放端口并运行:
nmap -p <OPEN_PORT_LIST> -sV -sC <target> -oA <output-dir>/nmap-services
-p <OPEN_PORT_LIST>:仅扫描发现为开放的端口(例如,-p 23,80,443,554,8000)-sV:服务版本检测-sC:运行默认NSE脚本以进行额外枚举- 持续时间:由于仅扫描已知开放端口,通常1-3分钟
为什么这种策略?
- 速度:快速SYN扫描在1-3分钟内找到所有开放端口
- 彻底性:涵盖所有65535个端口,不仅仅是前1000个
- 效率:仅在确认开放的端口上运行服务检测
- 准确性:两阶段方法减少了假阴性
解析开放端口
第一阶段后,使用以下命令提取开放端口:
# 从.gnmap文件中提取开放端口
grep "Ports:" <output-dir>/nmap-portscan.gnmap | sed 's/.*Ports: //g' | sed 's|/|
|g' | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//'
或从.nmap文件解析:
grep "^[0-9]" <output-dir>/nmap-portscan.nmap | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//'
实施工作流程
当nmap扫描技能被调用时:
-
创建输出目录
OUTPUT_DIR="./nmap-output" mkdir -p "$OUTPUT_DIR" -
运行第一阶段:快速端口发现
sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan" -
检查"主机似乎下线"错误
if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then echo "Host appears down, retrying with -Pn flag..." sudo nmap -p- -Pn <target> -oA "$OUTPUT_DIR/nmap-portscan" fi -
从结果中解析开放端口
OPEN_PORTS=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
’ ‘,’ | sed ‘s/,$//’)
5. **运行第二阶段:在开放端口上进行服务检测**
```bash
if [ -n "$OPEN_PORTS" ]; then
nmap -p "$OPEN_PORTS" -sV -sC <target> -oA "$OUTPUT_DIR/nmap-services"
else
echo "No open ports found, skipping service detection."
fi
- 报告结果位置
echo "Scan complete. Results saved to: $OUTPUT_DIR"
扫描类型
快速扫描(前1000个端口)
用于初步侦察或时间有限时:
nmap -sV -sC <target> -oA <output-prefix>
-sV:服务版本检测-sC:运行默认NSE脚本-oA:输出所有格式(正常,XML,grepable)- 扫描前1000个最常见的端口
- 持续时间:1-3分钟
全面扫描(所有端口)
用于彻底评估时必须检查所有端口:
nmap -sV -sC -p- <target> -oA <output-prefix>
-p-:扫描所有65535个端口- 持续时间明显更长(5-30+分钟,取决于目标)
- 仅在需要全面覆盖时使用
隐形SYN扫描
尝试避免检测时使用(需要root/sudo):
sudo nmap -sS -sV -sC <target> -oA <output-prefix>
-sS:SYN隐形扫描(不完成TCP握手)- 较不可能被目标记录
- 需要root权限
UDP扫描
需要枚举UDP服务时使用:
sudo nmap -sU --top-ports 100 <target> -oA <output-prefix>
-sU:UDP扫描--top-ports 100:扫描前100个UDP端口(UDP扫描慢)- 常见UDP服务:DNS(53),SNMP(161),DHCP(67/68)
- 非常慢 - 使用top-ports限制范围
积极扫描
用于最大信息收集(嘈杂):
nmap -A -T4 <target> -oA <output-prefix>
-A:启用操作系统检测,版本检测,脚本扫描,traceroute-T4:积极定时模板(更快但更易被检测)- 非常嘈杂 - 将被IDS/IPS检测到
- 仅在获得授权时使用
漏洞扫描
用于检查已知漏洞:
nmap -sV --script vuln <target> -oA <output-prefix>
--script vuln:运行NSE漏洞检测脚本- 检查常见CVE和配置错误
- 可能嘈杂并触发警报
操作系统检测
用于识别操作系统:
sudo nmap -O <target> -oA <output-prefix>
-O:启用操作系统检测- 需要root权限
- 使用TCP/IP堆栈指纹识别
替代扫描类型
如果用户明确请求而不是默认的两阶段策略,则提供以下扫描类型:
快速扫描(仅限前1000个端口)
仅当用户明确请求快速/快速扫描时使用:
nmap -sV -sC <target> -oA <output-dir>/nmap-quick
-sV:服务版本检测-sC:运行默认NSE脚本-oA:输出所有格式(正常,XML,grepable)- 仅扫描前1000个最常见的端口
- 持续时间:1-3分钟
- 限制:可能错过非标准端口上的服务
扫描工作流程
默认工作流程(两阶段策略)
第一阶段:端口发现
- 运行快速SYN扫描:
sudo nmap -p- <target> -oA <output-dir>/nmap-portscan - 检查"主机似乎下线"并重试
-Pn标志 - 等待扫描完成(通常1-3分钟)
第二阶段:服务检测
4. 从第一阶段结果中解析开放端口
5. 运行针对性服务检测:nmap -p <OPEN_PORTS> -sV -sC <target> -oA <output-dir>/nmap-services
6. 等待扫描完成(通常1-3分钟)
第三阶段:分析 7. 审查服务检测结果以确定:
- 哪些服务正在运行?
- 检测到哪些版本?
- 是否有任何有趣服务(Web,SSH,数据库,IoT协议)?
- NSE脚本是否揭示了任何问题?
根据服务检测结果可选的针对性扫描
如果发现Web服务(80, 443, 8080等):
nmap -p 80,443,8080,8443 --script http-* <target> -oA <output-dir>/nmap-web
如果发现SSH:
nmap -p 22 --script ssh-* <target> -oA <output-dir>/nmap-ssh
如果发现RTSP(554):
nmap -p 554 --script rtsp-* <target> -oA <output-dir>/nmap-rtsp
如果怀疑ONVIF/相机:
nmap -p 80,554,8000,8080 --script http-methods,http-headers <target> -oA <output-dir>/nmap-onvif
输出管理
输出格式
始终使用-oA <prefix>生成所有三种格式:
.nmap- 正常人类可读格式.xml- XML格式,用于解析/导入工具.gnmap- Grepable格式,用于命令行处理
定时和性能
定时模板
使用-T<0-5>控制扫描速度:
-T0(偏执):极慢,用于IDS回避-T1(鬼鬼祟祟):非常慢,用于IDS回避-T2(礼貌):慢,带宽消耗较少-T3(正常):默认,平衡速度-T4(积极):快速,推荐用于现代网络-T5(疯狂):非常快,可能会错过结果
默认:使用-T3或省略(默认为T3)
快速扫描:当速度重要且网络可以处理时使用-T4
隐形:用于回避的-T1或-T2
超时考虑
- 第一阶段端口发现(sudo nmap -p-):180-300秒超时(3-5分钟)
- 第二阶段服务检测(nmap -p <ports> -sV -sC):120-180秒超时(2-3分钟)
- UDP扫描:600+秒超时(非常慢)
网络范围
单主机
nmap <ip-address>
CIDR表示法
nmap 192.168.1.0/24
IP范围
nmap 192.168.1.1-254
多个主机
nmap 192.168.1.1 192.168.1.10 192.168.1.100
排除主机
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.254
NSE脚本
常见脚本类别
# 认证脚本
nmap --script auth <target>
# 暴力破解脚本
nmap --script brute <target>
# 默认安全脚本
nmap -sC <target> # 等同于 --script default
# 发现脚本
nmap --script discovery <target>
# 漏洞脚本
nmap --script vuln <target>
# 所有HTTP脚本
nmap --script "http-*" <target>
IoT特定脚本
# RTSP枚举
nmap -p 554 --script rtsp-methods,rtsp-url-brute <target>
# UPnP发现
nmap -p 1900 --script upnp-info <target>
# MQTT发现
nmap -p 1883,8883 --script mqtt-subscribe <target>
# Modbus枚举
nmap -p 502 --script modbus-discover <target>
结果分析
提取关键信息
-
开放端口和服务
- 哪些端口开放?
- 哪些服务正在运行?
- 检测到哪些版本?
-
服务指纹
- 版本检测是否揭示了过时的软件?
- 是否有已知漏洞的检测版本?
-
NSE脚本结果
- 认证问题?
- 信息披露?
- 配置错误?
-
操作系统
- 正在运行什么操作系统?
- 什么操作系统版本?
解析Nmap输出
提取开放端口:
grep "^[0-9]" nmap-output.nmap | grep "open"
提取服务版本:
grep -E "^[0-9]+/tcp.*open" nmap-output.nmap
检查NSE输出中的漏洞:
grep -i "vuln\|cve\|exploit" nmap-output.nmap
常见IoT服务端口
扫描IoT设备时,特别关注:
| 端口 | 服务 | 描述 |
|---|---|---|
| 21 | FTP | 文件传输(通常配置不当) |
| 22 | SSH | 远程管理 |
| 23 | Telnet | 不安全的远程访问 |
| 80 | HTTP | Web界面 |
| 443 | HTTPS | 安全Web界面 |
| 554 | RTSP | 视频流 |
| 1883 | MQTT | IoT消息协议 |
| 3702 | WS-Discovery | ONVIF设备发现 |
| 5000 | UPnP | 通用即插即用 |
| 8000 | HTTP Alt | 替代HTTP端口 |
| 8080 | HTTP代理 | 替代HTTP端口 |
| 8883 | MQTT/TLS | 安全MQTT |
最佳实践
1. 始终保存输出
运行nmap时从不保存输出:
# 好的
nmap -p <ports> -sV -sC <target> -oA output/nmap-services
# 坏的
nmap -sV -sC <target>
2. 始终使用两阶段策略
始终使用默认的两阶段策略,除非明确告知否则:
# 第一阶段:快速端口发现
sudo nmap -p- <target> -oA nmap-portscan
# 第二阶段:开放端口上的服务检测
nmap -p <OPEN_PORTS> -sV -sC <target> -oA nmap-services
3. 使用适当的定时
根据您的需求匹配定时:
# 获得授权的渗透测试:快速
nmap -sV -sC -T4 <target>
# 红队/隐形:慢
nmap -sV -sC -T2 <target>
4. 记录扫描参数
始终记录:
- 使用了什么扫描类型?
- 扫描执行的日期/时间?
- 扫描结果是什么?
- 任何异常或错误?
5. 尊重授权
- 仅扫描您有权扫描的系统
- 尊重范围限制
- 了解扫描对生产系统的影响
- 使用适当的定时以避免DoS
与IoT测试工作流程集成
对于IoT渗透测试
- 运行默认的两阶段扫描(端口发现+服务检测)
- 如果基于开放端口怀疑ONVIF,运行wsdiscovery
- 如果相机上开放端口80/554,运行onvifscan
- 如果发现Web界面,运行针对性的HTTP脚本
输出目录使用
始终保存到组织良好的输出目录:
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"
# 第一阶段:端口发现
sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan"
# 第二阶段:服务检测
nmap -p <OPEN_PORTS> -sV -sC <target> -oA "$OUTPUT_DIR/nmap-services"
故障排除
扫描时间过长
- 使用
-T4进行更快的扫描 - 限制端口范围:
-p 1-1000而不是-p- - 使用
--top-ports 100而不是所有端口
无结果/防火墙
- 尝试不同的扫描类型:
-sS,-sT,-sA - 使用
-Pn跳过主机发现 - 尝试
-f用于分片包 - 考虑使用
--source-port 53或其他受信任端口
需要Root/Sudo
这些扫描类型需要root:
-sS(SYN扫描)-sU(UDP扫描)-O(操作系统检测)- 原始数据包功能
权限被拒绝错误
如果您看到"权限被拒绝"或"操作不允许":
# 使用sudo运行
sudo nmap <options> <target>
示例工作流程
工作流程1:标准单目标扫描(默认)
TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"
# 第一阶段:快速端口发现
sudo nmap -p- $TARGET -oA "$OUTPUT_DIR/nmap-portscan"
# 检查"主机似乎下线"
if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
sudo nmap -p- -Pn $TARGET -oA "$OUTPUT_DIR/nmap-portscan"
fi
# 解析开放端口
OPEN_PORTS=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//')
# 第二阶段:服务检测
if [ -n "$OPEN_PORTS" ]; then
nmap -p "$OPEN_PORTS" -sV -sC $TARGET -oA "$OUTPUT_DIR/nmap-services"
fi
工作流程2:IoT相机测试
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"
# 1. 运行默认两阶段扫描
sudo nmap -p- 192.168.1.100 -oA "$OUTPUT_DIR/nmap-portscan"
OPEN_PORTS=$(grep "^[0-9]" "$OUTPUT_DIR/nmap-portscan.nmap" | grep "open" | cut -d'/' -f1 | tr '
' ',' | sed 's/,$//')
nmap -p "$OPEN_PORTS" -sV -sC 192.168.1.100 -oA "$OUTPUT_DIR/nmap-services"
# 2. 如果检测到ONVIF相机,检查HTTP方法
nmap -p 80 --script http-methods 192.168.1.100 -oA "$OUTPUT_DIR/nmap-http"
# 3. 检查RTSP服务
nmap -p 554 --script rtsp-methods 192.168.1.100 -oA "$OUTPUT_DIR/nmap-rtsp"
工作流程3:额外的UDP/OS检测
OUTPUT_DIR="./nmap-output"
# 在完成默认两阶段扫描后,可选择添加:
# UDP扫描(顶级端口)
sudo nmap -sU --top-ports 100 <target> -oA "$OUTPUT_DIR/nmap-udp"
# 操作系统检测
sudo nmap -O <target> -oA "$OUTPUT_DIR/nmap-os"
# 漏洞扫描
nmap -sV --script vuln <target> -oA "$OUTPUT_DIR/nmap-vuln"
向用户询问的问题
在开始扫描之前,澄清:
- 目标:IP地址或网络范围是什么?
- 范围:单个主机还是网络范围?
- 扫描类型:使用默认的两阶段策略还是用户有特定要求?
- 授权:您有权限扫描此目标吗?
- 特别兴趣:在初始扫描后是否需要关注特定服务或端口?
注意:默认情况下,输出保存到./nmap-output/。
成功标准
成功的nmap扫描包括:
- 第一阶段端口发现完成且无错误
- 第二阶段在所有开放端口上完成服务检测
- 结果以所有格式(-oA)保存在输出目录中
- 识别开放端口并检测服务版本
- 成功执行NSE脚本
- 结果记录并准备好分析
- 提供清晰的摘要,显示:
- 发现的开放端口数量
- 检测到的关键服务
- 输出文件的位置