端口扫描 《诸神之眼——Nmap网络安全审计技术揭秘》总结

  • 手动端口扫描
  • Nmap
    • Nmap的基本操作
    • 活跃主机发现技术
      • 基于ARP协议的活跃主机发现技术
      • 基于ICMP协议的活跃主机发现技术
      • 基于TCP协议的活跃主机发现技术
      • 基于UDP协议的活跃主机发现技术
      • 基于SCTP协议的活跃主机发现技术
      • 使用IP协议进行主机地址发现
      • Nmap活跃主机发现中与DNS协议相关的选项
      • 主机发现技术的分析
    • 端口扫描技术
      • 端口的概念
      • SYN扫描
      • Connect扫描
      • UDP扫描
      • TCP FIN扫描
      • NUL扫描
      • Xmas Tree扫描
      • idle扫描
      • 指定端口扫描
    • 远程操作系统与服务检测技术
      • 远程操作系统检测简介
      • 操作系统指纹简介
      • 使用Nmap进行服务发现

手动端口扫描

借助TelentNetcat之类的端口连接工具进行人工的端口扫描

root@kali:~# nc -vv 192.168.2.151 2869
winxp-778ee25df.lan [192.168.2.151] 2869 (?) open
sent 1, rcvd 0

上述返回信息表明, Windows XP主机开放2869端口。

Nmap

Nmap是端口扫描方面的业内标准。
时至今日,各式各样的防火墙已经普遍采用了入侵检测和入侵防御技术,能有效阻拦当前的端口扫描。如果对指定望断进行主机扫描时没检测出一台在线主机,或每台主机都在线,每个端口都处于开放状态。那么就应当认为扫描行动多半是被防火墙系统阻拦下来。

Nmap的基本操作

使用Nmap最简单的方式就是在命令行输入nmap<目标IP地址>

root@kali:~# nmap 192.168.2.172

下面是执行这条命令的扫描结果

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 17:09 CST
Nmap scan report for 192.168.2.172
Host is up (0.0012s latency).
Not shown: 991 closed ports
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49155/tcp open  unknown
49156/tcp open  unknown
49157/tcp open  unknown
MAC Address: 00:0C:29:23:A6:53 (VMware)Nmap done: 1 IP address (1 host up) scanned in 1.48 seconds
  1. 给出了当前Nmap的版本为7.70,扫描开始时间为2020-03-12 17:09
  2. Host is up给出目标主机的状态为up(意味着这台主机处于开机并连接上互联网)
  3. 检测中的991个端口是关闭的
  4. PORT指的是端口,STATE指的是状态,SERIVICE指的是运行的服务
  5. 给出了目标主机的硬件地址为00:0C:29:23:A6:53,是一台虚拟机
  6. 经过对1台主机进行扫描,发现1台状态为up的主机,耗时1.48秒

一. 扫描范围的确定

  1. 对连续范围内的主机进行扫描
    命令语法nmap [IP地址范围]
root@kali:~# nmap -sn 192.168.2.1-255

下面给出扫描结果:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 17:21 CST
Nmap scan report for phicomm.me (192.168.2.1)
Host is up (0.0043s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
53/tcp   open  domain
80/tcp   open  http
5000/tcp open  upnp
8082/tcp open  blackice-alerts
MAC Address: 2C:B2:1A:50:95:85 (Phicomm (Shanghai))Nmap scan report for MacBook-Air.lan (192.168.2.127)
Host is up (0.00022s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
88/tcp   open  kerberos-sec
5900/tcp open  vnc
MAC Address: D4:61:9D:1F:A1:38 (Apple)Nmap scan report for Xiaodu-AudioSpeaker.lan (192.168.2.169)
Host is up (0.012s latency).
All 1000 scanned ports on Xiaodu-AudioSpeaker.lan (192.168.2.169) are closed
MAC Address: 88:2D:53:06:A0:CC (Unknown)Nmap scan report for 192.168.2.172
Host is up (0.00036s latency).
Not shown: 991 closed ports
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
49152/tcp open  unknown
49153/tcp open  unknown
49154/tcp open  unknown
49155/tcp open  unknown
49156/tcp open  unknown
49157/tcp open  unknown
MAC Address: 00:0C:29:23:A6:53 (VMware)Nmap scan report for iPad-pro.lan (192.168.2.192)
Host is up (0.0073s latency).
Not shown: 998 closed ports
PORT      STATE SERVICE
49155/tcp open  unknown
62078/tcp open  iphone-sync
MAC Address: EC:2C:E2:9C:CE:77 (Unknown)Nmap scan report for 192.168.2.193
Host is up (0.011s latency).
All 1000 scanned ports on 192.168.2.193 are closed
MAC Address: B8:86:87:AA:39:CD (Liteon Technology)Nmap scan report for kali.lan (192.168.2.164)
Host is up (0.000012s latency).
All 1000 scanned ports on kali.lan (192.168.2.164) are closedNmap done: 255 IP addresses (7 hosts up) scanned in 47.34 seconds

这里看到,通过这次扫描,在这个子网中共有7台设备。

  1. 对整个子网进行扫描
    Nmap支持使用CIDR(无类别域间路由)的方式扫描整个子网。
    命令语法nmap [IP地址 / 掩码位数]

  2. 对多个不连续的主机进行扫描
    Nmap可以一次扫描多个主机,可以通过将目标地址用空格分割开的方式来同时对这些主机进行扫描
    命令语法nmap [扫描目标1 扫描目标2 ... 扫描目标n]

  3. 在扫描的时候排除指定目标
    在对一些主机进行扫描时,如果需要排除某些指定主机,可以使用exculde选项
    命令语法nmap [目标] --exclude [目标]

root@kali:~# nmap 192.168.2.1/24 --exclude 192.168.2.155
  1. 对一个文本文件中的地址列表进行扫描
    可以将常用的地址保存在一个记事本文件中,扫描时只需将这个文本文件设为目标即可
    命令语法nmap -iL [文本文件]
root@kali:~# nmap -iL list.txt
  1. 随机确定目标
    命令语法nmap -iR [目标的数量]

活跃主机发现技术

TCP/IP分层协议

注:图片引自《诸神之眼——Nmap 网络安全审计技术揭秘》

  1. 网络接口层的功能是接收IP数据包,并负责把这些数据包送至目标网络。
  2. 网络层的功能为实现网络之间的互联,根据数据包的IP地址将数据包从一个网络通过路由器传到另一网络。人们熟知的ARP协议IP协议ICMP协议IGMP协议都在这一层。
  3. 传输层的协议目前比较少,主要是TCPUDP两个,功能是为通信双方的主机提供端到端的服务。
  4. 应用层的功能为针对客户发出的请求,服务器做出响应并提供相应的服务。例如,平时最为常见的HTTP协议FTP协议SMTP协议等都在这一层,应用层的协议数量是最多的。
    基本的互联网通信协议在RFC文档内都有详细说明。

在Nmap扫描时,默认会将目标例如端口信息之类的信息也扫描出来,可以使用-sn参数来指定不对目标的端口和其他信息进行扫描。
命令语法nmap -sn [目标]

root@kali:~# nmap -sn 192.168.2.172

扫描完成后,显示如下信息:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 18:09 CST
Nmap scan report for 192.168.2.172
Host is up (0.00049s latency).
MAC Address: 00:0C:29:23:A6:53 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

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

  1. ARP协议解析
    ARP协议位于TCP/IP协议族中的网络层,这个协议的目的主要是解决逻辑地址核物理地址的转换关系。网络上的通信主要使用到两个地址:物理地址和逻辑地址。同一个望断中的通信一般使用物理地址,不同网段之间的通信一般使用逻辑地址。
    例如,一台逻辑地址192.168.0.1的主机A想与逻辑地址192.168.0,2的主机B进行通信,但是主机A又不知道主机B物理地址,这时就需要一个可以将逻辑地址解析为物理地址的协议,这个协议名为地址解析协议(ARP),它在RFC826中进行了定义。
  2. 基于ARP协议的活跃主机发现技术的原理
    如果想知道处在同一网段的IP地址为*.*.*.*的主机是否为活跃主机,只需要构造一个ARP请求数据包,并广播出去,如果得到了回应,则说明该主机为活跃主机。
  3. 优点
    精确度高,任何处于同一网段的设备都没有办法防御这种技术,因为如果不遵守ARP,那么将意味着无法通信。
  4. 缺点
    不能对处于不同网段的目标主机进行扫描。

在Nmap中使用ARP协议进行主机发现

当目标主机与我们处于同一网段的时候,使用ARP协议扫描技术就是最佳选择。不仅速度快,扫描结果也是最为精确的。这是因为没有任何安全措施会阻止正常的ARP请求
使用Nmap的选项-PR就可以实现ARP协议的主机发现
命令语法nmap -sn [目标]
例如对192.168.2.1利用ARP协议进行一次扫描,执行如下代码:

root@kali:~# nmap -sn -PR 192.168.2.1

得到如下结果:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 18:34 CST
Nmap scan report for phicomm.me (192.168.2.1)
Host is up (0.0038s latency).
MAC Address: 2C:B2:1A:50:95:85 (Phicomm (Shanghai))
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

这种技术的工作原理其实非常简单,只需要两个步骤。
5. 步骤一:讲一个内容为:who-has [被扫描方逻辑地址] tell [扫描方逻辑地址]类似的ARP请求发送给目标。
注:广播地址为:ff:ff:ff:ff:ff:ff,整个网段的全部主机都会接收到这个ARP请求数据包
步骤二:如果目标主机给出了一个相对应的ARP回应ARP replay [目标主机] is-at [目标物理地址]的话,那么说明它是活跃主机。如果发出了ARP请求数据包之后,却迟迟得不到相应数据包的话,就可以认为该IP地址所在的设备不是活跃主机。

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

  1. ICMP协议解析
    ICMP协议也位于 ICP/IP协议族中的网络层,它的目的是在IP主机、路由器之间传递控制消息。互联网经常会出现各种错误,为了发现和处理这些错误,ICMP( Internet Control Message Protocol,互联网控制报文协议)应运而生。同样这种协议也可以用来实现活跃主机发现。相比起ARP简单明了的工作模式,ICMP则要复杂很多。
    ICMP的报文可以分成两类:差错和查询查询报文是用一对请求和应答定义的。也就是说,主机A为了获得一些信息,可以向主机B发送ICMP数据包,主机B在收到这个数据包之后,会给出应答。这一点正好符合我们进行活跃主机扫描的要求。所以这里的ICMP活跃主机发现技术使用的就是查询报文。

  2. ICMP中适合使用的查询报文包括如下3类:

响应请求和应答
用来测试发送与接收两端链路及目标主机 TCP/IP协议是否正常,只要收到就是正常。我们日常使用最多的是ping命令,利用响应请求和应答,主机A向一个主机B发送一个ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则主机B返回ICMP报文,说明主机B处于活跃主机。

时间戳请求和应答
ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,即协调世界时( Coordinated Universal Time,UTc)(早期的参考手册认为UTC是格林尼治时间)。如果想知道B主机是否在线,还可以向B主机发送一个ICMP时间戳请求,如果得到应答的话就可以视为B主机在线。当然,其实数据包内容并不重要,重要的是是否收到了回应。

地址掩码请求和应答
ICMP地址掩码请求由源主机发送,用于无盘系统在引导过程中获取自己的子网掩码。这里很多人可能会觉得我们的系统大多数时候都不是无盘系统,虽然RFC规定,除非系统是地址掩码的授权代理,否则它不能发送地址掩码应答(为了成为授权代理,它必须进行特殊配置,以发送这些应答)。但是,大多数主机在收到请求时都发送一个应答。如果想知道B主机是否在线,还可以向B主机发送一个ICMP掩码地址请求,如果得到应答的话就可以视为B主机在线。

在ICMP主机发现技术中,可以利用的就是上述3种查询报文。

使用ICMP协议进行主机发现

  1. 通过ICMP相应请求和应答进行主机发现
    这个查询报文可以通过最常使用的ping命令来发送。但很多用于防护主机的防火墙都隔绝ICMP数据包通过,这样就造成ping的结果始终显示为得不到响应。
    使用Nmap的选项-PE就可以实现ICMP协议的主机发现,这个过程实质上和ping是一样的。
    命令语法nmap -PE [目标]
root@kali:~# nmap -PE baidu.com

得到如下回复:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 19:06 CST
Nmap scan report for baidu.com (220.181.38.148)
Host is up (0.038s latency).
Other addresses for baidu.com (not scanned): 39.156.69.79
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  httpsNmap done: 1 IP address (1 host up) scanned in 10.11 seconds

这个过程是Nmap [本机地址][目标地址]发送了一个ICMP echo请求的数据包,如果对方主机在线,而且没有防火墙隔离通讯,将会收到回复。

  1. 通过ICMP时间戳请求和应答进行主机发现
    ping方式已经被很多网络所禁止,使用Nmap的选项-PP就可以实现ICMP协议的时间戳主机发现。
    命令语法nmap -PP [目标]

  2. 通过ICMP地址掩码请求和应答进行主机发现
    使用Nmap的选项-PM可以实现ICMP协议的地址掩码主机发现。
    命令语法nmap -PM [目标]
    虽然这个协议主要使用在无盘系统中,但是也有一些系统在收到这个请求后会发送一个应答。这种放大在实际中很少使用。

ICMP协议中包含了饿很多方法,但是这些基于ICMP的扫描方式往往也是安全机制防御的重点,因此经常得不到准确的结果。

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

  1. TCP协议解析
    TCP( Transmission Control Protocol,传输控制协议)是一个位于传输层的协议。它是种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP的特点是使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答TCP的三次握手SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下

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

端口”是英文port的意译,可以认为是设备与外界通信交流的出口。端口可分为虚拟端口物理端口,这里使用的就是虚拟端口,指的是计算机内部或交换机路由器内的端口,不可见。
如果想知道主机是否处于活跃状态,就可以向主机的全部端口(通常并不这样做,而是选择一部分常用的端口)发送连接请求数据包,如果得到回应(注意是要瘦到了数据包),就可以认为主机是活跃主机。

使用TCP协议进行主机发现
在Nmap中常用的TCP协议扫描方式有两种,分别是TCP SYN扫描和TCP ACK扫描,这两种扫描方式其实都是利用TCP的三次握手实现的。

  1. TCP SYN扫描
    Nmap中使用-PS选项来向目标主机发送一个设置了SYN标志的数据包,这个数据包的内容部分为空,通常默认的目标端口是80端口,也可以是用餐时来改变目标端口,当指定多个端口时,Nmap将会并发地对这些端口进行测试。
    目标主机在收到Nmap所发送的SYN数据包之后,会认为Nmap所在的主机想要和自己的一个端口建立连接,如果这个端口是开放的,目标主机就会按照TCP三次握手的规定,发回一个SYN/ACK数据包,表示同意建立连接。如果这个端口是关闭的,目标主机就会拒绝这次连接。向Nmap所在的主机发送一个RST数据包,如果没有收到任何数据包,就意味着目标主机不在线。
    在Nmap中可以使用-PS参数来实现这种扫描
    命令语法nmap -PS [端口1 端口2 ... ] [目标]
root@kali:~# nmap -sn -PS 80 192.168.2.172

扫描结果如下:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-12 20:36 CST
setup_target: failed to determine route to 80 (0.0.0.80)
Nmap scan report for 192.168.2.172
Host is up (0.00063s latency).
MAC Address: 00:0C:29:23:A6:53 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

TCP扫描是Nmap扫描技术中最强大的技术之一,很多服务器的防御机制都会屏蔽掉ICMP echo请求数据包,但是任何的服务器都会响应针对其服务的SYN数据包。例如,一个Web服务器的安全机制不可能拒绝发往80端口SYN数据包,虽然有可能会拒绝ACK数据包。但是要注意的是,很多服务器的安全机制可能会屏蔽掉它提供服务以外的端口,比如Web服务器的安全机制就可能将除80端口以外的所有端口都屏蔽掉,因此当你将一个SYN数据包发往它的22端口时,就可能会石沉大海一样,没有任何的应答,得不到任何有用的信息。而我们又很难对大量主机的所有端口进行扫描,因此在对目标进行扫描时,端口的选择就显得很重要。

TCP扫描中最为常用的14个端口

端口号 提供的服务
80 http
25 smtp
22 ssh
443 https
21 ftp
113 auth
23 telent
53 domain
554 rtsp
3389 ms-term-server
1723 pptp
389 ldap
636 ldapssl
256 fwl-securemote
  1. TCP ACK扫描
    实际上和SYN扫描相当相似,不同之处只在于Nmap发送的数据包中使用TCP/ACK标志位,而不是SYN标志位
    现在Nmap直接向目标主机发送一个TCP/ACK数据包,目标主机显然无法清楚这是怎么回事,当然也不可能建立TCP连接,因此只能向Nmap所在的主机发送一个RST标志位的数据包,表示无法建立这个TCP连接。
    命令语法nmap -PA [端口1 端口2 ... ] [目标]
    在实际情况中,这种类型的扫描很少能成功,造成这种情况的原因是目标主机上的安全机制或者安全设备将这种莫名其妙的TCP/ACK包直接过滤掉了。
    在Nmap发出数据包之后,并没有收到任何应答,这是存在两种可能,一种是这个数据包被对方安全机制过滤掉了,因为目标根本没有收到这个数据包,另一种就是目标主机并非活跃主机。Nmap通常会按照第二种情况进行判断,也就是给出一个错误的结论:目标并非活跃主机。

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

使用Nmap的选项-PU就可以实现UDP协议的主机发现。
命令语法nmap -PU [目标]

root@kali:~# nmap -PU 192.168.2.172

由于发送的数据包使用的协议为UDP,目标端口为40125。在目标收到这个数据包之后,由于40125端口是关闭的,就会想Nmap所在主机发送一个ICMP端口不可达数据包。Nmap收到这个数据包之后,就可以判断目标主机为活跃主机。
针对UDP的扫描成功,端口的选择也很重要,但是与TCP不同,TCP需要扫描目标主机开放的端口,而UDP需要扫描的是目标主机关闭的端口。在扫描的过程中,需要避开那些常用的UDP协议端口,例如DNS(端口53)SNMP(161)

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

  1. SCTP协议解析
    SCTP与TCP同属于传输层上的协议,这一层的协议数量比较少。其实SCTP协议与TCP完成的任务是相同的。但两者之间却存在着很大的不同之处。
    首先,TCP协议一般是用于单地址连接的,而SCTP却可以用于多地址连接
    其次,TCP协议是基于字节流的,SCTP是基于消息流的。TCP只能支持一个流,而SCIP连接( assoclation)同时可以支持多个流( strean)。
    最后,TCP连接的建立是通过三次握手实现的,而SCTP是通过一种四次握手的机制实现的,这种机制可以有效避免攻击的产生。在SCTP中,客户端使用一个NT报文发起一个连接,服务器端使用一个INIT-ACK报文进行应答,其中就包括了 cookie(标识这个连接的唯一上下文)。然后客户端使用一个 COOKIE-ECHO报文进行响应,其中包含了服务器端所发送的 cookie。服务器端要为这个连接分配资源,并通过向客户端发送一个 COOKIE-ACK报文对其进行响应。

使用SCTP协议进行主机发现
使用Nmap的选项-PY就可以向目标主机发送一个SCTP INIT数据包
命令语法nmap -PY [端口1 端口2 ... ] [目标]
扫描结果并不一定是准确的,主要原因是目标主机并不支持SCTP协议。因此这种方法只能作为一种备用手段。

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

IP协议是 TCP/IP协议族中的核心协议,也是TCP/IP的载体。所有的TCPUDP ICMPIGMP数据都以IP数据包格式传输。
这里面的协议域长度为8位。用来标识是哪个协议向IP传送数据。比如ICMP1IGMP2TCP6UDP17GRE47ESP50等。

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

nmap -sP -PO [目标]

实际上相当于:

nmap -sP -PO 1,2,4 [目标]

如果希望使用TCP(IP协议编号6)UDP(IP协议编号17),就可以使用如下命令。

nmap -sP -PO 6,17 [目标]

另外,这种情形发出的数据包内容都是空的,很容易被检测出来,可以使用一个--data-length参数来发送添加了随机数据的数据包。

nmap --data-length 25 [目标]

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

  1. DNS协议解析
    DNS协议会将如www.baidu.com这样的域名和如14.215.177.39这样的IP地址关联起来。这样做的好处就是在访问网站的时候,无须记忆那些毫无意义的数字,只需要记住一些有意义的名字就可以了。
    如果使用的主机也不知道这个域名对应的IP地址的话,它就会向DNS服务器发出请求,服务器接到请求以后,会将请求中的域名对应的IP地址以应答的方式发回。

  2. Nmap中的DNS选项
    如果目标主机是一台对外提供Web服务的服务器,那么它除了有一个IP地址之外,还会有一个域名。如果直接扫描,Nmap只会对处于活跃状态的主机进行DNS转换,而非活跃状态的主机不予处理。
    如果希望将所有目标IP无论是否是活跃主机所对应的域名都来列出来的话,可以使用-R参数。
    命令语法nmap -R [目标IP]
    如果强制将每一个IP都转换为域名,将耗费大量的时间,此时就可以使用-n参数来取笑对域名的转换,这一点在对大规模网络进行扫描时效果极其明显。
    命令语法nmap -n [目标IP]
    这里的转换使用的都是Nmap内置的方法,不过这种方法很少用,因为会变慢。

如果不想在自己的DNS服务器留下查询的记录,可能需要使用指定的DNS服务器来查询目标,这是就可以使用--dns-servers参数
命令语法nmap --dns-servers [servers1,servers2,etc] [目标IP]
扫描过程中所使用的DNS服务器都是指定的地址。

主机发现技术的分析

Nmap中提供了--packet-trace选项,可以观察发出了哪些数据包,收到了哪些数据包,可以更深入的理解Nmap的运行原理。
使用SCTP-PY选项对目标主机60.2.22.35192.168.2.1进行扫描。
首先扫描60.2.22.35

root@kali:~# nmap -sn -PY 60.2.22.35

扫描的结果如下:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-13 10:58 CST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.07 seconds

结果显示60.2.22.35的主机并非活跃主机,得到这样的结果是因为目标主机不支持SCTP协议

root@kali:~# nmap -sn -PY 192.168.2.1

扫描的结果如下:

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-13 11:02 CST
Nmap scan report for phicomm.me (192.168.2.1)
Host is up (0.0059s latency).
MAC Address: 2C:B2:1A:50:95:85 (Phicomm (Shanghai))
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

扫描的结果是该主机为活跃状态,但这台主机也没有安装SCTP协议
在对60.2.22.35进行扫描时,Nmap发送了SCTP数据包,但是没有收到目标的应答包,因此判断为非活跃主机。
192.168.2.1扫描时,虽然也使用了-PY选项,但根本没有发送SCTP数据包,而是使用了ARP格式的请求。
这是由于Nmap的设计思路,会首先判断目标主机与Nmap所在主机是否再用一望断,如果相同的话,则直接使用ARP扫描模式。
在没有任何指定的情况下Nmap会向目标发送两个ICMP数据包,分别是Echo requestTimestamp request,这两个ICMP数据包的目标端口分别为44380

端口扫描技术

端口的概念

  1. 端口的概念
    网络设备最多可以达到65536(216)个端口供数据进出网络设备,操作系统在接收到信息后会按照端口号将信息分流到当前内存中使用端口号的程序。

  2. 端口的分类
    公认端口( well known port):被称为“常用端口”。所使用的从01024的端口都是公认端口。通常这些端口已经明确地和某种服务的协议进行了关联,一般不应该对其进行改变。例如所熟知的80端口运行的总是http通信,而 telnet 也总是适用23端口。这些端口的作用一般已经约定好,因此不会被其他程序所使用。
    注册端口( registered port):这部分端口号的范围是从102549151。它们通常也会关联到一些服务上,但是并没有明确的规定,不同的程序可以根据实际情况进行定义。
    动态和/或私有端口( dynamic and/or private port):这部分端口号的范围是从4915265535。一般来说,常见的服务不应该使用这部分端口,但是由于这部分端口不容易引起注意,因此有些程序尤其是一些木马或者病毒程序十分钟爱这部分端口。另外,根据使用协议的不同,又可以将这些端口分成“TCP协议端口”和“UDP协议端口”两种不同的类型。
    传输层的功能是为通信双方的主机提供端到端的服务,这一层的协议包括TCP协议UDP协议。针对使用以上这两种通信协议的服务所提供的端口,也可以分为“TCP协议端口”和“UDP协议端口”。
    一些常见的端口及其对应的服务:

端口号 名称 作用
1 tcpmux TCP端口服务多路复用
5 rje 远程作业入口
7 echo echo服务
9 discard 用于连接测试的空服务
11 systat 用于列举连接了的端口的系统状态
13 daytime 给请求了的主机发送日期和时间
17 qotd 给连接了的主机发送每日格言
18 msp 消息发送协议
19 chargen 字符生成服务;发送无止境的字符流
20 ftp-data FTP数据端口
21 ftp 文件传输协议(FTP)端口,有时被文件服务协议(FSP)使用
22 ssh 安全Shell(SSH)服务
23 telent telent服务
25 smtp 简单邮件传输协议(SMTP)
  1. Nmap中对端口状态的定义
    Nmap中对于端口给出了6种不同的状态描述:
    open:在该端口有应用程序接收TCP连接或者UDP报文
    closed:注意 closed并不意味着没有任何反应,状态为 closed的端口是可访问的,这种端口可以接收Nmap探测报文并做出响应。相比较而言,没有应用程序在open上监听。
    filtered:产生这种结果的原因主要是存在目标网络数据包过滤,由于这些设备过滤了探测数据包,导致Nmap无法确定该端口是否开放。这种设备可能是路由器、防火墙甚至专门的安全软件。
    unfiltered:这种结果很少见,它表明目标端口是可以访问的,但是Nmap却无法判断它到底是open还是 closed的。通常只有在进行ACK扫描时才会出现这种状态。open filtered:无法确定端口是开放的还是被过滤了,开放的端口不响应就是一个例子。
    closed filtered:无法确定端口是关闭的还是被过滤了。只有在使用idle扫描时才会发生这种情况。

  2. Nmap中的各种端口扫描技术
    由于TCP技术相对UDP技术要复杂一些,所以TCP的检测手段也比UDP要多一些。可以利用TCP的三次握手机制,产生多种扫描技术。例如最为典型的是SYNConnect两种扫描方式。

SYN扫描

SYN扫描是最为流行的一种扫描方式,同时它也是Nmap所采用的默认扫描方式。这种扫描方式速度极快,可以在一秒钟扫描上千个端口,SYN扫描不容易被网络中的安全设备所发现。
可以在扫描的时候输入参数-sS选项。其实只要你是以root或者 administrator权限工作的,扫描的形式都是SYN的。首先Nmap会向目标主机的一个端口发送请求连接的SYN数据包,而目标计算机在接收到这个SYN数据包之后会以 SYN/ACK进行应答,Nmap在收到 SYN/ACK后会发送RST包请求断开连接而不是ACK应答。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。

在对一个端口进行 TCP SYN扫描时,结果将会是三者之一:

目标主机的应答 目标端口的状态
SYN/ACK应答 open
RST应答 closed
没有给出应答 filtered
ICMP无法抵达错误(类型3,代码1,2,3,4,10,13) filtered

使用SYN扫描端口的语法如下:
命令语法nmap -sS [目标]

Connect扫描

使用Connect扫描端口的语法如下:
命令语法nmap -sT [目标]
这种扫描方式其实和SYN扫描很像,只是这种扫描方式完成了TCP三次握手。这种扫描方式无须root或者administrator权限。

UDP扫描

在使用UDP扫描(使用-sU选项)对一个端口进行UDP扫描时,结果为三者之一:

目标主机的应答 目标端口的状态
得到任意UDP应答 open
没有给出应答 open/filtered
ICMP端口无法抵达错误(类型3,代码3) closed
ICMP无法抵达错误(类型3,到吗1,2,9,10,13) filtered

要注意UDP扫描的速度是相当的。使用Connect扫描端口的语法如下:
命令语法nmap -sU [目标]

在扫描过程中可能会产生一些状态为 filtered的端口,这些端口的真实状态可能是open,也有可能是 closed。要从这些状态为 filtered的端口中找到那些其实是open的端口,需要进一步的测试。与TCP不同,UDP程序的服务通常不会对Nmap所发送的空数据包做出回应,UDP程序需要使用它们自己的格式。
例如,一个SNMP请求数据包的格式就与DHCP或者DNS的请求包的格式完全不同。如果保证能向所有常见的UDP服务发送合适的数据包,Nmap需要一个很大的数据库来存储这些格式,Nmap将这些数据包的格式存储在 Nmap-service-probes中。可以使用-sV或者-A选项,Nmap将会向每个 open filtered的端口发送 UDP probe,如果目标端口对任何一个probe有了反应,状态都会被修改为open

TCP FIN扫描

TCP FIN扫描方法向目标端口发送一个FIN数据包。按照RFC793的规定,对于所有关闭的端口,目标系统应该返回RST标志。

使用 TCP FIN扫描端口的语法如下:
命令语法nmap -sF [目标]

NUL扫描

TCP NULL扫描方法是向目标端口发送一个不包含任何标志的数据包。按照RFC793的规定,对于所有关闭的端口,目标系统应该返回RST标志
使用 TCP NULL扫描端口的语法如下:
命令语法nmap -sN [目标]

Xmas Tree扫描

TCP Xmas Tree扫描方法是向目标端口发送一个含有FINURGPUSH标志的数据包。按照RFC 793的规定,对于所有关闭的端口,目标系统应该返回RST标志
使用TCP Xmas Tree扫描端口的语法如下:
命令语法nmap -sX [目标]

idle扫描

这种扫描方式在思路上十分巧妙,在整个扫描过程中,扫描者无须向目标主机发送任何数据包,不过,不向目标主机发送数据包并不是指不发送数据包,在这种扫描方式中,需要一个“第三方”,它扮演了一个被利用的无辜角色,因为这个第三方对我们的扫描也是一无所知,所以我们的扫描是隐蔽的。

下面介绍这种扫描的原理。

步骤1:检测第三方的IP ID值并记录下来。

步骤2:在本机上伪造一个源地址为第三方主机的数据包,并将数据包发送给目标主机端口,根据目标端口状态的不同,目标主机可能会导致第三方主机的IP ID值增加

步骤3:再回来检査第三方主机的IP ID值。比较这两次的值。

这时,第三方主机的IPID值应该是增加了12,如果只是增加了1,那么说明第三方主机在这期间并没有向外发送数据包,这种情况就认为目标主机的端口是关闭的。如果增加了2,就表明第三方主机在这期间向外部发送了数据包,这样就说明目标主机的端口是开放的。

在这个过程中,因为需要伪造一个源地址为第三方的数据包,所以必须要求扫描工具具有伪造数据包的能力,Nmap已经有了 decoy scanning-D)的功能,可以帮助使用者隐藏自己的身份。要知道任何发往目标主机的数据包都有可能被目标主机的日志记录下来,而通过idle扫描方式,目标主机日志中记录下来的是第三方的地址。

idle扫描的另一个优势在于可以绕开网络中的一些安全机制,如路由器中的访问控制列表技术(ACL),某些单位的内部网络限制只允许指定IP地址对其内部进行访问。有些时候,一些工作人员为了方便,经常会在防火墙或者路由器上设置例外,允许他们从家中对单位的网络进行访问。如果没有做好安全保障,这其实是一种相当危险的做法。

idle扫描缺点也同样明显,通常一个SYN扫描所需要花费的时间只是几秒,而idle扫描的扫描时间要远远多于这个时间,另一点就是很多时候,宽带提供商并不会允许你向外发送伪造的数据包。还有最为重要的一点是,idle扫描要求你必须能找到一个正在工作第三方主机

这其实是一个并不简单的问题,首先这台第三方主机产生IP ID的方法必须是整体增加的,而不是根据每个通信自行开始的,最好是空闲的,因为大量的无关流量将会导致结果极为混乱。当然主机与第三方主机的延迟小也是理想的情况。

那么如何查看一台主机是否适合作为一台第三方主机呢?
方法一是,在对一台主机进行扫描的时候,执行一个端口扫描以及操作系统检测,启动详细模式(-v),操作系统就会检测IP ID增长方法,如果返回值为“ IP ID Sequence Generation: Incremental",这是一个好消息。但还需要确定一下,因为很多系统其实为每一个通信开启了一个IP ID,另外,如果这台主机和外界进行大量的通信,这种方法也是不适用的。
方法二是运行 ipidseq NSE脚本
好了,当找到一台第三方主机后,一切就都简单了。例如使用sI参数指定 kiosk.adobe.com作为第三方主机,然后对www.riaa.com进行扫描。

扫描结果如下。

指定端口扫描

指定端口扫描的方法:

指定端口 指定端口的选项
扫描常见的100端口 -F [target]
指定某一个端口 -p [port]
使用名字来指定扫描端口 -p [name]
使用协议指定扫描端口 -p U: [UDP ports], T: [TCP ports]
扫描所有端口 -p *
扫描常用端口 --top-ports [number]
  1. 扫描常见的100个端口
    命令语法nmap -F [目标]

  2. 指定某一个端口
    命令语法nmap -p [端口] [目标]

  3. 使用名字来指定扫描端口
    命令语法nmap -p [port name(s)] [目标]

  4. 使用协议指定扫描端口
    命令语法nmap -sU -sT -p U:[UDP ports],T:[TCP ports] [目标]

root@kali:~# nmap -sU -sT -p U:53,T:25 192.168.1.5
  1. 扫描所有端口
    命令语法nmap -p * [目标]
    这个扫描方法消耗很大资源,要慎用。

  2. 扫描常用端口
    命令语法nmap --top-ports [number] [目标]

远程操作系统与服务检测技术

远程操作系统检测简介

没有一种工具可以提供绝对准确的远程操作系统信息,几乎所有的工具都使用了一种“”的方法。这个探针大都是以TCPUDP数据包的形式,检查的细节暴扣初始序列化(ISN)TCO选项IP标识符(ID)数字时间戳显示用塞通知(ECN)窗口大小等。每个操作系统对于这些探针都会做出不同的响应。Nmap进行识别的探针和响应对应的关系保存在Nmap-os-db文件中。
Nmap会尝试验证如下参数:
供应商的名字:操作系统的供应商的名字,比如微软或者SUN
操作系统:操作系统的名字,比如 WindowsMac OS XLinux等。
操作系统的版本:比如 Windows XPWindows2000Windows2003Windows2008等。
当前设备的类型:比如通用计算机打印服务器媒体播放器路由器WAP或者电力装置等。
除了这些参数以外,操作系统检测还提供了关于系统运行时间TCP序列可预测性信息的分类,在命令行中使用-O参数通过端口扫描来完成对操作系统的扫描。

这个命令将会使用Nmap默认的SYN扫描方式来完成端口检测,不过操作系统检测选项可以和任何其他的检测技术相结合使用。Nmap包括多个命令行参数来实现操作系统检测。例如,如果采用-osscan-limit选项,Nmap只对满足“同时具有状态为openclosed的端口”这个条件的主机进行操作系统检测,特别在使用-P0扫描多个主机时可以节约根多时间。注意这个选项仅在使用-O-A进行操作系统检测时起作用。

Nmap默认会对无法精确匹配的结果进行推测:

选项 意义
--osscan-limit 只对满足“同时具有状态为openclosed的端口”条件的主机进行操作系统检测
--osscan-guess 猜测认为最接近目标的匹配操作系统类型
--max-retries 对操作系統检测尝试的次数,默认为5

操作系统指纹简介

远程判断目标计算机操作系统的方法一般可以分成两类。
被动式方法:并不向目标系统发送任何数据包,而是通过各种抓包工具来收集流经网络的数据报文,再从这些报文中得到目标计算机的操作系统信息。
主动式方法:指客户端主动向远程主机发送信息,远程主机一般要对这些信息做出反应,回复一些信息,发送者对这些返回的信息进行分析,就有可能得知远程主机的操作系统类型。这些信息可以是通过正常的网络程序如 TelnetFTP等与主机交互的信息,也可以是一些经过精心构造、正常的或残缺的数据报文

Nmap并不使用被动式的方法。Nmap中的主动式方法采用多达15个探针的操作系统指纹扫描包操作系统指纹这个名字来源于生物学上的名词指纹。因为人的指纹都是独一无二的,因此可以作为身份验证的一种机制。同样每一种类型的操作系统也都有自己的特征,通过向一台计算机发送特定格式的探针(数据包)来查看目标主机的响应数据,这一过程就是操作系统指纹分析的过程。这些强大的探针利用了TCPUDPICMP等各种协议。这些探针经过巧妙设计,可以发现目标操作系统细微的差别。

Nmap中对数据包进行调整的部分包括窗口大小窗口字段分片标识时间戳序号以及其他一些细节,例如TTL等。这些探针的结构都很简单,但是它们都是被精心设计出来的,以便观察目标系统的反应,从而发现不同操作系统之间的差异。

各种不同的操作系统在接收到这些探针文件以后会回应不同的信息,信息被保存到Nmap的操作系统指纹数据库中,这个文件名为Nmap-os-db

在Nmap扫描中,可以简单地使用-O选项来完成对目标操作系统的扫描。
命令语法nmap -F -O [目标]
在这个扫描过程中,并不需要对网络造成多大负担,虽包含了大量的信息,但每个探针文件体积都很小。随着我们不断调整扫描的选项,也可能泄露了我们更多的信息。这样就会增加暴露的风险,可能会被目标网络的保护机制例如IPS/IDS所发觉。
扫描的目标很可能是对方设置好的一个“蜜罐

希望通过Nmap准确检测到远程操作系统是比较困难的,--osscan-guess是Nmap的猜测功能选项,猜测认为最接近目标的匹配操作系统类型。在这种情况下,Nmap会输出目标系统的TCP/IP指纹文件,并给出各个系统类型的可能性。
使用如下命令:

root@kali:~# nmap -O 192.168.1.5

在这次扫描中,并没有的得到目标系统的准确值,但可以看到结果给出了一个TCP/IPfingerprint的值(OS内容

Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-14 15:59 CST
Nmap scan report for 192.168.1.5
Host is up (0.0012s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
88/tcp    open  kerberos-sec
5900/tcp  open  vnc
10000/tcp open  snet-sensor-mgmt
MAC Address: D4:61:9D:1F:A1:38 (Apple)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.70%E=4%D=3/14%OT=88%CT=1%CU=36952%PV=Y%DS=1%DC=D%G=Y%M=D4619D%TM=5E6C8EFC%P=x86_64-pc-linux
SEQ(SP=107%GCD=1%ISR=10B%TI=Z%CI=RD%II=RI%TS=A)
OPS(O1=M5B4NW6NNT11SLL%O2=M5B4NW6NNT11SLL%O3=M5B4NW6NNT11%O4=M5B4NW6NNT11SLL%O5=M5B4NW6NNT11SLL%O6=M5B4NNT11SLL)
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)
ECN(R=Y%DF=Y%T=40%W=FFFF%O=M5B4NW6SLL%CC=N%Q=)
T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=N%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=N%T=40%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)
U1(R=Y%DF=N%T=40%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=0%RUD=G)
IE(R=Y%DFI=S%T=40%CD=S)Network Distance: 1 hopOS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.83 seconds

下面详细介绍以下这个输出的意义。
这并非是一次扫描的结果,而是多次扫描的结果,每一次扫描的结果都使用%作为分隔符。
SCAN这一行表示当前进行扫描使用的Nmap版本以及一些其他的相关本地信息。
V=7.70表示当前使用的Nmap的版本为7.70
D=3/14给出了扫描的日期
OT=88%CT=1指出了在指纹识别过程中使用的TCP端口
CU=36952指出了在指纹识别过程中使用的UDP端口
PV=Y指出了目标IP地址是否属于私有地址
DS=1指出了从Nmap所在主机到目标主机的距离跳数。
G=Y指出了这次扫描的结果比较好,可以提交给iNSEcure.Org
TM=5E6C8EFC指出了扫描所消耗的时间
P=x86_64-pc-linux指出了Nmap所在主机的操作系统类型。

SEQ测试结果:
SP=107给出了TCP的初始序列号(ISN)
GCD=1给出了TCP的增量
ISR=10B表示ISN的序率
TI=Z给出了SEQ探针回应数据包中IP头部的ID值。这里面的Z表示所有IP数据包中的id字段都设置为0
II=RI给出了ICMP探针回应数据包中的IP头部的ID值
TS=A给出了返回的TCP数据包的时间戳的信息

OPS测试的结果如下:
O1=M5B4NW6NNT11SLL%O2=M5B4NW6NNT11SLL%O3=M5B4NW6NNT11% O4=M5B4NW6NNT11SLL%O5=M5B4NW6NNT11SLL%O6=M5B4NNT11SLL

WIN测试的结果如下:
这个测试给出了6个探针返回值的初始化窗口大小:
W1=FFFF
W2=FFFF
W3=FFFF
W4=FFFF
W5=FFFF
W6=FFFF

最后一行ECN如下:
R=Y表示目标是否对我们进行了回应
DF=Y表示IP数据包的分段标志位是否被设置
T=40给出了回应数据包IP中的TTI值
W=FFFF表示TCP初始化窗口的大小信息
O=M5B4NW6SLL表示TCP选项的信息
CC=N给出了目标的拥塞控制能力(N表示目标不支持ECN)

第二波发送的6个TCP数据包回应
T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)
Nmap发送的第二个探针是设置了DF位的内容为的数据包。这个数据包的窗口大小为128,回应如下。
T2(R=N)
Nmap发送的第个探针是一个设置了FINURGPSH以及SYN表示的数据包,这个数据包大小为256,回应如下。
T3(R=N)
Nmap发送的第个探针是一个设置了ACK位TCP数据包,这个包同样也设置了DF位,大小为1024,回应如下。
T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
Nmap发送的第个探针是一个窗口大小为31337的数据包,回应如下。
T5(R=Y%DF=N%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
Nmap发送的第个数据包和第四个数据包十分相似,只是窗口大小为32768,而且这个数据包通常是发往关闭的端口,回应如下。
T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
Nmap发送的第个数据包设置了FINURGPSH标志位。这个探针同样发往一个关闭的端口,窗口大小为65535,回应如下。
T7(R=Y%DF=N%T=40%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)

U1的结果是根据UDP数据包探针返回的结果
这个探针的数据部分是300个C字符,回应如下。
U1(R=Y%DF=N%T=40%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=0%RUD=G)

IE探针基于ICMP协议,有两个探针组成:
IE(R=Y%DFI=S%T=40%CD=S)

使用Nmap进行服务发现

为什么要进行服务发现
在进行Nmap端口扫描时,Nmap并没有进行服务识别,而是将端口号在自己的端口服务表数据库中进行查找,也就是说,这种返回的服务知识数据库中的,并非端口所运行的服务。

Nmap提供了更精确的服务及版本检测选项,可以通过-sV进行服务和版本检测。
首先进行端口扫描,默认情况下使用SYN扫描
其次进行服务识别,发送探针报文,得到返回值,确认服务
最后进行版本识别,发送探针报文,得到返回的报文信息,分析得出服务的版本

在发现开放的TCP端口或者UDP端口之后,服务发现程序将会对这些端口进行探测,以此确定该端口运行的具体服务。如果在扫描某个UDP端口后仍然无法确定该端口是open还是filtered,那么该端口状态就被标记为open|fitered。版本探测将试图从这些端口引发一个响应(就像它对开放端口做的一样),如果成功,就把状态改为openopen|fitered TCP端口用同样的方法对待。Nmap-service-probes 数据库包含查询不同服务的探测报文和解析识别响应的匹配表达式。版本检测程序会将探测结果与Nmap-service-probes数据库中的内容进行比较,如果与其中的某一项匹配成功,就可以确认目标端口运行的具体服务。当Nmap从某个服务收到响应,但不能在数据库中找到匹配时,它就打印一个特殊的fingerprint和一个URL方便给你提交,如果确实知道端口运行什么服务,可以花两分钟提交自己的发现,让每个人受益。

可以使用以下选项打开和控制版本检测。
-sV (版本探测)
打开版本探测。也可以用-A同时打开操作系统探测和服务发现。

--allports (不为版本探测排除任何端口)
通常,Nmap在进行版本探测时不会对目标的全部端口进行扫描,而是会跳过一些端口,如果对这个端口进行扫描,而目标又恰好是一台打印机的话,这台打印机就有可能会将所有的数据都打印出来。

--version-intensity <intensity> ( 设置版本扫描强度)
当进行版本扫描(-sV)时,Nmap发送一系列探测报文, 每个报文都被赋予一个 1到9之间的值。这里的强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。然而,高强度扫描花更多时间。强度值必须在0和9之间。默认是7。

--version--light(打开轻量级模式)
--version--light其实就相当于--version--intensity 2。这种轻量级模式使版本扫描速度快了许多,不过使用这种模式对服务进行扫描成功的几率也小一些。

--version-all(尝试每个探测)
--version-all其实就相当于--version-intensity 9,保证对每个端口尝试所有探测报文。

--version-trace(跟踪版本扫描活动)
这将会使Nmap打印出关于正在进行的扫描的详细调试信息。是用--packet-trace所得到的信息的子集。

-sR(RPC扫描)
这种方法和许多端口扫描方法联合使用。它对所有被发现开放的 TCP/UDP端口执行SunRPC程序NULL命令,试图确定它们是否RPC端口,如果是,可以确定是什么程序和版本号。

操作系统扫描服务发现并不是100%精确的。尤其是不使用-sV扫描时,得到的关于目标服务的信息很多时候是非常奇怪的。

信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一相关推荐

  1. 《诸神之眼:Nmap网络安全审计技术揭秘》读书笔记

    <诸神之眼:Nmap网络安全审计技术揭秘>读书笔记 作者:李华峰 ◆ 前言 NSE是Nmap中革命性的创新.通过Nmap强大的脚本引擎(NSE),每一个用户都可以向Nmap中添加自己编写的 ...

  2. 内网渗透(十二)之内网信息收集-内网端口扫描和发现

    系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内 ...

  3. 诸神之眼-nmap详细使用介绍1!基础使用与主机发现篇! (*╹▽╹*) 信息收集 ~ 其二

    文章目录 前言 安装 手动添加环境变量 nmap基础使用 对连续范围内的主机进行扫描 扫描整个子网(C端存活主机探测) 对多个不连续的主机进行扫描(`-sn`) 在扫描的时候排除指定的目标(`--ex ...

  4. 基于原理分析Nmap——活跃主机发现、端口扫描、服务探测、伪装技术、NSE脚本

    参考书籍<诸神之眼--Nmap网络安全审计技术揭秘> 李华峰 著 清华大学出版社 基于原理分析Nmap 1. 活跃主机发现技术 1.1 基于ARP协议 1.2 基于ICMP协议 1.2.1 ...

  5. “诸神之眼”——Nmap端口扫描工具使用小手册

    "诸神之眼"--Nmap端口扫描工具使用小手册 1.Nmap介绍 1.1.Nmap简介 Nmap ("Network Mapper(网络映射器)") 是一款开放 ...

  6. [网络安全]诸神之眼--Nmap的使用

    文章目录 Nmap Nmap下载 windows下下载 linux下下载 目标说明 CIDR 概念 Nmap通过CIDR进行扫描 域名/IP扫描 单个域名/IP扫描 多个域名/IP扫描 范围型域名/I ...

  7. 一款强大的端口扫描工具(nmap)

    一款强大的端口扫描工具(nmap) 文章目录 一款强大的端口扫描工具(nmap) 前言 一.Nmap 使用技巧汇总 一.主机发现 二.端口扫描 三.指纹识别与探测 四.伺机而动 五.防火墙/IDS逃逸 ...

  8. 诸神之眼-nmap详细使用介绍2!端口扫描技术和操作系统与服务检测篇! (*╹▽╹*) 信息收集 ~ 其三

    文章目录 端口扫描技术相关知识 端口介绍 端口分类 Nmap对端口的定义 Nmap中的端口扫描技术 指定端口扫描(`-p`.`-F`) TCP建立连接(SYN:synchronous)扫描(`-sS` ...

  9. 诸神之眼-nmap详细使用介绍3!Nmap高阶操作(防火墙规避和脚本使用)! (*╹▽╹*) 信息收集 ~ 其四

    文章目录 Nmap防火墙规避 发送分段数据包(-f) 限制最大传输单元(-mtu) 诱饵主机(`-D`) 源端口欺骗(`-g`) MAC地址欺骗(`--spoof-mac`) MAC地址介绍 nmap ...

最新文章

  1. IP地址和MAC地址
  2. ldd查看可执行程序的依赖库
  3. Hough变换的方法检测直线段,效果良好
  4. 阿里小程序云应用上线了,有哪些看点?
  5. python如何使用geotools_Python pygeotools包_程序模块 - PyPI - Python中文网
  6. matlab gui怎样将结果保存_Processing将串行数据保存用作matlab数据分析
  7. AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组
  8. HTML5设计基本网页-basic frameset
  9. SQL语句取得最大件数(MSSQL ORACLE Postgre,top rownum,limit)
  10. iOS硬解码H264视频流
  11. 【FFmpeg】转码码率
  12. 为什么没有好用的Android游戏引擎?
  13. 新出热门利器:碾压90%同类工具!
  14. 宇视录像机轮巡配置步骤
  15. java获取text plain_request中获取post的json对象数据content-type=“text/plain”
  16. 内部资料泄密,电信拨号软件系最大流氓软件
  17. UltraEdit的上百种语法高亮文件下载,具体添加请看其中说明!(推荐)
  18. QT 多目录多工程 配置
  19. 拥有一台服务器后,我竟然这么酷?
  20. 我为什么坚持这么多年写博客

热门文章

  1. android 谷歌定位demo,android实现定位与目的地的导航示例代码
  2. 数字逻辑复习(Wust)
  3. 不懂就学——什么是input和output?
  4. 流式布局案例——京东网页
  5. 即期信用证和远期信用证
  6. oracle数据库中小数小于1时0不显示
  7. python代码画樱花落花-Python:绘制樱花树
  8. 数据库系统原理期末复习
  9. nodejs+Express+mongodb
  10. iMazing2.16最新苹果手机备份同步工具