Kali學習筆記11:僵屍掃描案例


什么是僵屍掃描?本質也是端口掃描,不過是一種極其隱蔽的掃描方式

所以幾乎不會被發現,不過也有着很大缺陷:掃描條件很高

 

首先需要有一台僵屍機,這里我找好一台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 == "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)

 

使用腳本:

如果腳本是從windows移過來的:

vi xxx.py

:set fileformat=unix

:wq

chmod u+x xxx.py

./xxx.py

 

使用:

 

效果還是非常不錯的!

這個腳本其實已經是一個比較完善的了,可以實際使用了,不過還是有更不錯的方法

 

強大的Nmap工具:NMAP本身提供了大量用於僵屍掃描的腳本程序(大概400多種)

我們可以在NMAP中調用這些腳本程序來判斷一個主機是否是一個合適的僵屍機。

同樣這些腳本所遵循也是根據對方IPIID是否遞增來判斷的。

 

首先判斷是否是一個好僵屍:

 

Incremental!!!可以使用的僵屍機

接下來就使用這個僵屍機來掃描:

 

掃描結果和我們腳本掃描的結果一樣!

成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM