1. Nmap介绍
Nmap(Network Mapper,网络映射器)是一款开源免费的针对大型网络的端口扫描工具,可以检测目标主机是否在线、主机端口开放情况、检测主机运行的服务类型及版本信息、检测操作系统与设备类型等信息。它的图形化界面是Zenmap,分布式框架是DNmap。
Nmap的特点如下。
(1)主机探测:探测网络上的主机,如列出响应TCP和ICMP请求、ICMP请求、开放特别端口的主机。
(2)端口扫描:探测目标主机所开放的端口。
(3)版本检测:探测目标主机的网络服务,判断其服务名称及版本号。
(4)系统检测:探测目标主机的操作系统及网络设备的硬件特性。
(5)支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言。
2. 扫描参数
进入安装目录后,在命令行直接执行Nmap或查看帮助文档(输入nmap --help)将显示Namp的用法及其功能
Nmap的相关参数的类型有:
(1)设置扫描目标时用到的相关参数
(2)与主机发现方法相关的参数
(3)与常见的端口扫描方法相关的参数
(4)跟端口参数与扫描顺序的设置相关的参数
(5)与版本侦测相关的参数
扫描命令格式:Nmap+扫描参数+目标地址或网段。比如一次完整的Nmap扫描命令如下。 nmap -T4 -A -v ip 其中-A表示使用进攻性(Aggressive)方式扫描;-T4表示指定扫描过程使用的时序(Timing),共有6个级别(0~5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通信状况良好的情况下推荐使用T4。-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。
3. 常用方法
(1)扫描单个目标地址:在Nmap后面直接添加目标地址即可。
nmap 192.168.7.1
(2)扫描多个目标地址:若目标地址不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描。
nmap 192.168.7.1 192.168.137.1
(3)扫描一个范围内的目标地址:可以指定扫描一个连续的网段,中间使用“-”连接。例如,下列命令表示扫描范围为192.168.7.1~192.168.7.10。
nmap 192.168.7.1-10
(4)扫描目标地址所在的某个网段:以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为192.168.7.1~192.168.7.255。
nmap 192.168.7.1/24
(5)扫描目标地址所在的某个网段:扫描主机列表targets.txt中的所有目标地址。扫描targets.txt中的地址或者网段,因targets.txt文件与nmap.exe在同一个目录下,所以此处直接引用的文件名,也可以导入绝对路径。
nmap -iL targets.txt
(6)扫描除某一个目标地址之外的所有目标地址段:下列命令表示扫描除192.168.7.100之外的其他192.168.7.x地址,从扫描结果来看确实没有对192.168.7.100进行扫描。
nmap 192.168.7.1/24 -exclude 192.168.7.100
(7)扫描除某一文件中的目标地址之外的目标地址:下列命令表示扫描除了target.txt文件夹中涉及的地址或网段之外的目标地址。还是以扫描192.168.7.x网段为例,在targets.txt中添加192.168.7.1和192.168.7.100,从扫描结果来看已经证实该方法有效可用。
nmap 192.168.7.1/24 -excludefile targets.txt
(8)扫描某一目标地址的指定端口:如果不需要对目标主机进行全端口扫描,只想探测它是否开放了某一端口,那么使用-p参数指定端口号,将大大提升扫描速度。
nmap 192.168.7.254 –p 1,100
(9)对目标地址进行路由跟踪:下列命令表示对目标地址进行路由跟踪。
nmap --traceroute 192.168.31.161
(10)扫描目标地址所在C段的在线状况:下列命令表示扫描目标地址所在C段的在线状况。
nmap –sP 192.168.31.1/24
(11)对目标地址的操作系统进行指纹识别:下列命令表示通过指纹识别技术识别目标地址的操作系统的版本。
nmap –O 192.168.31.161
(12)检测目标地址开放的端口对应的服务版本信息:
nmap –sV 192.168.31.161
(13)探测防火墙状态:
nmap –sF –T4 192.168.31.161
4. 状态识别
Nmap输出的是扫描列表,包括端口号、端口状态、服务名称、服务版本及协议。通常有如下所示的六种状态:
-
Open 表示端口处于开放状态
-
Closed 表示端口处于关闭状态
-
Filterd 表示端口处于过滤无法收到返回的probe状态
-
Unfilterd 表示端口收到返回的probe,但是无法确认
-
Opend/UnFilterd 表示端口处于开放或者是未过滤状态
-
Closed/UnFilterd 表示端口处于关闭或者未过滤状态
5. Nmap脚本--NSE
NSE(Nmap Script Engine) Nmap脚本引擎,内置了很多可以用来扫描的、针对特定任务的脚本。通过NSE可以不断拓展Nmap的扫描策略,加强Nmap的功能。
Nmap中使用 --script 参数来指定调用的脚本,并且脚本存储在Nmap安装路径下的scripts文件夹下,对于kali linux,存储在/usr/share/nmap/scripts下面。
NSE的使用:
(1)鉴权扫描:使用”--script=auth”对目标主机或目标主机所在的网段进行应用弱口令检测。
nmap --script=auth 192.168.7.1
(2)暴力破解攻击:Nmap具有暴力破解的功能,可对数据库、SMB、SNMP等服务进行暴力破解。
nmap --script=brute 192.168.31.161
(3)漏洞扫描:Nmap具备漏洞扫描的功能,可以检查目标主机或网段是否存在常见的漏洞。
nmap --script=vuln 127.0.0.1
(4)应用服务扫描:Nmap具备很多常见应用服务的扫描脚本,如VNC服务、MySQL服务、Telnet服务、Rsync服务等,此处以VNC服务为例。
nmap --script=realvnc-auth-bypass 192.168.31.161
(5)探测局域网内更多服务的开启情况:输入以下命令即可探测局域网内更多服务开启的情况。
nmap -n -p 445 --script=broadcast 192.168.7.1
(6)Whois解析:利用第三方的数据库或资源查询目标地址的信息,例如进行Whois解析。
nmap –script external baidu.com
(7)NSE更新:
nmap --script-updatedb
Nmap的脚本主要分为14类,目前为止可以用的有604个脚本,每个脚本都有其独特的作用,具体使用方法可以参考Nmap官方文档。
地址: NSEDoc Reference Portal — Nmap Scripting Engine documentation
6. 对比扫描结果ndiff
对某个网络进行探测的时候,有可能之前有探测过的结果,现在探测过后,需要对之前的结果与现在的结果来对比,找到两次不同点,这种情况下就可以利用ndiff工具进行扫描结果对比。ndiff工具不用重新下载,它包括在了Nmap工具之中。可以使用ndiff.exe -h参数来查看ndiff的帮助信息。
使用命令:ndiff.exe File1 File2 (File1和File2是Nmap扫描结果的xml格式。-oX)
该命令可以对两个文件进行扫描并且输出文件的不同点。