渗透扫描工具:Nmap简介及常用命令(一)

Nmap简介

Nmap是由Gordon Lyon设计并实现的,于1997开始发布。Gordon Lyon最初设计Nmap的目的只是希望打造一款强大的端口扫描工具。但是随着时间的发展,Nmap的功能越来越全面,目前Nmap已从简单的网络连接端扫描软件变身为全方面的安全和网络工具组件。
如果使用Nmap对一台计算机进行审计,最终可以获得目标如下的信息。
·目标主机是否在线。
·目标主机所在网络的结构。
·目标主机上开放的端口,例如80端口、135端口、443端口等。
·目标主机所使用的操作系统,例如Windows 7、Windows 10、Linux 2.6.18、Android 4.1.2等。
·目标主机上所运行的服务以及版本,例如Apache httpd 2.2.14、OpenSSH 5.3p1、Debian 3、Ubuntu 4等。
·目标主机上所存在的漏洞,例如弱口令、ms08_067、ms10_054等。
*

Nmap基本操作

使用Nmap最简单的方式就是在命令行中输入Nmap和<目标IP地址>,例如:
在这里插入图片描述
扫描结果中,各行:
①给出了当前使用的Nmap版本为7.91,扫描开始时间为2021-04-08 09:29。
②是一个标题,生成的是关于192.168.43.185主机的报告。
③给出目标主机的状态为up(意味着这台主机处于开机并连上了互联网的状态)。
④表示在进行检查的1000个端口中,有995个是关闭的。
⑤是一张表,这张表中一共有三个字段,分别是PORT、STATE、SERVICE,其中PORT指的是端口,STATE指的是状态,SERVICE指的是运行的服务。
例如,⑥中PORT列的值为80/tcp,STATE列的值为open,SERVICE列的值为http,完整的含义就是Nmap发现目标计算机上的80号端口目前处于开放状态,这个端口提供http服务。
⑦给出了目标主机的硬件地址,从后面括号中的信息可以看出这是一台Intel设备(即我的Windows主机)。
⑧给出了经过对1台主机进行扫描,发现1台状态为up的主机,耗时5.07秒。

扫描范围的确定

对指定范围内的多个目标进行扫描:
命令语法:Nmap [IP 地址的范围]
如:* #(参数-sn表示只检测主机是否活跃,不检查其他)*在这里插入图片描述

对整个子网进行扫描

命令语法:Nmap [IP 地址/ 掩码位数]
如:nmap 192.168.43.0/24

对多个不连续的主机进行扫描(用空格分隔)

命令语法:Nmap [ 扫描目标1 扫描目标2 … 扫描目标n]
如:nmap 192.168.43.1 192.168.43.3 192.168.43.8

在扫描的时候排除指定的目标

命令语法:Nmap [ 目标] ——exclude [ 目标]
如:Nmap -sn 192.168.43.0/24 ——exclude 192.168.43.2

活跃主机发现技术

使用ARP协议进行主机发现

基于ARP协议的活跃主机发现技术的原理是:如果想要知道处在同一网段的IP地址为...的主机是否为活跃主机,只需要构造一个ARP请求数据包,并广播出去,如果得到了回应,则说明该主机为活跃主机。
当目标主机与我们处于同一网段的时候,使用ARP协议扫描技术就是最佳的选择。不仅速度最快,扫描结果也是最为精准的。这是因为没有任何安全措施会阻止正常的ARP请求.

命令语法:Nmap -PR [ 目标] #注意参数大小写
如:
在这里插入图片描述

基于ICMP协议的活跃主机发现技术

ICMP的报文可以分成两类:差错和查询。查询报文是用一对请求和应答定义的。也就是说,主机A为了获得一些信息,可以向主机B发送ICMP数据包,主机B在收到这个数据包之后,会给出应答。这一点正好符合我们进行活跃主机扫描的要求。所以这里的ICMP活跃主机发现技术使用的就是查询报文。

1.通过ICMP响应请求和应答进行主机发现
使用Nmap的选项-PE就可以实现ICMP协议的主机发现。这个过程实质上和ping是一样的。
命令语法:Nmap -PE [ 目标]

2.通过ICMP时间戳请求和应答进行主机发现
可惜的是,前面介绍的ping方式已经被很多网络所禁止,因此必须另觅它法。比如利用ICMP中的时间戳。使用Nmap的选项-PP就可以实现ICMP协议的时间戳主机发现。
命令语法:Nmap -PP[ 目标]

3.通过ICMP地址掩码请求和应答进行主机发现
使用Nmap的选项-PM可以实现ICMP协议的地址掩码主机发现。
命令语法:Nmap -PM[ 目标]

基于TCP协议的活跃主机发现技术

TCP协议的特点在于三次握手。TCP三次握手的过程如下:
首先,客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
其次,服务器端收到SYN报文,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
最后,客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据。

Nmap收到目标主机发回的应答,就可以判断目标主机是活跃主机,因为关闭的主机不会响应。也就是说只要收到目标主机的应答,就可以认为目标主机是活跃主机,而无须理会应答的具体内容,无需关心指定的端口是否开启。

1.TCP SYN扫描
Nmap中使用-PS选项来向目标主机发送一个设置了SYN标志的数据包,这个数据包的内容部分为空。通常默认的目标端口是80端口,也可以使用参数来改变目标端口。
命令语法:Nmap -PS[ 端口1, 端口2,……] [目标]
如:
在这里插入图片描述

2.TCP ACK扫描
Nmap发送的数据包中使用TCP/ACK标志位,而不是SYN标志位。Nmap直接向目标主机发送一个TCP/ACK数据包,目标主机显然无法清楚这是怎么回事,当然也不可能成功建立TCP连接,因此只能向Nmap所在主机发送一个RST标志位的数据包,表示无法建立这个TCP连接。扫描的方式同样以80端口作为默认端口,也可以进行指定。
命令语法:Nmap -PA [ 端口1, 端口2,……] [目标]

基于UDP协议的活跃主机发现技术

这样做的优点就是可以完成对UDP端口的探测,而缺点为扫描结果的可靠性比较低。因为当发出一个UDP数据包而没有收到任何的应答时,有可能因为这个UDP端口是开放的,也有可能是因为这个数据包在传输过程中丢失了。另外,扫描的速度很慢。原因是在RFC1812中对ICMP错误报文的生成速度做出了限制。

使用Nmap的选项-PU就可以实现UDP协议的主机发现。
命令语法:Nmap -PU[ 目标]
在这里插入图片描述

基于SCTP协议的活跃主机发现技术

在SCTP中,客户端使用一个INIT报文发起一个连接,服务器端使用一个INIT-ACK报文进行应答,其中就包括了cookie(标识这个连接的唯一上下文)。然后客户端使用一个COOKIE-ECHO报文进行响应,其中包含了服务器端所发送的cookie。服务器端要为这个连接分配资源,并通过向客户端发送一个COOKIE-ACK报文对其进行响应。

使用Nmap的选项-PY就可以向目标主机发送一个SCTP INIT数据包。
命令语法:Nmap -PY[ 端口1, 端口2……] [ 目标]

使用IP协议进行主机地址发现

Nmap中允许向目标主机发送IP数据包来检测目标主机是否活跃,理论上可以使用的传输层协议多达上百个。这种方式允许指定所要使用的协议,如果不指定的话,Nmap默认使用ICMP(IP协议编号1)、IGMP(IP协议编号2)和IP-in-IP(IP协议编号4)三个协议。另外也可以使用参数-PO来指定所要使用协议的编号。
命令语法:Nmap -sP -PO[ 协议1, 协议2……] [ 目标]

Nmap活跃主机发现中与DNS协议相关的选项

在对一台主机进行扫描的时候,如果它有域名的话,Nmap会向域名服务器提出请求,显示该IP所对应的域名。但是,在进行扫描时,可能扫描的是一个范围,在这个范围内主机可能有的处于活跃状态,而有的却处于非活跃状态,如果直接进行扫描,Nmap只会对处于活跃状态的主机进行DNS转换,而非活跃状态的主机则不予处理。
如果希望将所有的目标IP无论是否是活跃主机所对应的域名都列出来的话,可以使用-R参数,
命令语法:Nmap -R [ 目标IP]。

如果强制将每一个IP都转换为域名,将会耗费大量的时间,有时可能已经知道主机的域名,无须进行任何转换,此时就可以使用-n参数来取消对域名的转换。
命令语法:Nmap -n [ 目标IP]

如果不想在自己的DNS服务器留下这次查询的记录,可能需要使用指定的DNS服务器来查询目标,这时就可以使用——dns-servers参数。
命令语法:Nmap --dns-servers [server1,server2,etc] [ 目标IP]

主机发现技术的分析

Nmap中提供了——packet-trace选项,通过它就可以观察Nmap发出了哪些数据包,收到了哪些数据包,有了这个研究方法,可以更深入地理解Nmap的运行原理。

Nmap在进行主机发现的时候,无论你指定了何种方式,Nmap都会先判断一下目标主机与自己是否在同一子网中,如果在同一子网中,Nmap直接使用ARP协议扫描的方式,而不会使用你所指定的方式。
在这里插入图片描述
可以看到,尽管指定了-PA选项,nmap依然发送对的是ARP包。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值