Nmap 是一个开源的网络连接端扫描软件,用来扫描计算机开放的网络连接端,确定哪些服务运行在哪些连接端,并推断计算机运行哪个操作系统。另外,它也用于评估网络系统安全。
https://nmap.org/
Zenmap 是 Nmap 的图形化界面。
1. 探测主机信息
Nmap 支持多种扫描方式,包括 TCP Syn、TCP Connect、 TCP ACK、TCP FIN/Xmas/NULL、UDP 等。
| 参数 | 说明 |
|---|---|
| -sT | TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息 |
| -sS | 半开扫描,很少有系统能够把它记入系统日志。不过,需要 root 权限 |
| -sF -sN | 秘密 FIN 数据包扫描、Xmas Tree、Null 扫描模式 |
| -sP | ping 扫描,Nmap 在扫描端口时,默认都会使用 ping 扫描,只有主机存活,Nmap 才会继续扫描 |
| -sU | UDP 扫描,但 UDP 扫描是不可靠的 |
| -sA | 这项高级的扫描方法通常用来穿过防火墙的规则集 |
| -sV | 探测端口服务版本 |
| -P0 | 扫描之前不需要用 ping 命令,有些防火墙禁止用 ping 命令。可以使用此选项进行扫描 |
| -v | 显示扫描过程,推荐使用 |
| -h | 帮助选项,是最清楚的帮助文档 |
| -p | 指定端口,如“1~65536、1433、135、22、80”等 |
| -O | 启用远程操作系统检测,存在误报 |
| -A | 全面系统检测、启用脚本检测、扫描等 |
| -oN/-oX/-oG | 将报告写入文件,分别是正常、XML、grepable 三种格式 |
| -T4 | 针对 TCP 端口禁止动态扫描延迟超过 10ms |
| -iL | 读取主机列表,例如,“-iL C:\ip.txt” |
案例一:扫描指定 IP 所开放的端口
sudo nmap -sS -p 1-65535 -v 指定IP
案例二:网段存活主机发现
nmap -sP 指定IP/24
对目标域名解析 IP 所在的 C 段(/24 -- 子网掩码 255.255.255.0)执行 Ping 扫描,快速探测该网段内的存活主机,且不进行端口扫描
- 在较新的 Nmap 版本中,官方建议使用
-sn来代替-sP(意思更明确:Ping Scan, No Port Scan),虽然-sP为了兼容性依然能用,但-sn是更规范的写法。
案例三:指定端口扫描
nmap -p 80,1433,22,1521 指定IP
案例四:探测主机操作系统
sudo nmap -O www.xxxxx.com
案例五:全面的系统探测
nmap -v -A www.xxxxx.com
- nmap 默认扫描主机 1000 个高危端口,若需要全面检测端口,则需加入
-p 1-65535或-p-
案例六:穿透防火墙进行扫描
nmap -Pn -A 指定IP
跳过主机存活检测(Ping)(一些防火墙禁用 ping),强制对目标主机执行包含操作系统探测、服务版本识别、脚本扫描及路由追踪的强力综合扫描。
2. Nmap 脚本引擎
Nmap 不仅用于端口扫描、服务检测,还有强大的脚本引擎 -- Nmap Script。
nmap 安装目录下存在 scripts 文件夹,其中有许多以 .nse 为后缀名的文本文件,即 nmap 自带的脚本引擎。也可以自己编写 Nmap script。
-
Nmap Script 可以实现漏洞扫描、漏洞利用、目录扫描等实用功能。
-
使用脚本引擎只需添加命令
--script=脚本名称
案例一:扫描 Web 敏感目录
nmap -p 80 --script=http-enum.nse 指定IP
-
调用 Nmap 脚本引擎(NSE)中的
http-enum脚本。 -
脚本原理: 这个脚本内部内置了一个包含大量常见目录(如
/admin,/login,/test,/backup)和指纹的字典。它会向服务器发送 HTTP 请求,尝试访问这些路径,根据返回结果(如 200 OK 或 401 Unauthorized)来判断这些目录是否存在。 -
Nmap 版的“目录扫描器”(轻量级的 Dirbuster 或 Gobuster)。
案例二:扫描 SqlInjection
扫描 SQL 注射漏洞,用到 http-sql-injection.nse 脚本文件。
nmap -p 80 --script=http-sql-injection.nse 指定IP
案例三:使用所有的脚本进行扫描
nmap --script all 指定IP
- 此命令非常耗时,最好把记录保存到文档中。
案例四:使用通配符扫描
nmap --script "http-*" 指定IP 表示使用所有以 http- 开头的脚本扫描。脚本参数必须用双引号引起来,保护 Shell 的通配符。
Nmap 还可以用来检测主机漏洞、密码暴力破解等,详见官网。