僵尸扫描

栏目: 编程工具 · 发布时间: 6年前

内容简介:一个合格的僵尸机是实现僵尸扫描的关键因素,僵尸至少要保证在进行扫描阶段不会产生其它的IP包,即是不会与我们主机之外的任何机器进行第三层的IP通讯,至少在我们控制其进行扫描的阶段不可以,否则将直接导致IPID的数值增大何为合适的僵尸机:1)足够闲置;2)它的IPID必须是递增的,0和随机都不可以。然而现在大部分主流的OS的IPID都是随机产生的,但是早期的xp,比如xp2000,xp2003都是递增的IPID。三次握手:

一个合格的僵尸机是实现僵尸扫描的关键因素,僵尸至少要保证在进行扫描阶段不会产生其它的IP包,即是不会与我们主机之外的任何机器进行第三层的IP通讯,至少在我们控制其进行扫描的阶段不可以,否则将直接导致IPID的数值增大

何为合适的僵尸机:1)足够闲置;2)它的IPID必须是递增的,0和随机都不可以。然而现在大部分主流的OS的IPID都是随机产生的,但是早期的xp,比如xp2000,xp2003都是递增的IPID。

僵尸扫描的过程

三次握手:

僵尸扫描

僵尸扫描过程:

僵尸扫描

扫描者主机对Zombie(僵尸机)发送SYN/ACK包,然后Zombie(假设此时系统产生的IPID为x)会回给主机一个RST,主机将会得到Zombie的IPID,然后扫描主机向目标机器发送一个SYN包,有所不同的是,此时扫描主机会伪造一个伪装成Zombie的IP(即是x)向目标主机发送SYN包。如果目标的端口开放,便会向Zombie返回一个SYN/ACK包,但是Zombie并没有发送任何包,zombie会向目标主机发送RST,此时Zombie的IPID将会增加1:x+1,最后,扫描者主机对Zombie(僵尸机)发送SYN/ACK包,然后Zombie会回给主机一个RST,此时IPID=x+2

僵尸扫描

若果目标主机的端口并未开放,那么目标主机也会向Zombie发送一个RST,但是Zombie收到RST包不会有任何反应,所以IPID不会改变(依旧是x)。最后扫描者主机再向Zombie发送一个SYN/ACK,同样的Zombie会向扫描者主机发送一个RST包,此时Zombie的IPID将变成(x+1).通过IPID的数值来判断目标机器的端口是否开放

测试

扫描主机 kali: ip:192.168.0.5

zombie kali: ip:192.168.0.6

目标主机 Windows:  ip:192.168.0.7

scapy实现僵尸扫描

构造request zombie包:

>>> i=IP() #构造ip包头
>>> t=TCP() #构造tcp包头
>>> rz=(i/t) #request_zombie,构造发送给僵尸机的数据包,将发送给zombie Kali
>>> rt=(i/t) #request_target,构造发送给目标主机的数据包,将发送给windows
>>> rz[IP].dst="192.168.0.6"//定义zombie的ip地址
>>> rz[TCP].dport=445 //定义发送到zombie的端口,务必确保这个端口是开启的端口,445端口是win中默认开启的
>>> rz[TCP].flags="SA"//定义向zombie发送的数据包是SYN/ACK包

构造request target包:

>>> rt[IP].src="192.168.0.6"//定义rt包的源ip地址,直接伪造为zombie Kali的IP
>>> rt[IP].dst="192.168.0.7"//定义rt包的目的ip,就是目标windows的IP
>>> rt[TCP].dport=25//定义rt包扫描的端口
>>> rt[TCP].flags="S"//定义发送的rt包为SYN包

然后将会发送两次rz包,一次rt包,最后在对结果进行分析。

>>>az1=sr1(rz) #向zombie发第一个包
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
 
>>>at=sr1(rt,timeout=1) #向目标机发包,由于我们不会收到回包,因为给zombie了,所以需要设置超时时间
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
 
>>>az2=sr1(rz) #向zombie发送第二个包
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets

分析az1与az2的IPID:

>>> az1
<IP  version=4L ihl=5L tos=0x0 len=40 id=436 flags= frag=0L ttl=128 src=192.168.0.6 dst=192.168.0.5 options=[] 
>>> az2
<IP  version=4L ihl=5L tos=0x0 len=40 id=438 f proto=tcp chksum=0xac5 src=192.168.0.6 dst=192.168.0.5

通过分析发现目标的25是开放的。

Python脚本实现僵尸扫描

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
 
def ipid(zombie):#定义一个ipid函数,同时定义一个zombie变量。该函数的作用是探测一主机是否可以作为僵尸机
  reply1 = sr1(IP(dst=zombie)/TCP(flags="SA"), timeout=2,verbose=0)#向zombie发送一个syn/ack包
  send(IP(dst=zombie)/TCP(flags="SA"),verbose=0)#send()与sr1()方法的区别是:sr1发送出去一个包以后会在接收对方的一个回包,而send方法不会接收包
  reply2 = sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)#紧接着在向僵尸机发送一个syn/ack包
  if reply2[IP].id == (reply1[IP].id+2):#根据发送的三个来判断僵尸机是否足够空闲,并且ipid序号是否为递增的。
    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:") #输入要扫描的目标主机ip
      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):#扫描目标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)

NMAP实现僵尸扫描

同样的,如果使用NMAP进行僵尸扫描,首先找到合适的僵尸机是最关键的。

除此以为,NMAP本身提供了大量用于僵尸扫描的脚本程序(大概400多种),可以在NMAP中调用这些脚本程序来判断一个主机是否是一个合适的僵尸机。同样这些脚本所遵循也是根据对方IPIID是否递增来判断的。

NMAP扫描指定端口判断主机是否是合适的zombie

root@kali:~# nmap -p445 192.168.86.132 --script=ipidseq.nse
 
Starting Nmap 7.01 ( https://nmap.org ) at 2016-05-28 05:12 EDT
Nmap scan report for bogon (192.168.86.132)
Host is up (0.00033s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 00:0C:29:10:88:B3 (VMware)
 
Host script results:
|_ipidseq: Incremental!
 
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds

可以看到该主机的ipid是递增的,僵尸找到了,开始进行扫描

NMAP 僵尸扫描

root@kali:~# nmap 192.168.0.7 -sI 192.168.0.6 -Pn -P 0-100
 
Starting Nmap 7.01 ( https://nmap.org ) at 2016-05-28 05:16 EDT
Idle scan using zombie 192.168.0.6 (192.168.0.6:80); Class: Incremental
Nmap scan report for bogon (192.168.0.7)
Host is up (0.051s latency).
Not shown: 977 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
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp

以上所述就是小编给大家介绍的《僵尸扫描》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Coming of Age in Second Life

Coming of Age in Second Life

Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95

The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具