Nmap详解
Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见的安全漏洞。它的图形化界面是Zenmap,分布式框架为DNmap。
Nmap的特点如下。
(1)主机探测:探测网络上的存活主机、开放特别端口的主机。
(2)端口扫描:探测目标主机所开放的端口。
(3)版本检测:探测目标主机的网络服务,判断其服务名称及版本号。
(4)系统检测:探测目标主机的操作系统及网络设备的硬件特性。
(5)支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言。
Nmap的安装
从Nmap官网下载Nmap,按照提示一步步安装即可,如图3-56所示。
图3-56
Nmap入门
1.扫描参数
进入安装目录后,在命令行直接执行nmap命令,将显示Namp的用法及其功能,如图3-57所示。
图3-57
在讲解具体的使用方法前,先介绍Nmap的相关参数的含义与用法。
首先,介绍设置扫描目标时用到的相关参数。
(1)-iL:从文件中导入目标主机或目标网段。
(2)-iR:随机选择目标主机。
(3)--exclude:后面跟的主机或网段将不在扫描范围内。
(4)--excludefile:导入文件中的主机或网段将不在扫描范围中。
与主机发现方法相关的参数如下。
(1)-sL:List Scan,仅列举指定目标的IP地址,不进行主机发现。
(2)-sn:Ping Scan,只进行主机发现,不进行端口扫描。
(3)-Pn:将所有指定的主机视作已开启,跳过主机发现的过程。
(4)-PS/PA/PU/PY[portlist]:使用TCP SYN/ACK或SCTP INIT/ECHO的方式进行主机发现。
(5)-PE/PP/PM:使用ICMP echo、timestamp、netmask请求包发现主机。
(6)-PO[protocollist]:使用IP协议包探测对方主机是否开启。
(7)-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析。
(8)--dns-servers <serv1[,serv2],...>:指定DNS服务器。
(9)--system-dns:指定使用系统的DNS服务器。
(10)--traceroute:追踪每个路由节点。
与常见的端口扫描方法相关的参数如下。
(1)-sS/sT/sA/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scan的方式对目标主机进行扫描。
(2)-sU:指定使用UDP扫描的方式确定目标主机的UDP端口状况。
(3)-sN/sF/sX:指定使用TCP Null/FIN/Xmas scan秘密扫描的方式协助探测对方的TCP端口状态。
(4)--scanflags <flags>:定制TCP包的flags。
(5)-sI <zombie host[:probeport]>:指定使用Idle scan的方式扫描目标主机(前提是需要找到合适的僵尸主机)。
(6)-sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况。
(7)-sO:使用IP protocol扫描确定目标机支持的协议类型。
(8)-b <FTP relay host>:使用FTP bounce scan的方式扫描。
跟端口参数与扫描顺序的设置相关的参数如下。
(1)-p <port ranges>:扫描指定的端口。
(2)-F:Fast mode,仅扫描Top100的端口。
(3)-r:不进行端口随机打乱的操作(如无该参数,Nmap会将要扫描的端口以随机顺序的方式进行扫描,让Nmap的扫描不易被对方防火墙检测到)。
(4)--top-ports <number>:扫描开放概率最高的“number”个端口。Nmap的作者曾做过大规模的互联网扫描,以此统计网络上各种端口可能开放的概率,并排列出最有可能开放端口的列表,具体可以参见nmap-services文件。默认情况下,Nmap会扫描最有可能的1000个TCP端口。
(5)--port-ratio <ratio>:扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,概率大于--port-ratio的端口才被扫描。显然,参数必须在0~1,想了解具体的概率范围,可以查看nmap-services文件。
与版本侦测相关的参数如下。
(1)-sV:指定让Nmap进行版本侦测。
(2)--version-intensity <level>:指定版本侦测的强度(0~9),默认为7。数值越高,探测出的服务器端越准确,但是运行时间会比较长。
(3)--version-light:指定使用轻量级侦测方式。
(4)--version-all:尝试使用所有的probes进行侦测。
(5)--version-trace:显示详细的版本侦测过程信息。
在了解了以上参数及其含义后,再来看用法会更好理解。扫描命令格式:Nmap+扫描参数+目标地址或网段。假设一次完整的Nmap扫描命令如下:
nmap -T4 -A -v ip
其中,-T4表示指定扫描过程中使用的时序(Timing),共有6个级别(0~5),级别越高,扫描速度越快,但也越容易被防火墙或IDS检测屏蔽,在网络通信状况良好的情况下,推荐使用-T4。-A表示使用进攻性(Aggressive)的方式扫描。-v表示显示冗余(Verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。
2.常用方法
虽然Nmap的参数较多,但通常不会全部用到,以下是在渗透测试过程中比较常见的命令。
(1)扫描单个目标地址。
在“nmap”后面直接添加目标地址即可扫描,如图3-58所示。
nmap 10.172.10.254
图3-58
(2)扫描多个目标地址。
如果目标地址不在同一网段,或在同一网段但不连续且数量不多,则可以使用该方法进行扫描,如图3-59所示。
nmap 10.172.10.254 10.172.10.2
图3-59
(3)扫描一个范围内的目标地址。
可以指定扫描一个连续的网段,中间使用“-”连接。例如,下列命令表示扫描范围为10.172.10.1 ~ 10.172.10.10,如图3-60所示。
nmap 10.172.10.1-10
图3-60
(4)扫描目标地址所在的某个网段。
以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为10.172.10.1 ~ 10.172.10.255,如图3-61所示。
nmap 10.172.10.1/24
图3-61
(5)扫描主机列表targets.txt中的所有目标地址。
扫描1.txt中的地址或者网段,如果1.txt文件与nmap.exe在同一个目录下,则直接引用文件名即可(或者输入绝对路径),如图3-62所示。
nmap -iL 1.txt
图3-62
(6)扫描除某一个目标地址之外的所有目标地址。
下列命令表示扫描除10.172.10.100之外的其他10.172.10.x地址。从扫描结果来看,确实没有对10.172.10.100进行扫描,如图3-63所示。
nmap 10.172.10.1/24 -exclude 10.172.10.100
图3-63
(7)扫描除某一文件中的目标地址之外的目标地址。
下列命令表示扫描除1.txt文件中涉及的地址或网段之外的目标地址。还是以扫描10.172.10.x网段为例,在1.txt中添加10.172.10.100和10.172.10.105,从扫描结果来看,已经证实该方法有效,如图3-64所示。
nmap 10.172.10.1/24 -excludefile 1.txt
图3-64
(8)扫描某一目标地址的指定端口。
如果不需要对目标主机进行全端口扫描,只想探测它是否开放了某一端口,那么使用参数“-p”指定端口号,将大大提升扫描速度,结果如图3-65所示。
nmap 10.172.10.254 –p 21,22,23,80
图3-65
(9)对目标地址进行路由跟踪。
下列命令表示对目标地址进行路由跟踪,结果如图3-66所示。
nmap --traceroute 10.172.10.254
图3-66
(10)扫描目标地址所在C段的在线状况。
下列命令表示扫描目标地址所在C段的在线状况,结果如图3-67所示。
nmap -sP 10.172.10.1/24
图3-67
(11)对目标地址的操作系统进行指纹识别。
下列命令表示通过指纹识别技术识别目标地址的操作系统的版本,结果如图3-68所示。
nmap –O 192.168.0.105
图3-68
(12)检测目标地址开放的端口对应的服务版本信息。
下列命令表示检测目标地址开放的端口对应的服务版本信息,结果如图3-69所示。
nmap -sV 10.172.10.254
图3-69
(13)探测防火墙状态。
在实战中,可以利用FIN扫描的方式探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复说明该端口关闭,否则就是open或filtered状态,如图3-70所示。
nmap -sF –T4 10.172.10.38
图3-70
3.状态识别
Nmap输出的是扫描列表,包括端口号、端口状态、服务名称、服务版本及协议。通常有如表3-1所示的六种状态。
表3-1
状 态 |
含 义 |
open |
开放的,表示应用程序正在监听该端口的连接,外部可以访问 |
filtered |
被过滤的,表示端口被防火墙或其他网络设备阻止,外部不能访问 |
closed |
关闭的,表示目标主机未开启该端口 |
unfiltered |
未被过滤的,表示Nmap无法确定端口所处状态,需进一步探测 |
open/filtered |
开放的或被过滤的,Nmap不能识别 |
closed/filtered |
关闭的或被过滤的,Nmap不能识别 |
了解以上状态,将有利于我们在渗透测试过程中确定下一步应该采取什么方法或攻击手段。
Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。
平台已开设Web安全零基础就业,Web高级安全攻防进阶,红队实战攻防特训,Java代码安全审计,恶意代码分析与免杀实战,CTF基础实战特训营,网络安全应急响应,安全工具开发,AI与网络安全等系统培训课程。实验室出版安全图书《Web安全攻防:渗透测试实战指南》、《内网安全攻防:渗透测试实战指南》、《Python安全攻防:渗透测试实战指南》、《Java代码审计:入门篇》等。