今天阅读了本书的活跃主机发现技术,学到一些知识记录一下。
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协议完成的任务是相同的。但两者有很大的不同之处
TCP | SCTP |
单地址连接 | 多地址连接 |
基于字节流 | 基于消息流 |
只能支持一个流 | 同时可以支持多个流 |
通过“三次握手”实现 | 通过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]