Nmap

Posted 小鳴同學

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nmap相关的知识,希望对你有一定的参考价值。

Nmap

Nmap (“Network Mapper(网络映射器)”) 是一款开源的网络探测和安全审核的工具,支持在 Windows、Unix/Linux 以及 MAC OS 平台下运行。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。Nmap 以新颖的方式使用原始 IP 报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息),它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然 Nmap 通常用于安全审核,许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视主机和服务的运行。

Nmap基础

Nmap的扫描方式:

  • 完全连接扫描:利用TCP/IP协议的三次握手连接机制,使源主机和目的主机的某个端口建立一次完整的连接。如果建立成功,则表明该端口开放。否则,表明该端口关闭。
  • 半连接扫描:是指在源主机和目的主机的三次握手连接过程中,只完成前两次握手,不建建立一次完整的连接
  • SYN扫描:首先向目标主机发送连接请求,当目标主机返回响应后,立即切断连接过程,并查看响应情况。如果目标主机返回ACK信息,表示目标主机的该端口开放。如果目标主机返回RESET信息,表示该端口没有开放。
  • SYN|ACK扫描: 由源主机向目标主机的某个端口直接发送SYN|ACK数据包,而不是先发送SYN数据包。由于这种方法不发送SYN数据包,目标主机会认为这是一次错误的连接,从而会报错。如果目标主机的该端口没有开放,会返回RST信息;如果该端口开放(LISTENING) ,则不会返回任何信息,而是直接将这个数据包抛弃掉。
  • ACK扫描:首先由主机A向目标主机B发送FIN数据包,然后查看反馈数据包的TTL值和WIN值,开放端口所返回的数据包的TTL值一般小于64,而关闭端口的返回值一般大于64开放端口所返回的WIN值一般大于0,而关闭端口的返回值一般等于0.
  • FIN扫描:源主机A向目标主机B发送FIN数据包,然后查看反馈消息。如果端口返回RESET信息,则说明该端口关闭。如果端口没有返回任何消息,则说明端口开放。
  • ID头信息扫描(僵尸扫描): 需要用一台第三方机器配置扫描,并且这台机器的网络通信量要非常少,即dumb主机。首先由源主机A向dumb主机B发出连续的P ING数据包,并且查看主机B返回的数据包的ID头信息。一般而言,每个顺序数据包的1D头的值会加1.然后由源主机A假冒主机B的地址向目的主机C的任意端口(1-65535) 发送SYN数据包。这时,主机C向主机B发送的数据包有两种可能的结果:1、SYN|ACK:表示该端口处于监听状态;2、RST|ACK:表示该端口处于非监听状态。那么,由后续PING数据包的响应信息的ID头信息可以看出,如果主机C的某个端口是开放的,则主机B返回A的数据包中,ID头的值不是递增1,而是大于1.如果主机C的某个端口是非开放的,则主机B返回A的数据包中,ID头的值递增1,非常规律。
  • 隐蔽扫描:是指能够成功地绕过IDS、防火墙和监视系统等安全机制,取得目标主机端口信息的一种扫描方式。

利用Nmap进行主机发现

利用ARP协议发现

不知道什么是ARP?(点这里

ARP协议位于TCP/IP模型的网络层,这个协议主要用来解决逻辑地址和物理地址的转换关系。

当设备于于我们处于同一网段时,使用ARP扫描技术是最佳的选择。在Nmap < 7.8 的版本中参数“-PR”用来指定使用ARP扫描。Nmap > 7.8 的版本中废弃了这个参数,ARP扫描在可能使用的地方默认启用。这种扫描方式只能用于与Nmap设备在同一网段的目标设备。

nmap -sn 192.168.1.0/24

注:-sn 仅判断目标设备是否存活不进行仔细地扫描,避免浪费时间。

wireshark抓包如图
不知道什么是wireshark?(点这里

利用ICMP协议发现

不知道什么是ICMP?(点这里

Nmap使用 -PE 参数可以实现ICMP的设备发现,这个过程实际上和ping命令是一样的。

nmap -sn -PE 192.168.1.15

因为这里是同一局域网下,wireshark抓包效果与TCP SYN扫描相同。不知道什么是wireshark?(点这里

Nmap使用 -PP 参数就可以实现ICMP的时间戳设备发现

nmap -sn -PP 192.168.1.15

因为这里是同一局域网下,wireshark抓包效果与TCP SYN扫描相同。不知道什么是wireshark?(点这里

Nmap使用 -PM 参数就可以实现ICMP的地址掩码设备发现。

nmap -sn -PM 192.168.1.15

因为这里是同一局域网下,wireshark抓包效果与TCP SYN扫描相同。不知道什么是wireshark?(点这里

利用TCP协议扫发现

不知道什么是TCP?(点这里

1、TCP SYN

Nmap使用 -PS 参数来向目标设备发送一个设置了SYN标志的数据包,这个数据包的内容部分为空。通常默认的目标端口是80端口,我们也可以使用参数来改变目标端口。当指定多个端口时,Nmap将会并行地对这些端口进行测试。目标设备在收到了Nmap所发送的SYN数据包之后,会认为Nmap所在设备想要和自己的一个端口建立连接。如果这个端口是开放的,目标设备就会按照TCP 3次握手的规定,发回一个SYN+ ACK数据包,表示同意建立连接;如果这个端口是关闭的,目标设备就会拒绝这次连接,向Nmap所在设备发送一个RST数据包。

nmap -sn -PS 192.168.1.15

wireshark抓包如图,因为我这里是同一局域网下Nmap会默认使用ARP扫描,所以无法抓取TCP包。不知道什么是wireshark?(点这里

2、TCP ACK

Nmap使用 -PA 参数来进行TCP ACK扫描。TCP ACK扫描和TCP SYN扫描很相似,不同之处只在于Nmap发送的数据包中使用SYN+ ACK标志位,而不是SYN标志位。按照TCP 3次握手的规定,只有当设备A向设备B发送了SYN数据包之后,设备B才会回应设备A 一个SYN + ACK数据包。
现在Nmap直接向目标设备发送一个 TCP + ACK数据包,目标设备显然不清楚这是怎么回事,当然也不可能成功建立TCP连接,因此只能向Nmap所在设备发送一个RST数据包,表示无法建立这个TCP连接。

nmap  -PA  -p 80 192.168.1.15

因为这里是同一局域网下,wireshark抓包效果与TCP SYN扫描相同。不知道什么是wireshark?(点这里

利用UDP协议发现

不知道什么是UDP?(点这里

Nmap使用 -PU 参数来进行UDP扫描。当一个端口接收到一个UDP数据包时,如果他是关闭的,就会给源端口发回一个ICMP端口不可达数据包;如果它是开放的,就会忽略这个数据包,也就是将它丢弃而不返回任何信息。

nmap -sn -PU 192.168.1.15

因为这里是同一局域网下,wireshark抓包效果与TCP SYN扫描相同。不知道什么是wireshark?(点这里

利用Nmap进行端口扫描

端口

根据端口使用情况的不同,简单地将端口分为三类:

  1. **公认端口 (Well Known Port):**这类端口也常称为“常用端口”。这类端口的端口号为0~1024,它们紧密绑定于一些特定的服务。 通常这些端口的通信明确表明了某种服务的协议,不可重新定义它的作用对象。
  2. **注册端口( Registered Port ):**端口号为1025 ~ 49151,它们松散地绑定于一些服务。也就是说,有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确地定义服务对象,不同程序可根据实际需要自己定义。
  3. **动态/私有端口( Dynamic 1 Private Port):**端口号为49 152~65 535。 理论上,不应把常用服务分配在这些端口上。但是有些较为特殊的程序,特别是一些木马程序非常喜欢用这些端口,因为这些端口常常不被注意,容易隐蔽。

根据所提供的服务方式的不同,端口又可分为“TCP端口”和“UDP端口”两种,几之间相互通信一般采用这两种端口。

Nmap 把端口分成六个状态:

  • Open(开放的):应用程序正在该端口接收 TCP 连接或者 UDP 报文。
  • Closed(关闭的):关闭的端口对于 Nmap 也是可访问的(它接受 Nmap 的探测报文并作出响应),但没有应用程序在其上监听。
  • Filtered(被过滤的):由于包过滤阻止探测报文到达端口,Nmap 无法确定该端口是否开放。
  • Unfiltered(未被过滤的):未被过滤状态意味着端口可访问,但 Nmap 不能确定它是开放还是关闭。
  • Open|Filtered(开放或者被过滤的):当无法确定端口是开放还是被过滤的,Namp就把该端
  • Closed|Filtered(关闭或者被过滤的):该状态用于 Nmap 不能确定端口是关闭的 还是被过滤的。它只可能出现在 IPID Idle 扫描中。

基础扫描

1、Nmap常规扫描

nmap 192.168.1.15

2、对IP地址不连续的多台设备进行扫描

nmap 192.168.1.5 192.168.1.15

3、对IP地址连续的范围内的多台设备扫描

nmap 192.168.1.1-20

4、对整个子网的设备进行扫描

nmap 192.168.1.0/24

因为在此环境中我只开启了三台设备,所以扫描结果于上图相同。

5、-v 参数,扫描服务器,显示打开的端口及扫描详细信息

nmap -v 192.168.1.15

6、-p 参数,扫描指定范围的端口

默认情况下,Nmap只会扫描1000个“最有价值的端口”,不会扫描全部的95535个TCP或UDP端口。若需要全面检测端口,则需要加入- p 65535 或者 -p-

7、-O 参数,扫描目标服务器的操作系统类型

nmap -O 192.168.1.15

8、-A 参数,扫描所有信息

nmap -A 192.168.1.15

TCP连接扫描

不知道什么是TCP?(点这里

Nmap使用 -sT 参数来进行Connect扫描(TCP连接扫描)。Connect扫描其实和SYN扫描很像,只是这种扫描方式完成了TCP的3次握手。

nmap -sT -p 80 192.168.1.15

wireshark抓包如图。不知道什么是wireshark?(点这里

ACK扫描

Nmap使用 -sA 参数来进行ACK扫描。首先向目标主机发送连接请求,当目标主机返回响应后,立即切断连接过程,并查看响应情况。如果目标主机返回ACK信息,表示目标主机的该端口开放。如果目标主机返回RESET信息,表示该端口没有开放。

nmap -sA -p 80 6666 192.168.1.15

wireshark抓包如图。不知道什么是wireshark?(点这里

SYN扫描

Nmap使用 -sS 参数来进行SYN扫描。SYN扫描是较为流行的一种扫描方式, 同时它也是Nmap所采用的默认扫描方式。这
种扫描方式速度极快,可以在一秒内扫描上千个端口,并且不容易被网络中的安全设备所发现。Nmap会向目标设备的一个端口发送请求连接的SYN数据包,而目标设备在接收到这个SYN数据包之后,扫描器在收到SYN + ACK数据包后,不是发送ACK数据包而是发送RST数据包请求断开连接。这样,3次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描方式一般不会在目标设备上留下扫描痕迹。

nmap -sS -p 80 192.168.1.15

wireshark抓包如图。不知道什么是wireshark?(点这里

FIN扫描

Nmap使用 -sF 参数来进行FIN扫描。源主机A向目标主机B发送FIN数据包,然后查看反馈消息。如果端口返回RESET信息,则说明该端口关闭。如果端口没有返回任何消息,则说明端口开放。

nmap -sF -p 80 6666 192.168.1.15

wireshark抓包如图。不知道什么是wireshark?(点这里

UDP扫描

不知道什么是UDP?(点这里

Nmap的SYN扫描和完整的TCP扫描都不能扫描UDP端口。因为UDP协议无连接的方式传输数据。

Nmap使用 -sU参数来进行UDP扫描

nmap -sU -p 80 192.168.1.15

wireshark抓包如图。不知道什么是wireshark?(点这里

利用Nmap扫描目标系统

-O 参数,扫描目标服务器的操作系统类型

–osscan-limit 参数,只对满足“具有打开和关闭的端口”条件的设备进行操作系统扫描

nmap -O --osscan-limit 192.168.1.15

–osscan-guess 参数,只对满足“具有打开和关闭的端口”条件的设备进行操作系统扫描

nmap -O --osscan-guess 192.168.1.15

扫描结果与上图相同

利用Nmap扫描目标服务

-sV 参数,对目标系统上运行的服务和软件进行扫描

nmap -sV 192.168.1.15

保存扫描结果为xml

-oX 参数,将扫描结果保存为xml文件

nmap -oX /root/test.xml 192.168.1.15

Nmap扫描扩展

1、–randomize-hosts 随机扫描

nmap --randomize-hosts 192.168.1.1-20

2、–scan-delay 延时扫描(单位:秒)

nmap -scan-delay 5 192.168.1.15

通常将随机扫描和延时扫描组合使用

nmap --randomize-hosta --scan-delay 5 192.168.1-20

Nmap脚本渗透

在 Nmap安装目录下的 scripts文件夹里存放了许多以“.nse”后缀结尾的文本文件,这些就是Nmap 自带的脚本引擎。使用 Nmap Script 时,需要添加参数“–script=脚本名称”。

nmap --script XXX.nse  XXXXX.com

kali中Nmap脚本路径

/usr/share/namp/sceipt

windows中Nmap脚本路径

\\Nmap\\scripts

1、IP地址信息收集

nmap --script=ip-geolocation-* XXXX.com

2、DNS信息收集

nmap --script=dns-brute XXX.com

3、检索系统信息

nmap --script=membase-http-info.nse XXX.com

4、系统常见漏洞扫描

nmap --script=smb- viln-* XXX.com

5、web常见漏洞扫描

#扫描敏感目录
nmap --script=http-enum.nse wXXXX.com

#扫描注入漏洞
nmap --script=http-sql-injection.nse XXXX.com

#扫描cms注入漏洞
nmap --script=http-vuln-* XXX.com

7、Mysql数据库渗透测试

#暴力破解mysql
nmap --script=mysql-brute.nse 192.168.1.15

#Mysql详细信息
nmap --script=mysql-info.nse 192.168.1.15

8、使用所有加脚本扫描

namp --script all 192.168.1.15

Nmap命令详解

以上是关于Nmap的主要内容,如果未能解决你的问题,请参考以下文章

Nmap 安装不正确

nmap帮助文档

使用nmap端口扫描的代码,在kali linux系统中运行?

Nmap详解

nmap -- write a nmap script

NMAP 连续 ping