渗透测试工具:Nmap 浅析
2021-06-08 11:02:06 Author: mp.weixin.qq.com(查看原文) 阅读量:190 收藏


文章来源:LemonSec

Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap,分布式框架为DNmap。

Nmap的特点如下所示。

主机探测:探测网络上的主机,如列出响应TCP和ICMP请求、ICMP请求、开放特别端口的主机。

端口扫描:探测目标主机所开放的端口。

版本检测:探测目标主机的网络服务,判断其服务名称及版本号。

系统检测:探测目标主机的操作系统及网络设备的硬件特性。

支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言。

1、安装Nmap

Nmap的下载地址为https://nmap.org/download.html,在安装的过程中按照提示一步步安装即可,如图1所示。

图1  安装Nmap

2、Nmap入门

(1)扫描参数

进入安装目录后,在命令行直接执行Nmap或查看帮助文档(输入nmap--help)将显示Namp的用法及其功能,如图2所示。

图2  显示帮助文件

先介绍一下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。

-sI<zombie host[:probeport]>:指定使用Idle 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:指定使用轻量级侦测方式(intensity 2)。

--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)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。

(2)常用方法

Nmap的参数较多,但是通常用不了那么多,以下是在渗透测试过程中比较常见的命令。

1)扫描单个目标地址

在Nmap后面直接添加目标地址即可扫描,如图3所示。

nmap 192.168.0.100

图3  扫描单个目标地址

2)扫描多个目标地址

如果目标地址不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描,如图4所示。

nmap 192.168.0.100 192.168.0.105

图4  扫描多个目标地址

3)扫描一个范围内的目标地址

可以指定扫描一个连续的网段,中间使用“-”连接,例如,下列命令表示扫描范围为192.168.0.100~192.168.0.110,如图5所示。

nmap 192.168.0.100-110

图5  扫描一个范围内的目标地址

4)扫描目标地址所在的某个网段

以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为192.168.0.1~192.168.0.255,如图6所示。

nmap 192.168.0.100/24

图6  扫描一个C段目标地址

5)扫描主机列表targets.txt中的所有目标地址

扫描targets.txt中的地址或者网段,此处导入的是绝对路径,如果targets.txt文件与nmap.exe在同一个目录下,则直接引用文件名即可,如图7所示。

nmap-iL C:\Users\Aerfa\Desktop\targets.txt

图7  扫描指定文本

6)扫描除某一个目标地址之外的所有目标地址

下列命令表示扫描除192.168.0.105之外的其他192.168.0.x地址,从扫描结果来看确实没有对192.168.0.105进行扫描,如图8所示。

nmap 192.168.0.100/24-exclude 192.168.0.105

图8  扫描除某一目标地址之外的所有目标地址

7)扫描除某一文件中的目标地址之外的目标地址

下列命令表示扫描除了target.txt文件夹中涉及的地址或网段之外的目标地址。还是以扫描192.168.0.x网段为例,在targets.txt中添加192.168.0.100和192.168.0.105,从扫描结果来看已经证实该方法有效可用,如图9所示。

nmap 192.168.0.100/24-excludefile C:\Users\Aerfa\Desktop\targets.txt

图9  扫描除某一文件中的目标地址之外的目标地址

8)扫描某一目标地址的21、22、23、80端口

如果不需要对目标主机进行全端口扫描,只想探测它是否开放了某一端口,那么使用-p参数指定端口号,将大大提升扫描速度,如图10所示。

nmap 192.168.0.100 –p 21,22,23,80

图10  扫描指定端口

9)对目标地址进行路由跟踪

下列命令表示对目标地址进行路由跟踪,如图11所示。

nmap--traceroute 192.168.0.105

图11  对目标地址进行路由跟踪

10)扫描目标地址所在C段的在线状况

下列命令表示扫描目标地址所在C段的在线状况,如图12所示。

nmap-sP 192.168.0.100/24

图12  扫描目标地址所在C段的在线状况

11)目标地址的操作系统指纹识别

下列命令表示通过指纹识别技术识别目标地址的操作系统的版本,如图13所示。

nmap –O 192.168.0.105

图13  扫描目标地址的操作系统

12)目标地址提供的服务版本检测

下列命令表示检测目标地址开放的端口对应的服务版本信息,如图14所示。

nmap-sV 192.168.0.105

图14  检测目标地址开放端口对应的服务版本

13)探测防火墙状态

在实战中,可以利用FIN扫描的方式探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复说明该端口关闭,否则就是open或filtered状态,如图15所示。

nmap-sF –T4 192.168.0.105

图15  探测防火墙状态

(3)状态识别

Nmap输出的是扫描列表,包括端口号、端口状态、服务名称、服务版本及协议。通常有如表1所示的6种状态。

表1  常见的6种Nmap端口状态及其含义

了解了以上状态,在渗透测试过程中,将有利于我们确定下一步应该采取什么方法或攻击手段。

3、Nmap进阶

(1)脚本介绍

Nmap的脚本默认存在/xx/nmap/scripts文件夹下,如图16所示。

图16  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。

(2)常用脚本

用户还可根据需要设置--script=类别进行扫描,常用参数如下所示。

-sC/--script=default:使用默认的脚本进行扫描。

--script=<Lua scripts>:使用某个脚本进行扫描。

--script-args=key1=value1,key2=value2······:该参数用于传递脚本里的参数,key1是参数名,该参数对应value1这个值。如有更多的参数,使用逗号连接。

–script-args-file=filename:使用文件为脚本提供参数。

--script-trace:如果设置该参数,则显示脚本执行过程中发送与接收的数据。

--script-updatedb:在Nmap的scripts目录里有一个script.db文件,该文件保存了当前Nmap可用的脚本,类似于一个小型数据库,如果我们开启Nmap并调用了此参数,则Nmap会自行扫描scripts目录中的扩展脚本,进行数据库更新。

--script-help:调用该参数后,Nmap会输出该脚本对应的脚本使用参数,以及详细的介绍信息。

(3)实例

1)鉴权扫描

使用--script=auth可以对目标主机或目标主机所在的网段进行应用弱口令检测,如图17所示。

nmap--script=auth 192.168.0.105

图17  鉴权扫描

2)暴力破解攻击

Nmap具有暴力破解的功能,可对数据库、SMB、SNMP等进行简单密码的暴力猜解,如图18所示。

nmap--script=brute 192.168.0.105

图18  暴力破解攻击

3)扫描常见的漏洞

Nmap具备漏洞扫描的功能,可以检查目标主机或网段是否存在常见的漏洞,如图19所示。

nmap--script=vuln 192.168.0.105

图19  扫描常见的漏洞

4)应用服务扫描

Nmap具备很多常见应用服务的扫描脚本,例如VNC服务、MySQL服务、Telnet服务、Rsync服务等,此处以VNC服务为例,如图20所示。

nmap--script=realvnc-auth-bypass 192.168.0.105

图20  应用服务扫描

5)探测局域网内更多服务开启的情况

输入以下命令即可探测局域网内更多服务开启的情况,如图21和图22所示。

nmap –n –p 445--script=broadcast 192.168.0.105

图21  探测局域网内更多服务开启的情况(1)

图22  探测局域网内更多服务开启的情况(2)

6)Whois解析

利用第三方的数据库或资源查询目标地址的信息,例如进行Whois解析,如图23所示。

nmap-script external baidu.com

图23  Whois解析

更多扫描脚本的使用方法可参见https://nmap.org/nsedoc/categories。

一如既往的学习,一如既往的整理,一如即往的分享。感谢支持

“如侵权请私聊公众号删文”

推荐文章++++

*码云随机收集渗透测试武器列表地址更新

*『渗透测试』反弹 shell 入门教学

*渗透安全及渗透测试流程


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650513969&idx=3&sn=bab3355e5f3c76c3d7a94104fd5637d7&chksm=83bac7d5b4cd4ec375d013615acb70a63ade2fbf5bee736f1be6fcdd911db527035beb95dc1c#rd
如有侵权请联系:admin#unsafe.sh