Nmap 漏洞扫描

Nmap(Network Mapper)是网络安全领域最常用的端口扫描和漏洞探测工具,支持数千款 NSE 脚本,可快速识别存活主机、开放端口、服务版本及潜在漏洞。

1. 基础扫描

1.1 存活主机发现


# Ping 扫描(快速发现)
nmap -sn 192.168.1.0/24 -oG ping_scan.txt

# SYN 半连接扫描(快,隐蔽)
nmap -sS 10.0.0.1 -oN syn_scan.txt

# 全端口扫描(1-65535)
nmap -sT -p- 10.0.0.1 -oN full_port.txt

1.2 服务版本识别


nmap -sV --version-intensity 5 10.0.0.1 -oN version_scan.txt
# -sV 探测服务版本
# --version-intensity 0-9,强度越高越慢越准确

2. NSE 脚本引擎

NSE(Nmap Scripting Engine)是 Nmap 最强大的扩展,支持 Lua 语言编写的脚本,覆盖漏洞检测、暴力破解、信息搜集等场景。

2.1 常用脚本分类

类别 脚本 用途
vuln smb-vuln-*, http-vuln-* 漏洞检测
exploit smb-vuln-ms17-010 漏洞利用
auth ssh-brute, ftp-anon 弱口令检测
discovery ssh-hostkey, smb-os-discovery 信息搜集
brute mysql-brute, redis-brute 暴力破解

2.2 漏洞扫描示例


# 全漏洞扫描(vuln 类别)
nmap --script=vuln -sV 10.0.0.1 -p- -oN nmap_vuln.txt

# 针对 SMB 漏洞(永恒之蓝 MS17-010)
nmap --script=smb-vuln-ms17-010.nse -p445 10.0.0.1

# 针对 SSL/TLS 漏洞(心脏出血、POODLE 等)
nmap --script=ssl-*,tls-* -sV -p443 10.0.0.1

# HTTP 漏洞检测
nmap --script=http-vuln* -sV 10.0.0.1 -p80,443,8080

# MySQL 弱口令检测
nmap --script=mysql-brute -p3306 10.0.0.1

2.3 自定义脚本执行


# 使用默认脚本库
nmap --script=default,safe 10.0.0.1

# 指定脚本文件
nmap --script=/path/to/custom-script.nse 10.0.0.1

# 脚本参数传递
nmap --script=mysql-brute --script-args=mysql-brute.userdb=users.txt,mysql-brute.passdb=pass.txt 10.0.0.1 -p3306

3. 输出格式


# 标准输出(-oN)、XML(-oX)、Grepable(-oG)、JSON(-oJ)
nmap -sV 10.0.0.1 -oA nmap_result
# 生成:nmap_result.nmap / nmap_result.xml / nmap_result.gnmap

# 实时显示
nmap -sV --reason 10.0.0.1
# --reason 显示判断依据(open|filtered|closed)

4. 常见扫描场景


# 场景一:快速资产盘点
nmap -sn -T4 -oG quick_scan.gnmap 10.0.0.0/24

# 场景二:Web 服务深度检测
nmap -sV -p80,443,8080,8443 --script=http-enum,http-title,http-headers 10.0.0.1

# 场景三:数据库端口扫描
nmap -sV -p3306,5432,6379,mongodb://27017 --script=mongo-brute,redis-brute,mysql-brute 10.0.0.1

# 场景四:内网横向 — 批量扫常见漏洞端口
nmap -sV --script=vuln -p22,445,3389,5900 -iL hosts.txt -oN lateral.txt

5. 隐蔽扫描(规避检测)


# 随机源 IP(-S 指定源 IP,需要 -e 网卡)
nmap -sS -D 10.0.0.5,10.0.0.6,10.0.0.7 10.0.0.100

# 限速(--min-rate 降低发包速率)
nmap -sS --min-rate 100 -max-retries 1 10.0.0.1

# 分片(绕过 IDS)
nmap -sS -f 10.0.0.1

# 僵尸扫描(源 IP 欺骗,需要可控僵尸主机)
nmap -sI zombie_host 10.0.0.100

6. 下一步