一、僵尸扫描介绍
1.僵尸扫描的目的:进行僵尸扫描的目的是在进行扫描的时候利用僵尸主机作为跳板来扫描目标主机,这样目标主机的日志文件中记录的就是僵尸主机的IP地址,这样便可以在网络中隐藏自己的行踪,不被别人发现。
2.僵尸主机的要求:长期闲置并且连接互联网。并且ID值是连续的。
3.僵尸扫描原理概括
1.扫描者向僵尸主机发送SYN/ACK
2.僵尸主机向扫描者发送RST,ipID=X
3.扫描者伪造为僵尸主机ip,并向目标发送SYN
4.目标向僵尸主机发送SYN/ACK
5.僵尸主机向目标发送RST,ipID=x+1
6.扫描者向僵尸主机发送SYN/ACK
7.僵尸主机向扫描者发送RST,ipID=X+2 若最后一个RST的id值为X+2则证明目标主机存活 若最后一个RST的id值为X+1则证明目标主机不存活
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:")
#由用户输入一个ip
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")
nmap僵尸扫描
nmap命令 在nmap中使用一条命令就可以伪造IP进行扫描
(1):判断一台主机是否可以作为一个僵尸主机
nmap -p端口 僵尸主机IP地址 --script=ipidseq.nse
(2):伪造僵尸主机IP进行扫描
nmap 目标主机IP -sI 僵尸主机IP -Pn -p 端口号/范围