内容简介:一个合格的僵尸机是实现僵尸扫描的关键因素,僵尸至少要保证在进行扫描阶段不会产生其它的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
以上所述就是小编给大家介绍的《僵尸扫描》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Outlaw组织僵尸网络分析:加密货币挖矿、扫描、暴力破解
- 什么是僵尸进程,如何找到并杀掉僵尸进程?
- BYOB:我的天!又一个僵尸网络开源了BYOB僵尸网络开源代码
- Linux 系统中僵尸进程
- 追踪分析LiquorBot僵尸网络
- 揭秘Remcos下的僵尸网络
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!