今天阅读了本书的活跃主机发现技术,学到一些知识记录一下。

0x00 活跃主机发现技术

就像“敲门”,屋子里的人会做出相应的回应,有些时候居心不良的人就利用这一点进行了“踩点”。想知道网络中某个主机是否处于活跃状态,同样可以使用“敲门”的方式,不过用了发送数据包的形势代替。活跃主机发现技术就是向目标计算机发送数据包。

0x01 网络协议与主机发现技术

  • 网络协议通常是按照不同层次开发出来的。
  • 不同的协议负责的通信功能各不相同。
  • 目前分层模型有OSI和TCP/TP两种。

OSI就是“物链网传话表用”,它和TCP/IP分层协议图如下:

TCP/IP 分层协议:

  • 网络接口层:负责接收IP数据包并送至目标网络。
  • 网络层(网际层):实现网络之间的互连。ICMP、IP、ARP协议等。
  • 传输层:主要是TCP和UDP两个。为通信双方的主机提供端到端的服务。
  • 应用层:针对客户发出的请求,服务器做出响应并提供响应的服务。HTTP、FTP、SMTP协议等。

nmap在扫描时,默认会将目标的端口之类的信息也扫描出来:

如果仅仅是想知道目标是否是活跃主机(host up),并不需要这些详细信息,为了节省时间,可以使用-sn参数。

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

  • 1982年11月IETF组织发布RFC826描述制定,用于解决将IP地址解析为MAC地址,实现可信以太网二层数据帧转发时目的MAC地址的解析。
  • ARP协议(地址解析协议)位于TCP/IP协议族的网络层(网际层)。
  • ARP协议的目的主要是解决逻辑地址和物理地址的转换关系。MAC地址是Ethernet协议使用的地址。一般称为网络的物理地址。IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。一般也称为网络的逻辑地址。
  • 在同一网段中,所有的主机都会连接到一个叫做交换机的设备上,交换机上有很多接口,每个接口与一个主机通过网线相连。交换机中有一个内容寻址寄存器,寄存器中存储了每个接口所连接的主机的物理地址表。如果目标的物理地址是未知的话,这个地址就需要通过额外的通信进行解析。
  • 例如逻辑地址为192.168.0.1的主机A想与192.168.0.2通信,但不知道其物理地址,就需要ARP协议将逻辑地址解析为物理地址。
  • ARP请求数据包是以广播的形式发送给网段中所有的设备的,只不过只有符合要求的主机回应它。

基于ARP协议的活跃主机发现技术的原理:向处在同一网段的主机发送ARP请求数据包并广播出去,如果得到了回应,则说明该主机为活跃主机。

  • 优点:准确率高。任何处在同一网段的设备都没有办法防御这个技术。
  • 缺点:不能对处于不同网段的目标主机进行探测。

nmap利用ARP协议进行扫描用到的参数是-PR

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

  • ICMP(互联网控制报文协议)位于TCP/IP协议族中的网络层(网际层)。
  • ICMP协议用于传递差错报文以及其他需要注意的信息。报文种类如图:

补充一下图片:值17或18 是询问报文,类型是地址掩码请求或回答。

  • ICMP报文可以分为两类:差错报文和查询报文。基于ICMP活跃主机发现技术所用的就是查询报文。
  • 回送(Echo)请求或回答:用来测试发送与接收两端链路及目标主机TCP/IP协议是否正常,只要收到就是正常。最常用的ping命令就是A主机向B主机发送一个ICMP报文。
  • 时间戳请求或回答:允许系统向另一个系统查询当前时间。还可以向B主机发送ICMP时间戳请求,看是否能得到应答。
  • 地址掩码请求或回答:向B主机发送一个ICMP掩码地址请求,看是否能得到应答。这个协议主要使用在无盘系统中,但也有一些系统收到后会发送应答。

nmap中利用-PE选项可以实现ICMP协议的主机发现,实质和ping相同。

但ping工具在过去被滥用,很多用于防护主机的防火墙都隔绝ICMP数据包通过。nmap可以输入-PP,利用时间戳发现主机。

使用-PM选项可以实现ICMP协议的地址掩码主机发现。

缺点:不准。总会触发WAF。

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

  • TCP(传输控制协议)位于传输层。它负责完成对数据报的确认、流量控制和网络拥塞,自动检测数据报,并提供错误重发的功能,将多条路径传送的数据报按照原来的顺序进行排列,控制超时重发,自动调整超时值。
  • 特点:使用三次握手进行连接。当对方主动发送SYN连接请求后,等待对方回答TCP的三次握手SYC+ACK,并最终对对方SYN执行ACK确认
  • TCP使用的流量协议是可变大小的滑动窗口协议。滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。

nmap中常用的TCP协议扫描方式有两种,分别是TCP SYN扫描和TCP ACK扫描。

TCP SYN扫描:

  • 使用-PS选项来向目标主机发送一个设置了SYN标志的数据包。内容为空。目标端口默认是80,支持更改,支持指定多个端口。
  • 如果端口开放,目标主机会回一个SYN/ACK数据包,表示同意连接。
  • 如果端口关闭,目标主机会回一个RST数据包,表示拒绝连接。

但是我们目的不是探测它是否开放端口,而只要是回过来SYN/ACK或RST数据包的,就是存活主机。没收到就是主机不在线。

nmap -PS [端口1,端口2,端口3……][目标]

很多服务器的安全机制可能会屏蔽掉它提供服务以外的端口,比如Web服务器的安全机制就可能是将除80端口以外的所有端口都屏蔽掉,因此将一个SYN数据包发往22端口时就可能没有任何应答。建议-PS 22,80

TCP ACK扫描和SYN扫描相似,不同之处在于nmap发送数据包时使用的是TCP/ACK标志位,而不是SYN标志位。如果直接发送TCP/ACK标志位是不符合TCP三次握手规则的,会向nmap所在主机发送RST数据包拒绝连接。nmap中使用的参数是-PA 也是以80端口作为默认端口,也可以进行指定。

但在实际情况,目标主机的安全机制通常会把这种莫名其妙的TCP/ACK包直接过滤掉: (。

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

  • UDP(用户数据报协议)完成的工作和TCP是相同的,但提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。它位于传输层。
  • 当UDP端口收到一个UDP数据包时,如果为关闭状态,就会给nmap主机返回ICMP端口不可达数据包。如果为开放状态,则忽视这个数据包不会返回任何信息。

因此,在扫描时最好选择一个值比较大的端口。TCP需要扫描主机开放的端口,UDP需要扫描主机关闭的端口。

  • 优点:可以完成会UDP端口的探测。
  • 缺点:扫描结果的可靠性低。扫描速度慢,在RFC1812中对ICMP错误报文的生成速度产生了限制。

nmap中使用-PU参数就可以实现对UDP协议的主机发现。

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

  • SCTP(流控制传输协议)属于传输层上的协议,它与TCP协议完成的任务是相同的。但两者有很大的不同之处
TCPSCTP
单地址连接多地址连接
基于字节流基于消息流
只能支持一个流同时可以支持多个流
通过“三次握手”实现通过4次握手实现

SCTP的四次握手:

使用nmap选项-PY就可以向目标主机发送SCTP INIT数据包:

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

  • IP协议是TCP/TCP协议族中的核心协议。
  • 所有的TCP、UDP、ICMP、及IGMP(Internet 组管理协议)数据都以IP数据包格式传输。

如果希望使用TCP(IP协议编号6)、UDP(IP协议编号17)探测存活主机,可以使用以下命令:

nmap -sP -PO 6,17 [ip]

还可以使用–data-length参数发送添加了随机数据的数据包:

nmap --data-length 25 [ip]