如果不知道僵尸扫描是什么,请参考我的这篇博客

实验环境:

kali(攻击者) 192.168.0.103

metasploitable2(目标主机) 192.168.0.104

win xp sp2(僵尸机) 192.168.0.106

scapy实现:

1.包定义:

图中rz和rt分别表示向僵尸机和目标主机发送的数据包。rt数据包进行了地址欺骗,将src定向到了拥有192.168.0.106的win xp主机。

2.包发送与接收:

图中先向僵尸机发送了一个数据包,将返回结果保存为az1;然后向目标主机发送伪造数据包;最后向僵尸机发送数据包,将返回结果保存为az2。

3.数据包对比:

图中两个数据包的ipid差值为2,这证明僵尸机向目标机发送了一个RST数据包,即可得知目标机的端口是开放的。

python脚本实现:

 #!/usr/bin/python
# -*- coding: utf-8 -*-
from scapy.all import *
import time def IsZombie(zombieIp): #此函数用于判断僵尸机是否是一个合格的僵尸机
a1 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0)
time.sleep(1) #这里延时1秒是为了给僵尸机充足的时间,以判断僵尸机网络是否繁忙,为了更精准,可以适当增大该值
a2 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0)
if a1[IP].id + 1 == a2[IP].id: #比较两次ipdi值
print "this is a good zombie!"
action = raw_input("do you want to use this zombie?(y/n)")
if action == "y":
tip = raw_input("please input the target's ip:") #目标主机ip
tport = int(raw_input("please input the port:")) #要扫描的端口
scan(zombieIp, tip, tport)
else:
sys.exit()
else:
print "this is not a good zombie!" def scan(zombieIp, tip, tport):
az1 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) #给僵尸机发送第一个SYN/ACK数据包
send(IP(dst = tip, src = zombieIp) / TCP(sport = 445, flags = "S", dport = tport), verbose = 0) #给目标主机发送一个伪造原地址的SYN数据包
az2 = sr1(IP(dst = zombieIp) / TCP(flags = "SA", dport = 445), timeout = 1, verbose = 0) #给僵尸机发送第二个SYN/ACK数据包
if az1[IP].id + 2 == az2[IP].id: #比较ipdi值,从而判断端口是否开放
print "the port is open!"
elif az1[IP].id + 1 == az2[IP].id:
print "the port is closed!"
else:
print "I don't know!!" ip = raw_input("the zombie's ip:")
IsZombie(ip)

代码实现

博主后来拿百度做了实验,也是可以用的(但是要在24和25行之间添加一个sleep以弥补网络延时)。

上图是测试百度是抓取的数据包和过滤条件。

第一和第三个数据包是检测一个主机是否是一个合格的僵尸机而分别发送的SYN/ACK数据包,第二个和第四个是预备僵尸机的回复数据,通过脚本分析,该主机是一个合格的僵尸机。从5到11个数据包就是正真的僵尸扫描过程了,过程就不赘述了,如有疑惑,请参照文首的链接。

nmap实现:

使用一个简单的参数就可以实现了:nmap -p445 192.168.43.93 --script=ipidseq.nse

--script指定nmap中内置的脚本,注意"="两边不能有空格,否则会报错。

运行结果:

Starting Nmap 7.70 ( https://nmap.org ) at 2018-07-29 20:54 CST
Nmap scan report for htk90-103fe22e8 (192.168.43.93)
Host is up (0.00057s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 00:0C:29:5D:70:02 (VMware)

Host script results:
|_ipidseq: Incremental!

Nmap done: 1 IP address (1 host up) scanned in 0.45 seconds

高亮的部分表明待选僵尸主机的ipid是递增的,符合僵尸机的要求。

既然符合僵尸机的要求,那么就可以使用这台主机进行僵尸扫描:

nmap 192.168.43.58 -sI 192.168.43.93 -Pn -p 0-100

其中-sI参数指定僵尸机。

结果:

Starting Nmap 7.70 ( https://nmap.org ) at 2018-07-29 21:03 CST
Idle scan using zombie 192.168.43.93 (192.168.43.93:80); Class: Incremental
Nmap scan report for bogon (192.168.43.58)
Host is up (0.045s latency).
Not shown: 95 closed|filtered ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
23/tcp open  telnet
25/tcp open  smtp
53/tcp open  domain
80/tcp open  http
MAC Address: 00:0C:29:D8:D7:B6 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 2.98 seconds

僵尸扫描-scapy、nmap的更多相关文章

  1. 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

    端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...

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

    什么是僵尸扫描?本质也是端口扫描,不过是一种极其隐蔽的扫描方式 所以几乎不会被发现,不过也有着很大缺陷:扫描条件很高 首先需要有一台僵尸机,这里我找好一台win10僵尸机器,IP地址为:10.14.4 ...

  3. 扫描工具nmap介绍

    NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. 简介 nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推 ...

  4. 网络扫描工具nmap

    nmap一般就用来扫描主机是否在线(特别是扫描局域网内存活的机器).开放了哪些端口.其他的功能用的比较少,做渗透的人可能要了解的多些. 1.1 选项说明 nmap需要自行安装. shell> y ...

  5. 扫描工具——Nmap用法详解

    Nmap使用 Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp. Nmap可以完成以下任务: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 Nmap在实际中应 ...

  6. [na]tcp&udp扫描原理(nmap常用10条命令)

    nmap软件使用思路及常见用法 Nmap高级用法与典型场景 namp -sn 4种包 使用nmap -sn 查询网段中关注主机或者整个网段的IP存活状态 nmap -sn nmap针对局域网和广域网( ...

  7. 端口扫描工具nmap

    nmap 使用介绍 nmap是目前为止最广为使用的国外端口扫描工具之一.我们可以从[url]http://www.insecure.org/[/url]进行下载,可以很容易的安装到Windows和un ...

  8. Linux常用网络工具:批量主机服务扫描之nmap

    Linux下有很多强大网络扫描工具,网络扫描工具可以分为:主机扫描.主机服务扫描.路由扫描等. 之前已经写过常用的主机扫描和路由扫描工具,nmap支持批量主机扫描和主机服务扫描. nmap的安装直接使 ...

  9. 端口扫描程序nmap使用手册

        其实还是建议看英文的man,对以后学习其他东西很有帮助的:) 摘要 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等 ...

随机推荐

  1. 分布式项目开发-web.xml基础配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  2. 动态生成Person类的对象 代码参考

    #include <iostream> #include <string> using namespace std; class Person { private: strin ...

  3. upload-labs通关手册

    最近在练习文件上传,所以记录一下自己练习的过程,既能帮助自己以后复习,同时也能帮到初学者. 主要用到的工具是Burpsuite.首先我们应该明白上传文件的目的是什么,通过上传文件将web后门上传并被成 ...

  4. 使用PRTG和panabit结合定位网络阻塞的来源

    一.背景   在网络管理工作中,有时会出现网络阻塞,需要定位阻塞来源以采取措施解决问题.二.以一个网络阻塞案例说明定位方法   案例:某企业日常使用多条网络线路,某一段时间发现某条线路传输速率下降,对 ...

  5. 深入了解ConcurrentHashMap

    在上一篇文章[简单了解系列]从基础的使用来深挖HashMap里,我从最基础的使用中介绍了HashMap,大致是JDK1.7和1.8中底层实现的变化,和介绍了为什么在多线程下可能会造成死循环,扩容机智是 ...

  6. Java实现 LeetCode 805 数组的均值分割 (DFS+分析题)

    805. 数组的均值分割 给定的整数数组 A ,我们要将 A数组 中的每个元素移动到 B数组 或者 C数组中.(B数组和C数组在开始的时候都为空) 返回true ,当且仅当在我们的完成这样的移动后,可 ...

  7. Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)

    ** 算法训练 字符串的展开 ** 题目: 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h" ...

  8. Java实现 LeetCode 125 验证回文串

    125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...

  9. Java实现花朵数

    一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水 ...

  10. TZOJ 复习时间

    描述 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.为了追求更高的效率,xhd要根据难度值来选择合适的课程进行复习,复习后一门课的效率为前一门课之间的难度差的平方,而复习第一门课的效率 ...