介绍
Nmap(Network Mapper)是Kali内置最经典端口扫描器,底层基于TCP/IP栈,可做端口探测、服务识别、操作系统指纹识别、脚本检测。
Nmap 常用参数
nmap [扫描类型] [参数] <目标IP/网段>
| 参数 | 作用说明 |
|---|---|
-sS |
SYN半开扫描(默认root权限下,最常用,不完成TCP三次握手) |
-sT |
TCP全连接扫描,普通用户权限可用,容易被日志记录 |
-sU |
UDP端口扫描,速度慢,用于DNS、SNMP等UDP服务 |
-sF |
FIN隐秘扫描,针对部分无状态防火墙 |
-Pn |
不进行主机存活探测,直接扫描端口;目标禁ping时必用 |
-sn |
仅主机存活扫描,不扫端口(ping扫描) |
-p 端口 |
指定端口:-p 80;多端口-p 22,80,443;范围-p 1-1000;全部端口-p- |
-F |
快速扫描,只扫描常用100个端口 |
-T0 ~ T5 |
扫描时序模板:T0最慢(极隐秘),T5最快(暴力,极易触发WAF);常用-T4 |
-oN |
输出普通文本报告 |
-oX |
输出XML报告,可导入Metasploit、Nessus |
-oG |
grep格式报告,方便shell处理 |
-A |
全能扫描:同时开启服务版本探测+操作系统识别+脚本扫描+路由追踪 |
-sV |
服务版本探测,识别端口上运行程序与版本号 |
-O |
操作系统指纹识别(OS识别) |
--script |
调用NSE脚本引擎 |
-iL |
从文件读取目标列表,批量扫描 |
端口扫描基础用法
- 简单SYN扫描(root)
nmap -sS 192.168.1.100 - 指定端口范围扫描
nmap -sS -p 1-1000 192.168.1.100 - 扫描全部65535端口
nmap -sS -p- 192.168.1.100 - 目标禁止ping,跳过主机探测
nmap -sS -Pn 192.168.1.100
服务探测
探测端口对应的应用程序、版本信息,用于后续漏洞查找。
nmap -sS -sV -p 22,80,443 192.168.1.100
输出示例:
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.49
4. 操作系统版本识别 -O
依靠TCP/IP协议栈指纹比对识别目标操作系统。
限制:需要root权限;目标防火墙可能伪造指纹,结果为推测,不是100%准确。
nmap -sS -O 192.168.1.100
-A等价于-sV -O --script default -traceroute,一键全能扫描:nmap -sS -A 192.168.1.100
Nmap 高级用法
1. 隐秘扫描(规避检测)
SYN半开扫描
-sS
不完成三次握手,目标系统日志一般不会记录完整连接,是最常用低噪音扫描。必须root权限。
FIN扫描
-sF
发送FIN包;关闭端口会返回RST,开放端口忽略。
局限性:Windows系统会对FIN包统一返回RST,对Windows无效。nmap -sF -p1-100 192.168.1.100空闲扫描
-sI(僵尸扫描)
借助一台“僵尸主机”做中间人,扫描源IP显示为僵尸主机,隐藏自身IP。条件苛刻,现代环境很难成功。nmap -sI 僵尸主机IP 目标IP减速扫描降低告警:
-T0nmap -sS -T0 -Pn 192.168.1.100
2. 批量扫描网段/目标文件
- CIDR网段扫描(192.168.1.0/24整个C段)
nmap -sS -sn 192.168.1.0/24 - 读取txt文件内多个目标批量扫描
新建targets.txt每行一个IP:192.168.1.100 192.168.1.101nmap -sS -iL targets.txt
3. Nmap漏洞扫描(NSE脚本引擎)
NSE(Nmap Scripting Engine)内置大量脚本,可做弱口令、漏洞检测、目录探测。
脚本目录:/usr/share/nmap/scripts/
使用漏洞分类脚本
vulnnmap -sS --script vuln 192.168.1.100vuln脚本只做简单漏洞探测,不等于专业漏扫工具(OpenVAS/Nessus),误报较多。
指定单个脚本(例如检测http弱口令)
nmap -sS --script http-default-accounts 192.168.1.100
4. 输出报告
# 文本报告
nmap -sS -oN scan.txt 192.168.1.100
# XML报告(导入Metasploit)
nmap -sS -oX scan.xml 192.168.1.100
# grep格式方便筛选
nmap -sS -oG scan.gnmap 192.168.1.100
Nmap 端口4种核心状态
Nmap扫描输出中最关键4个状态:open / closed / filtered / unfiltered
1. open(开放)
目标端口正在监听应用程序,收到探测包并正常响应。
含义:该端口对外提供服务,可以建立连接。
示例:80/tcp open http
2. closed(关闭)
端口是开启的,但没有程序监听该端口;目标主机收到探测包后回复RST重置包。
主机存活,但是端口没有服务。
内网环境下常见。
3. filtered(被过滤)
Nmap收不到目标的任何响应包。
原因:防火墙、ACL策略、WAF拦截探测包,丢弃数据包,不返回任何应答。
Nmap无法判断端口是开还是关。
4. unfiltered(未过滤)
仅在TCP ACK扫描 -sA 才会出现。
ACK包发出去收到RST应答,说明数据包可以到达目标,没有防火墙拦截,但无法确定端口本身是open还是closed。
补充两种较少见状态
- open|filtered:Nmap无法区分开放/过滤,UDP扫描、隐秘扫描经常出现;
- closed|filtered:无法区分关闭还是被过滤。
快速区分记忆
- open:端口有服务,能连通
- closed:主机在线,端口没开服务
- filtered:包被防火墙丢了,无应答
- unfiltered:包可达防火墙,但是不知道端口是否开放(ACK扫描特有)