一、僵尸扫描介绍
1.僵尸扫描的目的:进行僵尸扫描的目的是在进行扫描的时候利用僵尸主机作为跳板来扫描目标主机,这样目标主机的日志文件中记录的就是僵尸主机的IP地址,这样便可以在网络中隐藏自己的行踪,不被别人发现。
2.僵尸主机的要求:长期闲置并且连接互联网。并且ID值是连续的。
3.僵尸扫描原理概括
其实,扫描者是通过僵尸主机回复的ID号来判断目标主机是否存活,在第四步的时候,如果目标主机没有存活,那目标主机自然就无法向僵尸主机回复SYN/ACK包,那僵尸主机自然也就不能向目标主机回复RST数据包,那么当执行第六步的时候,僵尸主机会向扫描者主机回复一个SYN/ACK数据包,这样,扫描者收到的数据包中的ID号就是y+1(之前的ID号加1);如果目标主机存活,那么当目标主机收到来自扫描者主机发送的SYN请求包时,目标主机会向僵尸主机回复一个SYN/ACK数据包,那么僵尸主机就会向目标主机回复一个RST数据包(此时ID号就增加了1),这样的话,当扫描者主机向僵尸主机发送了SYN请求包时,僵尸主机会回复一个SYN/ACK数据包,此时的ID值就又会增加1,这样扫描者收到的数据包的ID值就成了y+2。
总而言之,如果目标主机没有存活,那么最后扫描者收到的数据包的ID号为y+1,如果目标主机存活,那么扫描者最后收到的数据包的ID号为y+2。因此,扫描者就可以通过数据包中的ID号来判断目标主机是否存活了。
二、使用python脚本进行僵尸扫描
1.实验环境
攻击者主机(kali)IP:192.168.223.174
僵尸主机(windows XP)IP:192.168.223.170
目标主机(Linux):192.168.223.10
2.python代码如下
from scapy.all import *
import time
import sys
def scan(zombieIP,targetIP):
#定义一个僵尸扫描函数
print("zombieIP:"+zombieIP)
print("targetIP:"+targetIP)
#首先打印出僵尸主机的IP和目标主机的IP
for port in range (1,1000):
r3 = sr1(IP(dst=zombieIP)/TCP(flags='S'),timeout=3,verbose=0)
#先向目标主机发送一个数据包,目的是获取目标主机的id号
r4 = sr1(IP(dst=targetIP,src=zombieIP)/TCP(flags='S',dport=port),timeout=3,verbose=0)
#伪造僵尸主机的IP向目标主机发送一个数据包
r5 = sr1(IP(dst=zombieIP)/TCP(flags='S'),timeout=3,verbose=0)
#再次向目标主机发送一个数据包,目的是再次获取到目标主机的id号
if (r3[IP].id + 2) == (r5[IP].id):
print(port)
else:
pass
zombieIP = input("please input a zombieIP:")
#由用户输入一个id号
r1 = sr1(IP(dst=zombieIP)/TCP(flags='S',dport=80),timeout=3,verbose=0)
#先向目标主机发送一个数据包,目的是获取目标主机的id号
time.sleep(3)
r2 = sr1(IP(dst=zombieIP)/TCP(flags='S',dport=80),timeout=3,verbose=0)
#再向目标主机发送一个数据包,目的是获取目标主机的id号
if (r1[IP].id + 1) == r2[IP].id:
print("This is a useable zombie")
input1 = input("Do you want to use this zombie?(y/n)")
if input1 == 'y':
targetIP = input("Please input the targetIP:")
scan(zombieIP,targetIP)
#调用scan函数
else:
sys.exit()
else:
print("This is not a useable zombie")
3.执行结果如下
4.抓包数据如下
在攻击者主机(kali)上抓包
可以看见在攻击者主机上只出现了攻击者主机和目标主机的IP,并没有出现目标主机的IP
在目标主机上(Linux)上抓包
可以看见,在目标主机上只出现了僵尸主机的IP,并没有出现攻击者主机的IP,这就相当于攻击者成功的隐藏了起来
三、scapy模块
1.实验环境
攻击者主机(kali)IP:192.168.223.174
僵尸主机(windows XP)IP:192.168.223.170
目标主机(Linux):192.168.223.10
2.判断僵尸主机是不是一个可用的僵尸主机
可以看见两个id相差1,因此可以作为一个僵尸主机
3.伪造僵尸主机向目标主机发送一个数据包
(1):端口开启的情况
可以看见,两次向僵尸主机发送数据包的id值相差2,说明80端口是开启的。(如果不理解这就话,将前面的图结合文字好好理解)
(2):端口关闭的情况
可以看见,两次向僵尸主机发送数据包的id值相差1,说明444端口是关闭的。
nmap
1.实验环境
攻击者主机(kali)IP:192.168.223.174
僵尸主机(windows XP)IP:192.168.223.170
目标主机(Linux):192.168.223.10
2.nmap命令
在nmap中使用一条命令就可以伪造IP进行扫描
(1):判断一台主机是否可以作为一个僵尸主机
nmap -p端口 僵尸主机IP地址 --script=ipidseq.nse
(2):伪造僵尸主机IP进行扫描
nmap 目标主机IP -sI 僵尸主机IP -Pn -p 端口号
扫描结果如下
3.抓包数据如下
在攻击者主机(kali)上抓包
可以看见在攻击者主机上只出现了攻击者主机和目标主机的IP,并没有出现目标主机的IP
在目标主机上(Linux)上抓包
可以看见,在目标主机上只出现了僵尸主机的IP,并没有出现攻击者主机的IP,这就相当于攻击者成功的隐藏了起来,对目标主机进行了扫描,而且还没有被目标主机发现。