僵尸扫描:
过程(扫描者、僵尸机、目标机):
端口打开状态:
一:由扫描者给僵尸机发一个SYN/ACK包(为发生三次握手),正常情况下,僵尸机返回一个RST给扫描者,收到一个IPID值
二:扫描者向目标服务器发一个SYN包(这个包是要伪造源地址的,不能透露scanner,这个包的源IP是要为造成僵尸机的IP),因为是SYN包,这个目标服务器就会向僵尸机的IP发一个SYN/ACK包,僵尸机(莫名奇妙收到一个ACK包,这个包是我们扫描目标,目标回给我们的ACK包,但是是僵尸机的IP,所以包给了僵尸机)收到后,有两个ACK包?(一个我们发的,一个目标给的),僵尸机看来这个不是正常的数据包,再返回一个RST包,因为是递增的就是IPID+1。
因为不能让IPID稳定能是被识别,僵尸机要足够空闲不可发生通信。
三:扫描者再向僵尸机发一个SYN/ACK,僵尸机而话不说直接回一个RST包,这里的RST的IPID+2了
四:如果扫描者接受到IPID+2这个RST包,那么就能判定目标的这个端口就是开放的状态。
(IPID——>IPID+1——>IPID+2)
端口关闭状态:
第一步一样;
第二步扫描者向目标发一个SYN包,端口未开,就会给僵尸机发一个RST是IPID,僵尸机不会再跟目标通信;
第三步:扫描者给僵尸机发一个SYN/ACK包,僵尸机返回一个RST给扫描者,但是这里扫描者扫收是IPID+1。
(IPID——>IPID+1)
实例演示:
1、合格的僵尸机,最好是XP,2000,2003这类早期的机器,因为这类早期的机器的IPID是递增的,即+1
2、完成地址伪造
僵尸扫描:
***************1、nmap。2、Scary。×××××××××××××××××××××××
Scapy——————zombie.py
i=IP()
t=TCP()
rz=(i/t)
rt=(i/t)
rz[IP].dst=IPz //僵尸机的IP
rz[TCP].dport=445 //僵尸机端口
rz[TCP].flags="SA"
rt[IP].src=IPz //僵尸机IP
rt[IP].dst=IPt //目标IP
rt[TCP].dport=22 //目标端口
rt[TCP].flags="S"
az1=sr1(rz) ————> at=sr1(rt.timeout=1) ————> at=sr1(rt) ————> az2=sr1(rz)
az1.display() ————> az2.display()
显示出来直接看ID的结果 //要快速输入
脚本:
==============================================================
#!/usr/bin/python
import logging
logging.getlogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import*
==============================================================
————Nmap
发现僵尸机:
nmap -p445 1.1.1.1 --script=ipidseq.nse
#--scrlpt这是调用nmap的脚本,测试僵尸
#可以换IP测试、换端口测试——————
|_ipidseq:Incremental表示合格
扫描目标
nmap 1.1.1.1 -sI 1.1.1.2 -Pn -p 0-100
#1.1.1.1是目标IP,-sI跟僵尸机
不得不说还是nmap强大。