Nmap详解
Nmap(网络映射器)是一款开放源代码的网络探测和安全审核工具,它被设计用来快速扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。
Nmap的特点:
- 主机探测:探测网络上的主机,如列出响应TCP和ICMP请求、开放特别端口的主机
- 端口扫描:探测目标主机所开放的端口
- 版本检测:探测目标主机的网络服务,版本其服务名称及版本号
- 系统检测:探测目标主机的操作系统及网络设备的硬件特征
- 支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和lua编程语言
入门Nmap
- 扫描参数
在命令行直接执行Nmap或查看帮助文档Nmap --help将显示Nmap的用法及其功能
-iL: 从文件中导入目标主机或者目标网段
-iR: 随机选择目标主机
--exclude: 后面跟的主机或网段将不在扫描范围内
--excludefile: 导入文件中的主机或网段将不在扫描范围中
与主机发现方法相关的参数如下:
-sL: List Scan (列表扫描),仅列举指定目标的IP,不进行主机发现
-Sn: Ping Scan,只进行主机发现,不进行端口扫描
-Pn: 将所有指定的主机视作已开启,跳过主机发现的过程
PS/PA/PU/PY [portlist]: 使用TCP SYN/ACK或SCTP INIT/ECHO方式来发现
PE/PP/PM: 使用ICMP echo、timestamp、 netmask请求包发现主机
-PO [protocollist]: 使用IP协议包探测对方主机是否开启
-n/-R: -n表示不进行DNS解析-R表示总是进行DNS解析
--dns-servers<serv1[,serv2],...>: 指定DNS服务器
--system-dns: 指定使用系统的DNS服务器
--traceroute:追踪每个路由节点
与常见的端口扫描方法相关的参数如下:
-sS/sT/sA/sW/sM: 指定使用TCP SYN/Connect () /ACK/Window/Maimon scans的方式对目标主机进行扫描
-sU: 指定使用UDP扫描的方式确定目标主机的UDP端口状况
-sN/sF/sX: 指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测
对方的TCP端口状态
--scanflags<flags>: 定制TCP包的flags
-s|<zombie host [: probeport] >: 指定使用ldle scan的方式扫描目标
主机(前提是需要找到合适的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况
-sO: 使用IP protocol扫描确定目标机支持的协议类型
-b<FTP relay host>: 使用FTP bounce scan扫描方式
跟端口参数与扫描顺序的设置相关的参数如下:
-p<port ranges>: 扫描指定的端口
-F: Fast mode (快速模式),仅扫描TOP 100的端口
-r: 不进行端口随机打乱的操作(如无该参数,Nmap会将要扫描的端口以
随机顺序的方式进行扫描,让Nmap的扫描不易被对方防火墙检测到)
--top-ports <number>: 扫描开放概率最高的number个端口(Nmap的作者曾做过大规模的互联网扫描,以此统计网络上各种端口可能开放的概率,并排列出最有可能开放端口的列表,具体可以参见nmap-services文件,默认情况下,Nmap会扫描最有可能的1000个TCP端口)
--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,概率大于--port-ratio的端口才被扫描,显然参数必须在0~1之间,想了解具体的概率范围可以查看nmap-services文件
与版本侦测相关的参数如下所示:
-sV: 指定让Nmap进行版本侦测
--version-intensity<level>: 指定版本侦测的强度(0~9),默认为7,数值越高,探测出的服务越准确,但是运行时间会比较长
--version-light: 指定使用轻量级侦测方式(intensity2)
--version-all: 尝试使用所有的probes进行侦测(intensity 9)
--version-trace: 显示出详细的版本侦测过程信息
在了解以上参数及其含义后,再来看用法会更好理解,扫描命令格式: Nmap+扫描参数+目标地址或网段,比如一次完整的Nmap扫描命令如下:nmap-T4-A-v ip其中-A表示使用进攻性(Aggressive) 方式扫描;-T4表示指定扫描过程使用的时序(Timing);共有6个级别(0~5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通信状况良好的情况下推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态
常用方法
Nmap的参数较多,但是通常用不了那么多,以下是在渗透测试过程中比较常见的命令
- 扫描单个目标地址
在Nmap后面直接添加目标地址即可扫描
root@kali:~# nmap 192.168.1.100
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-28 10:29 CST
Nmap scan report for 192.168.1.100
Host is up (0.0016s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
MAC Address: 00:0C:29:FE:8D:2D (VMware)
Nmap done: 1 IP address (1 host up) scanned in 3.48 seconds
- 扫描多个目标地址
如果目标地址不在同一个网段,或在同一个网段但不连续且数量不多,可以使用下面的方法进行扫描:
root@kali:~# nmap 192.168.1.100 182.61.200.6
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-28 10:33 CST
Nmap scan report for 192.168.1.100
Host is up (0.00059s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
MAC Address: 00:0C:29:FE:8D:2D (VMware)
Nmap scan report for 182.61.200.6
Host is up (0.039s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 2 IP addresses (2 hosts up) scanned in 9.10 seconds
- 扫描一个范围内的目标地址
可以指定扫描一个连续的网段,中间使用-连接,例如,下列命令表示扫描范围为192.168.0.100-192.168.0.110
nmap 192.168.1.100-110
- 扫描目标地址所在的某个网段
以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为192.168.1.1-192.168.1.255
nmap 192.168.1.100/24
- 扫描主机列表1.txt中的所有目标地址
nmap -iL 1.txt
- 扫描除某一个目标地址之外的所有目标地址
nmap 192.168.1.100/24 -exclude 192.168.1.1
- 扫描除某一文件中的目标地址之外的目标地址
nmap 192.168.1.100/24 -excludefile 1.txt
- 扫描某一目标地址的22、445、8080端口
nmap 192.168.1.100 -p 22,445,8080
- 对目标地址进行路由跟踪
nmap --traceroute 192.168.1.100
- 扫描目标地址所在C段的在线状态
nmap -sP 192.168.1.100/24
- 目标地址的操作系统指纹识别
nmap -O 192.168.1.100
- 目标地址提供的服务版本检测
nmap -sV 192.168.1.100
- 探测防火墙状态
nmap -sF -T4 192.168.1.100
状态识别
nmap输出的是扫描列表,包括端口号、服务名称、服务版本及协议
Nmap进阶
Nmap的脚本主要分为以下几类:
Auth:负责处理鉴权证书(绕过鉴权)的脚本
Broadcast:在局域网内探查更多服务的开启情况,如DHCP/DNS/SQLServer等
Brute:针对常见的应用提供暴力破解方式,如HTTP/SMTP等
Default:使用-sC或-A选择扫描时默认的脚本,提供基本的脚本扫描能力
Discovery:对网络进行更多信息的收集,如SMB枚举、SNMP查询等
Dos:用于进行拒绝服务攻击
Exploit:利用已知的漏洞入侵系统
External:利用第三方的数据库或资源,如Whois解析
Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞
Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
Malware:探测目标是否感染了病毒、开启后门等信息
Safe:此类与Intrusive相反,属于安全性脚本
Version:负责增强服务与版本扫描功能的脚本
Vuln:负责检查目标是否有常见漏洞,如MS08-067
常见脚本
用户还可根据需要设置–script=类别进行扫描
-sC/--script=default: 使用默认的脚本进行扫描
--script=<Lua scripts>: 使用某个脚本进行扫描
--script-args=key1=value1,key2=value.....: 该参数用于传递脚本里的参数,key1是参数名,该参数对应value1这个值;如有更多的参数,使用逗号连接
--script-args-file=filename: 使用文件为脚本提供参数
--script-trace: 如果设置该参数,则显示脚本执行过程中发送与接收的数据
--script-updatedb: 在Nmap的scripts目录里有一个script.db文件,该文件保存了当前Nmap可用的脚本,类似于一个小型数据库, 如果我们开启Nmap并调用了此参数,则Nmap会自行扫描scripts目录中的扩展脚本,进行数据库更新
--script-help: 调用该参数后,Nmap会输出该脚本对应的脚本使用参数,以及详细的介绍信息
- 鉴权扫描
使用–script=auth可以对目标主机或者目标主机所在的网段进行应用弱口令检测
nmap --script=auth 192.168.1.100
- 暴力破解攻击
Nmap具有暴力破解的功能,可对数据库、SMB、SNMP等进行简单密码的暴力猜解
nmap --script=brute 192.168.1.100
- 扫描常见的漏洞
Nmap具备漏洞扫描的功能,可以检查目标主机或网段是否存在常见的漏洞
nmap --script=vuln 192.168.1.100
- 应用服务扫描
Nmap具备很多常见应用服务的扫描脚本,例如VNC服务、MySQL服务、Telnet服务、Rsync服务等,此处以VNC服务为例:
nmap --script=realvnc-auth-bypass 192.168.1.100
- 探测局域网内更多服务开启的情况
nmap -n -p 445 --script=broadcast 192.168.1.100
- Whois解析
利用第三方的数据库或资源查询目标地址的信息
nmap -script external baidu.com
获取目标主机的操作系统,其中Pn和-p0参数的意思是不使用ping的方式,而且假定所有主机系统都是活动的,可以穿透防火墙,也可以避免被防火墙发现
nmap -O -Pn/p0 miaosj.cn