当前位置: 移动技术网 > 科技>操作系统>Linux > Kali学习笔记11:僵尸扫描案例

Kali学习笔记11:僵尸扫描案例

2018年09月18日  | 移动技术网科技  | 我要评论

听云轩,国家公务员2013职位表,于波个人资料

什么是僵尸扫描?本质也是端口扫描,不过是一种极其隐蔽的扫描方式

所以几乎不会被发现,不过也有着很大缺陷:扫描条件很高

 

首先需要有一台僵尸机,这里我找好一台win10僵尸机器,ip地址为:10.14.4.252

我当前的kali系统机器的ip地址:192.168.22.130

扫描的目标机器ip地址:192.168.22.129

 

僵尸扫描是一种非常巧妙的方法,不过不可以用linux操作系统作为僵尸机,因为linux的ipid不是递增的

过程:

1:最开始扫描者主机对zombie(僵尸机)发送syn/ack包,然后zombie(假设此时系统产生的ipid为x)会回个主机一个rst,主机将会得到zombie的ipid;

2:然后扫描主机向目标机器发送一个syn包,有所不同的是,此时扫描主机会伪造一个伪装成zombie的ip(即是x)向目标主机发送syn包。

3:如果目标的端口开放,便会向zombie返回一个syn/ack包,但是人家zombie并没有发送任何的包啊,zombie会觉得莫名其妙,于是向目标主机发送一rst过去询问,此时zombie的ipid将会增加1(x+1)。若果目标主机的端口并未开放,那么目标主机也会想zombie发送一个rst包,但是zombie收到rst包不会有任何反应,所以ipid不会改变(依旧是x)。

4:最后扫描者主机再向zombie发送一个syn/ack,同样的zombie会摸不着头脑,然后在懵懂中向扫描者主机发送一个rst包,此时zombie的ipid将变成(x+2)。最后我们在zombies的迷惘中我们已经知道了我们想知道的。

 

好的,接下里,开始僵尸扫描:

 

先用scapy做一个演示,为后边的脚本做铺垫:

这里是先发送给僵尸机的数据包

 

而这里端口设置成445是因为win10默认开启445端口,flags是syn+ack

 

接下来定义向目标机器发送的数据包

这里我直接伪造源地址是win10的ip,扫描目标机器的25端口

 

发送数据包:

 

查看下结果:

 

 

ok,发现ip相差为2,证明目标端口开启,这里的僵尸扫描就完成了!

 

如果我们扫描的是一个不开放端口呢?

 

ok,发现这里id相差为1,说明这个端口没有开放!

 

在这个的基础上,可以写python脚本:

#!/usr/bin/python

import logging

logging.getlogger("scapy.runtime").setlevel(logging.error)
from scapy.all import *


def ipid(zombie):
    reply1 = sr1(ip(dst=zombie) / tcp(flags="sa"), timeout=2, verbose=0)
    send(ip(dst=zombie) / tcp(flags="sa"), verbose=0)
    reply2 = sr1(ip(dst=zombie) / tcp(flags="sa"), timeout=2, verbose=0)
    if reply2[ip].id == (reply1[ip].id + 2):
        print("ipid secquence is incremental and target appears to be idle,zombie located")
        response = raw_input("do you want to use this zombie to perform a scan?(y or n):")
        if response == "y":
            target = raw_input("enter the ip address of the target system:")
            zombiescan(target, zombie)
    else:
        print("either the ipid secquence is not incremental or the target if not idle. not a good zombie")


def zombiescan(target, zombie):
    print("\nscanning target" + target + "with zombie" + zombie)
    print"\n-------open ports on target-----\n"
    for port in range(1, 100):
        try:
            start_val = sr1(ip(dst=zombie) / tcp(flags="sa", dport=port), timeout=2, verbose=0)
            send(ip(src=zombie, dst=target) / tcp(flags="s", dport=port), verbose=0)
            end_val = sr1(ip(dst=zombie) / tcp(flags="sa"), timeout=2, verbose=0)
            if end_val[ip].id == (start_val[ip].id + 2):
                print(port)
        except:
            pass


print"------zombie scan suite------\n"
print"1.----identity zombie host\n"
print"2.----preform zombie scan\n"
aws = raw_input("select an option (1 or 2):")
if aws == "1":
    zombie = raw_input("enter ip address to test ipid sequence:")
    ipid(zombie)
else:
    if aws == "2":
        zombie = raw_input("enter ip address for zombie system:\n")
        target = raw_input("enter ip address for scan target:\n")
        zombiescan(target, zombie)

 

使用脚本:

如果脚本是从windows移过来的:

vi xxx.py

:set fileformat=unix

:wq

chmod u+x xxx.py

./xxx.py

 

使用:

 

效果还是非常不错的!

这个脚本其实已经是一个比较完善的了,可以实际使用了,不过还是有更不错的方法

 

强大的nmap工具:nmap本身提供了大量用于僵尸扫描的脚本程序(大概400多种)

我们可以在nmap中调用这些脚本程序来判断一个主机是否是一个合适的僵尸机。

同样这些脚本所遵循也是根据对方ipiid是否递增来判断的。

 

首先判断是否是一个好僵尸:

 

incremental!!!可以使用的僵尸机

接下来就使用这个僵尸机来扫描:

 

扫描结果和我们脚本扫描的结果一样!

成功

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网