| name | scanning-network-with-nmap-advanced |
| description | 使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。
|
| domain | cybersecurity |
| subdomain | network-security |
| tags | ["network-security","nmap","port-scanning","service-enumeration","reconnaissance"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Nmap 高级技术进行网络扫描
适用场景
- 在授权评估中对大型企业网络进行全面资产发现
- 枚举服务版本和配置,识别过时或存在漏洞的软件
- 在授权渗透测试中使用扫描规避技术绕过防火墙规则和 IDS
- 使用 Nmap 脚本引擎(NSE)自动化漏洞检测
- 生成结构化扫描输出,集成到漏洞管理流程中
不要在未获明确书面授权的网络上使用,不要在未经批准的情况下于业务高峰期对生产系统操作,不要通过激进扫描时序执行拒绝服务攻击。
前置条件
- 已安装 Nmap 7.90+(通过
nmap --version 验证)
- SYN 扫描、操作系统检测和原始数据包技术需要 root/sudo 权限
- 书面授权,注明目标 IP 范围及任何排除的主机
- 能够访问目标范围(VPN、直连或跳板机)
- 熟悉 TCP/IP 协议和常见端口分配
工作流程
步骤 1:使用多种探测方式进行主机发现
采用分层发现策略,即使 ICMP 被封锁也能找到在线主机:
nmap -sn -PR 192.168.1.0/24 -oA discovery_arp
nmap -sn -PE -PP -PS21,22,25,80,443,445,3389,8080 -PU53,161,500 10.0.0.0/16 -oA discovery_combined
nmap -sL 10.0.0.0/24 -oN dns_resolution.txt
将结果汇总到在线主机列表:
grep "Host:" discovery_combined.gnmap | awk '{print $2}' | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n > live_hosts.txt
步骤 2:带时序和性能调优的端口扫描
nmap -sS -p- --min-rate 5000 --max-retries 2 -T4 -iL live_hosts.txt -oA full_tcp_scan
nmap -sU --top-ports 1000 --version-intensity 0 -T4 -iL live_hosts.txt -oA udp_scan
nmap -sS -p 1-1024,3306,5432,6379,8080-8090,9200,27017 -iL live_hosts.txt -oA targeted_ports
步骤 3:服务版本检测和操作系统识别
nmap -sV --version-intensity 5 -sC -O --osscan-guess -p <open_ports> -iL live_hosts.txt -oA service_enum
nmap -sV --version-all -p 8443 --script ssl-cert,http-title,http-server-header <target> -oN service_detail.txt
步骤 4:NSE 漏洞扫描
nmap --script vuln -p <open_ports> -iL live_hosts.txt -oA vuln_scan
nmap --script smb-vuln-ms17-010,smb-vuln-ms08-067 -p 445 -iL live_hosts.txt -oA smb_vulns
nmap --script ssl-heartbleed,ssl-poodle,ssl-ccs-injection -p 443,8443 -iL live_hosts.txt -oA ssl_vulns
nmap --script http-default-accounts,ftp-anon,ssh-auth-methods -p 21,22,80,8080 -iL live_hosts.txt -oA default_creds
步骤 5:防火墙规避技术
nmap -sS -f --mtu 24 -p 80,443 <target> -oN fragmented_scan.txt
nmap -sS -D RND:10 -p 80,443 <target> -oN decoy_scan.txt
nmap -sS --source-port 53 -p 1-1024 <target> -oN spoofed_port_scan.txt
nmap -sI <zombie_host> -p 80,443,445 <target> -oN idle_scan.txt
nmap -sS -T1 --max-rate 10 -p 1-1024 <target> -oA stealth_scan
步骤 6:输出解析与报告
xsltproc full_tcp_scan.xml -o scan_report.html
grep "Ports:" full_tcp_scan.gnmap | awk -F'Ports: ' '{print $1 $2}' > open_ports_summary.txt
nmap-parse-output full_tcp_scan.xml hosts-to-port 445
msfconsole -q -x "db_import full_tcp_scan.xml; hosts; services; exit"
nmap-parse-output full_tcp_scan.xml csv > scan_results.csv
核心概念
| 术语 | 定义 |
|---|
| SYN 扫描(-sS) | 半开放 TCP 扫描,发送 SYN 包并分析响应,不完成三次握手,比全连接扫描更快更隐蔽 |
| NSE(Nmap 脚本引擎) | Nmap 内置的基于 Lua 的脚本框架,支持漏洞检测、暴力破解、服务发现和自定义自动化 |
| 时序模板(-T0 至 -T5) | 预定义扫描速度配置,从偏执(T0)到疯狂(T5),控制探测并行度、超时值和探测间隔 |
| 空闲扫描(-sI) | 高级扫描技术,利用僵尸主机的 IP ID 序列对目标进行端口扫描,无需从扫描器自身 IP 发送数据包 |
| 版本强度 | 控制 Nmap 为确定服务版本发送的探测数量,从 0(轻量)到 9(全部探测),以速度换精度 |
| 可检索输出(-oG) | Nmap 历史输出格式,专为使用 grep、awk 和 sed 进行脚本化分析而设计 |
工具与系统
- Nmap 7.90+:核心扫描引擎,支持 NSE 脚本、操作系统检测、版本探测和多种输出格式
- nmap-parse-output:社区工具,用于将 Nmap XML 输出解析为结构化格式(CSV、JSON、主机列表)
- Ndiff:Nmap 工具,用于比较两次扫描结果,识别网络状态随时间的变化
- Zenmap:官方 Nmap 图形界面,提供可视化网络拓扑映射和扫描配置文件管理
- Metasploit Framework:导入 Nmap XML 输出,将扫描结果与漏洞利用模块直接关联
常见场景
场景:企业网络资产发现与漏洞基线建立
背景:安全团队需要为覆盖 10.0.0.0/8、约有 5,000 台活跃主机的企业网络建立漏洞基线。扫描须在周末维护窗口内完成,同时将网络影响降至最低。
方法:
- 针对所有 /24 子网运行分层主机发现:ARP(本地子网)、TCP SYN(端口 22,80,443,445,3389)和 ICMP 回显探测
- 对发现的主机使用
--min-rate 5000 和 -T4 进行全端口 TCP SYN 扫描,确保在维护窗口内完成
- 对所有开放端口运行服务版本检测和默认 NSE 脚本
- 针对关键服务(SMB、SSL/TLS、HTTP)执行定向 NSE 漏洞脚本
- 解析 XML 输出生成各子网 CSV 报告,并导入漏洞管理平台
- 设置 Ndiff 定期与后续扫描对比,跟踪修复进度
注意事项:
- 在拥塞网络段将
--min-rate 设置过高,导致数据包丢失和漏报
- 在生产网络上运行
-T5(疯狂)时序,可能导致老旧网络设备过载
- 忘记扫描 UDP 端口,遗漏 SNMP(161)、DNS(53)和 TFTP(69)等关键服务
- 未以 XML 格式(
-oX 或 -oA)保存输出,导致结构化数据无法供下游工具使用
输出格式
## Nmap 扫描摘要
**扫描配置**:全端口 TCP + Top 200 UDP + 服务枚举
**目标范围**:10.10.0.0/16
**发现主机**:347 台在线主机
**扫描时长**:2 小时 14 分钟
### 严重发现
| 主机 | 端口 | 服务 | 版本 | 漏洞 |
|------|------|------|------|------|
| 10.10.5.23 | 445/tcp | SMB | Windows Server 2012 R2 | MS17-010 (EternalBlue) |
| 10.10.8.100 | 443/tcp | Apache httpd | 2.4.29 | CVE-2021-41773(路径遍历) |
| 10.10.12.5 | 3306/tcp | MySQL | 5.6.24 | CVE-2016-6662(远程代码执行) |
| 10.10.3.77 | 161/udp | SNMP | v2c | 公共团体字符串 |
### 建议
1. 立即修补 10.10.5.23 的 MS17-010——严重远程代码执行漏洞
2. 将 10.10.8.100 的 Apache httpd 升级至 2.4.58+
3. 将 10.10.12.5 的 MySQL 升级至 8.0.x 并限制绑定地址
4. 更改 10.10.3.77 的 SNMP 团体字符串(不使用"public")