诸神之眼:Nmap网络安全审计技术揭秘
上QQ阅读APP看书,第一时间看更新

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

2.6.1 UDP协议解析

UDP协议也是一个位于传输层的协议。它完成的工作与TCP是相同的,但是由于UDP协议是非面向连接的,对UDP端口的探测也就不可能像TCP端口的探测那样依赖于连接建立过程(不能使用telnet这种TCP协议类型命令),这也使得UDP端口扫描的可靠性不高。因此,虽然UDP协议较之TCP协议显得简单,但是对UDP端口的扫描却是相当困难的。

当一个UDP端口收到一个UDP数据包时,如果它是关闭的,就会给源端发回一个ICMP端口不可达数据包;如果它是开放的,就会忽略这个数据包,也就是将它丢弃而不返回任何信息。

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

2.6.2 使用UDP协议进行主机发现

使用Nmap的选项-PU就可以实现UDP协议的主机发现。

    命令语法:Nmap  -PU[目标]

使用这种方式对60.2.22.35进行一次使用UDP协议的扫描行动。

    Nmap -sn -PU 60.2.22.35

扫描的结果如下。

    Starting Nmap 7.12 ( https://Nmap.org ) at 2016-09-16 12:45
    Nmap scan report for 60.2.22.35
    Host is up (0.020s latency).
    Nmap done: 1 IP address (1 host up) scanned in 1.83 seconds

在这种扫描方式中,Nmap向60.2.22.35发送了一个UDP类型的数据包,这个数据包的格式如下。

    Frame 3105: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0
    Ethernet II, Src: 08:10:76:6a:ad:30 (08:10:76:6a:ad:30), Dst: D-LinkIn_b3:87:
    a9 (d8:fe:e3:b3:87:a9)
    Internet Protocol Version 4, Src: 192.168.0.4, Dst: 60.2.22.35
    User Datagram Protocol, Src Port: 49497 (49497),
    Dst Port: 40125 (40125)                                                         ①
        Source Port: 49497
    Destination Port: 40125
        Length: 8
        Checksum: 0x8ef5 [validation disabled]
        [Stream index: 32]

①表示发送的数据包使用的协议为UDP,目标端口为40125。在目标收到这个数据包之后,由于40125端口是关闭的,就会向Nmap所在主机发送一个ICMP端口不可达数据包。

    Frame 3115: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0
    Ethernet II, Src: D-LinkIn_b3:87:a9 (d8:fe:e3:b3:87:a9), Dst: 08:10:76:6a:ad:30

      (08:10:76:6a:ad:30)
    Internet Protocol Version 4, Src: 60.2.22.35, Dst: 192.168.0.4
    Internet Control Message Protocol
          Type: 3 (Destination unreachable)
          Code: 3 (Port unreachable)
          Checksum: 0x0fe8 [correct]
          Unused: 00000000
          Internet Protocol Version 4, Src: 192.168.0.4, Dst: 60.2.22.35
          User Datagram Protocol, Src Port: 49497 (49497), Dst Port: 40125 (40125)
              Source Port: 49497
              Destination Port: 40125
              Length: 8
              Checksum: 0x8ef5 [validation disabled]
              [Stream index: 32]

Nmap收到这个数据包之后,就可以判断目标主机为活跃主机了。针对UDP的扫描成功,端口的选择也很重要,但是与TCP不同,TCP需要扫描目标主机开放的端口,而UDP需要扫描的是目标主机关闭的端口。在扫描的过程中,需要避开那些常用的UDP协议端口,例如DNS(端口53)、SNMP(161)。因此在扫描的时候,最合适的做法就是选择一个值比较大的端口,例如35462。