1. 程式人生 > >Kali學習筆記11:僵屍掃描案例

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

runtime spa level rbo lag 端口開放 ref zomb evel

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

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

首先需要有一臺僵屍機,這裏我找好一臺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!!!可以使用的僵屍機

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

技術分享圖片

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

成功

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