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

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

首先需要有一台僵尸机,这里我找好一台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. eclipse java tomcat 远程调试

    在远程linux上修改tomcat 中bin 文件夹下 修改catalina.sh文件,在最前面加上如下代码: CATALINA_OPTS="-Xdebug -Xrunjdwp:transp ...

  2. 谷歌搜索技巧(转)https://www.runningcheese.com/google

    原文地址: Google是一个非常精密成熟的搜索引擎,其搜索结果的丰富性和准确度较其他搜索引擎都要好,但大多数用户都还只是停留在搜索框中输入一两个关键字,然后点击“搜索”按钮的阶段,这一过程是非常低效 ...

  3. bittorrent 学习(二) LOG日志和peer管理连接

    代码中的log.h log.c比较简单 void logcmd() 记录命令  int logfile();运行日志的记录 int init_logfile() 开启log文件 源码比较清晰也很简单. ...

  4. python3 第三十一章 - 模块

    1.什么是模块 如果从Python解释器退出并再次输入,您所做的定义(函数和变量)将丢失.因此,如果要编写一个稍长的程序,最好使用文本编辑器为解释器准备输入,并以该文件作为输入运行它.这称为创建脚本. ...

  5. SAS 选取部分观测

    SAS  对部分观测得处理 在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中. ·通过删除不满足条件的观测来保留想要的观测. ·仅接受满足条件的观测. 条件可以由IF语句. ...

  6. Spring Boot不同版本整合Redis的配置

    1. Spring Boot为1.4及其他低版本 1.1 POM.XML配置 <!--引入 spring-boot-starter-redis(1.4版本前)--> <depende ...

  7. 致C#,致我这工作一年(下)

    上一篇被很多前辈吐槽排版啊!哈哈!排版是有点土...继续接上文! 依旧跌宕起伏的人生 上次说到我面试通过了,然后我记得那一天的我太高兴了,把这一消息发给我父母和我所有的好基友,然后第二天就入职了,我记 ...

  8. Codeforces 884 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意简述: 一个人要完成一件事总共需要ttt秒,现在有nnn天,每天有aia_iai​不能做事,问他可以在第几天做完. 思路:按照题 ...

  9. 转发:RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  10. s6-3 通信模型

    传输层的作用范围 通信5元组 一些已分配的知名端口 三元组 协议. 本地端点. 远方端点 五元组 协议. 本地IP地址.本地端口号. 远端IP地址.远端端口号 通信5元组 源IP 源端口 目的I ...