【摘要】端口扫描是主动扫描的重要一部分,而僵尸扫描是主动信息收集下的一种及其隐蔽的TCP扫描方式,相对于全连接扫描和隐蔽扫描而言,执行僵尸扫描的条件非常苛刻。一个合格的僵尸机是实现僵尸扫描的关键因素,僵尸至少要保证在进行扫描阶段不会产生其他的IP包,即是不会与我们主机之外的任何机器进行第三层的IP通讯,至少在我们控制其进行扫描的阶段不可以,否则将直接导致我们的扫描结果不可靠。
【关键字】 IP 僵尸 端口扫描
僵尸扫描详解
1.僵尸扫描实施环境:
- 足够闲置的系统(僵尸机)
- 僵尸系统必须使用递增的IPID
- 可伪造源地址
2.僵尸扫描实施过程:
图一:目标机端口开放
第一步:扫描机与僵尸机发送SYN/ACK的请求包,基于TCP三次握手协议,僵尸机会返回一个RST包及系统此时的IPID_0。
第二步:扫描机紧接着向目标机发送一个源地址为僵尸机的IP的SYN数据包,目标机收到后,由于源IP是僵尸机的地址,便向僵尸机发送SYN/ACK的应答包,僵尸机则回复一个RST包(此时系统的IPID加1)。
第三步:扫描机再重复第一步的操作,此时僵尸机便向扫描者返回RST包及IPID_1,一次僵尸扫描结束。
图二:目标机端口未开放
第一步:扫描机与僵尸机发送SYN/ACK的请求包,基于TCP三次握手协议,僵尸机会返回一个RST包及系统此时的IPID_0。
第二步:扫描机紧接着想目标机发送一个源地址为僵尸机的IP的SYN数据包,目标机收到后,由于源IP是僵尸机的地址,便向僵尸机发送一个RST包,僵尸机未作回应。(此时僵尸机系统的IPID不变)。
第三步:扫描机再重复第一步的操作,此时僵尸机便向扫描者返回RST包及IPID_1,一次僵尸扫描结束。
3.僵尸扫描原理:
由于僵尸机的IPID是递增,并且系统足够闲置,则僵尸机总共与外界发生三次对话,则僵尸机在操作第二步和第三步时IPID发生变化。
如果IPID_1-IPID_0=2,则目标主机端口开放;
如果IPID_1-IPID_0=1,则目标主机端口关闭。
僵尸扫描实例:
1、实验环境:
- 扫描机:Kali_Linux-2019.1(192.168.3.28)
- 僵尸机:Windows_xp(192.168.3.42)
- 目标机:Metasploitable2-Linux(192.168.3.39)
2、实验步骤:
第一步:使用扫描机先扫描判断目标机和僵尸机所开放的端口:
目标机:
僵尸机:
第二步:使用scapy工具构造包:
rz(发向僵尸机的SYN/ACK包):
rt(发向目标机的SYN包,源IP:僵尸机,目的IP:目标机, 目标端口为25,开放):
第三步:发送rz和rt数据包,得到两个来自僵尸机的应答包az1和az2
第四步:查看数据包az1和az2:
第五步:结果判断:az2.id-az1.id=2,目标主机端口25开放
检测未开放端口44444:
第二步:
rz(发向僵尸机的SYN/ACK包):
rt(发向目标机的SYN包,源IP:僵尸机,目的IP:目标机, 目标端口为44444,开放):
第三步:发送rz和rt数据包,得到两个来自僵尸机的应答包az1和az2
第四步:查看数据包az1和az2:
第五步:结果验证:az2.id-az1.id=1,目标主机端口44444关闭。
【注释】
IPID:IP包头的标识(identification)字段 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
Scapy:一个强大的操纵报文的python交互程序。它可以伪造或者解析多种协议的报文,还具有发送、捕获、匹配请求和响应这些报文以及更多的功能。