Nmap:安全审计
发布时间:2026-04-23 11:02
一、前言
搞过渗透测试或安全评估的人都知道,最烦的是拿到一台新服务器根本不知道从哪下手快速摸清它的"家底"。这教程直接给你实战套路,用nmap把目标机器的端口、服务、漏洞全部扒出来,10分钟搞清楚一台服务器的安全状况。
二、操作步骤
第1步:安装nmap(多发行版)
先确认系统里有没有nmap,没有就装上。
CentOS/RHEL:
yum install -y nmap
Loaded plugins: fastestmirror
Setting up Install Process
Package nmap-6.40-19.el7.x86_64 already installed and latest version
Nothing to do
Ubuntu/Debian:
apt-get install -y nmap
Reading package lists... Done
Building dependency tree
Done
nmap is already the newest version (7.91-1).
查看版本:
nmap --version
Nmap version 7.91 ( https://nmap.org )
Platform: x86_64-redhat-linux-gnu
Compiled with: openssl 1.0.2k liblua 5.3.3 nmap-libpcre 7.8
第2步:主机发现
内网渗透或者快速定位存活主机时,先扫一遍哪些机器在线。
nmap -sn -PS22,80,443,3389 192.168.1.0/24
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0038s latency).
PORT STATE SERVICE
22/tcp filtered ssh
3389/tcp filtered ms-wbt-server
Nmap scan report for 192.168.1.10
Host is up (0.0012s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap scan report for 192.168.1.20
Host is up (0.0021s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap scan report for 192.168.1.100
Host is up (0.0008s latency).
All 100 scanned ports on 192.168.1.100 are in ignored states.
Nmap done: 256 IP addresses (4 hosts up) scanned in 12.34 seconds
看到没:192.168.1.1有防火墙挡着,.10只开22,.20开了web服务,.100端口全被过滤。
第3步:基础端口扫描
拿到目标IP后,先快速扫一遍常见端口,看看暴露了哪些服务。
nmap -T4 -F 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.20
Host is up (0.0015s latency).
Not shown: 96 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 5.21 seconds
好家伙,3306直接对外开放了,这数据库端口暴露在外网是几个意思?
第4步:服务版本检测
端口只是表面,关键是这些服务到底是什么版本,有哪些已知漏洞。
nmap -sV --version-intensity 5 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.20
Host is up (0.0018s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips)
443/tcp open ssl Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips)
3306/tcp open mysql MySQL 5.7.23
Service detection performed. 5 services on 1 host.
OpenSSH 7.4要查一下有没有CVE,Apache 2.4.6加OpenSSL 1.0.2k-fips这组合老得很。
第5步:操作系统指纹识别
确认服务器跑的是什么系统,版本对不对。
nmap -O 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Running: Linux 3.10-4.2.x (CentOS 7.x)
OS CPE: cpe:/o:linux:linux_kernel:3.10
OS details: Linux 3.10-4.2.x (CentOS 7.x)
Network Distance: 1 hop
TCP/IP fingerprint:
OS:SCAN(V=7.91%E=4%D=1/12%OT=22%CT=1%CU=40834%PV=Y%DS=1%DC=D%G=Y%M=ACD03C
%TM=65ABC123%P=x86_64-redhat-linux-gnu)SEQ(SP=AA%GCD=1%ISR=BB%TI=Z%CI=Z%II=I
%TS=8)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5=M5
B4ST11NW7%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120)
确认是CentOS 7,内核3.10,物理机或者VM。
第6步:漏洞脚本扫描
nmap内置一堆脚本,专门扫已知漏洞。跑一下看看有没有可利用的问题。
nmap --script vuln 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.20
Host is up (0.0021s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
| http-slowloris-check:
| VULNERABLE:
| Slowloris DOS attack
| State: VULNERABLE
| IDs: CVE:2015-1635
|_ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-1635
443/tcp open https
|_ssl-ccs-injection: No vulns found
|_ssl-cert: Valid
| ssl-dh-params:
| VULNERABLE:
| Diffie-Hellman Key Exchange Weakness
| State: VULNERABLE
| Risk factor: Medium
|_ Key size: 768 bit
3306/tcp open mysql
|_mysql-empty-password: No empty password found
|_mysql-info: ERROR 1045: Access denied for user 'YOUR_USERNAME'@'192.168.1.100'
Nmap done: 1 IP address (1 host up) scanned in 45.67 seconds
挖到了三个问题:
- HTTP slowloris拒绝服务漏洞
- SSL DH密钥交换强度太弱(768位)
- MySQL不允许匿名连接(这个是好事)
第7步:防火墙检测
有时候端口被过滤了,需要确认是不是防火墙在作怪。
nmap -sA -p 22 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.20
Host is up (0.0018s latency).
PORT STATE SERVICE
22/tcp unfiltered ssh
nmap -sA -p 22 192.168.1.1
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0038s latency).
PORT STATE SERVICE
22/tcp filtered ssh
对比结果:192.168.1.20的22端口unfiltered说明防火墙没拦截,192.168.1.1的22被filtered说明有防火墙或者ACL在挡着。
第8步:综合输出报告
把扫描结果导出成文件,方便后续分析或者写报告。
nmap -A -oX /tmp/scan_report.xml -oN /tmp/scan_report.txt 192.168.1.20
cat /tmp/scan_report.txt
# Nmap 7.91 scan initiated Tue Jan 12 03:45:00 2026 as: nmap -A -oX /tmp/scan_report.xml -oN /tmp/scan_report.txt 192.168.1.20
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.1.20
Host is up (0.0018s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips)
443/tcp open ssl Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips)
3306/tcp open mysql MySQL 5.7.23
OS: Linux 3.10-4.2.x (CentOS 7.x)
Network Distance: 1 hop
Host script results:
|_http-slowloris-check: VULNERABLE
|_ssl-dh-params: VULNERABLE (768 bit key)
Nmap done: 1 IP address (1 host up) scanned in 52.34 seconds
三、常见问题FAQ
Q1:扫描内网机器被防火墙拦了,端口全是filtered怎么办?
A:试试半连接扫描(-sS)加上不同的源端口。防火墙如果只放行了特定端口(比如80、443),你可以用-p 80或者用--source-port指定源端口绕过。还有个邪招是用 fragmented packets(-f),把TCP包拆小,很多防火墙对碎片包放行。
Q2:扫描速度太慢,T4还是跑不动,想加速又怕被发现怎么办?
A:老手都知道,速度和安全是Trade-off。T5最快但容易触发IDS。如果内网扫描,追求速度就加--max-retries和--min-parallelism。真正要隐蔽的话,用慢速扫描配合随机延迟,自己写个脚本控制节奏比nmap的timing选项更可控。
Q3:跑漏洞脚本(--script vuln)报错"Script scanning not supported by your version of nmap",怎么回事?
A:基础版本的nmap不带脚本引擎。CentOS/RHEL上yum装的版本经常是被阉割过的。Ubuntu/Debian的apt版本稍微好一点。最佳方案是去nmap官网下载源码编译,或者用你的发行版的完整包。检查一下nse脚本目录:
ls /usr/share/nmap/scripts/ | wc -l
# 正常应该有500+个脚本
Q4:扫描结果里的端口状态到底什么意思?open、filtered、closed有什么区别?
A:open是端口开着且有服务应答;closed是端口没东西在监听但网络可达;filtered是防火墙或者IDS在干扰,你根本不知道下面有没有服务。实际渗透中,filtered端口往往比closed有意思,因为说明目标在意防护。
Q5:为什么扫出来的操作系统版本不准,CentOS显示成Ubuntu?
A:指纹识别不是100%准,容器环境、网络地址转换、修改过的内核都会干扰结果。用--reason看看判断依据,结合-sV的服务版本信息一起看更靠谱。关键是对多个指标交叉验证,别迷信单一输出。
四、总结
搞完这套流程,你对目标机器的状态门清了:
- 存活主机 + 暴露的端口
- 服务版本 + 指纹操作系统
- 已知漏洞 + 防火墙规则
核心要点:
- 先主机发现缩小范围,再针对性深度扫描
- -sV比单纯端口扫描价值高10倍,版本信息才能定位漏洞
- 漏洞脚本不是万能的,但对已知CVE很有效
- 防火墙检测能帮你判断哪些端口是真开了还是被拦了
- 导出的XML可以丢给其他工具(Metasploit、Python脚本)做二次处理
延伸阅读:
- nmap官方脚本库:https://nmap.org/nsedoc/(每个脚本都有说明和用法)
- CVE数据库:查扫出来的版本对应的漏洞
- 《Nmap Network Scanning》官方手册,想深入必读