zoukankan      html  css  js  c++  java
  • Kali学习笔记11:僵尸扫描案例

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

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

    首先需要有一台僵尸机,这里我找好一台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("
    Scanning target" + target + "with zombie" + zombie)
        print"
    -------Open Ports On Target-----
    "
        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------
    "
    print"1.----Identity Zombie Host
    "
    print"2.----Preform Zombie Scan
    "
    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:
    ")
            target = raw_input("Enter IP address for Scan Target:
    ")
            zombiescan(target, zombie)

    使用脚本:

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

    vi xxx.py

    :set fileformat=unix

    :wq

    chmod u+x xxx.py

    ./xxx.py

    使用:

    效果还是非常不错的!

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

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

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

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

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

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

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

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

    成功

  • 相关阅读:
    根据dateFormatter创建NSDate类型数据
    centos6.5下oracle自动备份删除指定天数的文件
    svg-edit和svg中的自定义属性
    vc读取当前路径和读取配置ini文件
    powerdesiner技巧
    oracle理解和导入导出
    highstock无图像
    winform中datagridview刷新后的排序记忆
    freemarker取数
    winform clickonce在线安装
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9650391.html
Copyright © 2011-2022 走看看