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

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

首先需要有一台僵尸机,这里我找好一台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 == "":
zombie = raw_input("Enter IP address to test IPID sequence:")
ipid(zombie)
else:
if aws == "":
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!!!可以使用的僵尸机

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

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

成功

Kali学习笔记11:僵尸扫描案例的更多相关文章

  1. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  2. SQL反模式学习笔记11 限定列的有效值

    目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...

  3. golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好

    golang学习笔记11   golang要用jetbrain的golang这个IDE工具开发才好  jetbrain家的全套ide都很好用,一定要dark背景风格才装B   从File-->s ...

  4. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  5. ArcGIS案例学习笔记3_1_地理配准案例_目视找点

    ArcGIS案例学习笔记3_1_地理配准案例_目视找点 计划时间:第3天上午 方法:地理配准/添加链接点/左键/右键/输入坐标 数据:江苏省.zip 矢量:省界,市界,GPS WGS84 地理坐标系 ...

  6. ArcGIS案例学习笔记3_1_地理配准案例_图面控制点

    ArcGIS案例学习笔记3_1_地理配准案例_图面控制点 计划时间:第3天上午 目的:地形图控制点配准 数据:地形图drg 无坐标: 步骤 1.查看地图标注 2. 地理配准,添加控制点 3.结果: 联 ...

  7. Python3+Selenium3+webdriver学习笔记11(cookie处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...

  8. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  9. 《C++ Primer Plus》学习笔记11

    <C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...

随机推荐

  1. 视频剪辑软件原型-videocut

    制作软件:墨刀 分享网址:<iframe src="https://modao.cc/app/fb0e31590711295ebebdf50fff7dd9861b7a9c1d/embe ...

  2. URL安全的Base64编码,解码

    Base64 可以将二进制转码成可见字符方便进行http传输,但是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,导致两方面数据不一致. 我们可以在发送前将“+”,“/” ...

  3. django添加控件

    function bindRemoveCls() { $('#removeCls').click(function () { var options = $('#sel')[0].selectedOp ...

  4. common skill

    lunix watch and kill progress 1.  ps -ef 2. kill -9 pid

  5. java - Integer、int 、String相互转换总结

    一下子还真记不清这三种数据类型之间的转换方法,所以做个小笔记. public class Test03 { public static void main(String[] args) { //int ...

  6. BFC和清除浮动

    1.清浮动(不考虑兼容的话这一项够用了): .clear:after{ content:''; display:block; clear:both; } 兼容ie6或7 加一个 .clear{ *zo ...

  7. Win10下 usart驱动PL2303无法安装的问题

    随着系统的 普及,很多小伙伴也放弃了原有的win7系统,加入了win10的行列.但是相对win7的稳定来说,win10还存在很多的不足 . 新买了一个usart的模块,但是在自家的电脑上使用的时候 一 ...

  8. Linux任务计划命令 :crontab -e

    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...

  9. nginx常用服务配置

    一.nginx.conf的配置方式,创建新vhost user nginx; worker_processes ; worker_cpu_affinity ; worker_rlimit_nofile ...

  10. centos7 安装freetype

    1:下载: wget "http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2" 2:  ...