1. 程式人生 > 其它 >kali滲透測試日記 - scapy定製資料包

kali滲透測試日記 - scapy定製資料包

Scapy概述

Scapy 是一個可以讓使用者傳送、偵聽和解析並偽裝網路報文的 Python 程式。這些功能可以用於製作偵測、掃描和攻擊網路的工具。

預配置

如果在kali的終端使用scapy命令出現INFO提示找不到PyX,則需要安裝:

apt install python3-pyx

定製ARP包

ARP包的格式

>>> ARP().display()
###[ ARP ]### 
  hwtype= 0x1    #硬體型別
  ptype= IPv4    #協議型別
  hwlen= None    #硬體地址長度 MAC長度
  plen= None     #協議地址長度
  op= who-has    #who-has查詢
  hwsrc= 00:0c:29:f6:26:6a     # 源MAC
  psrc= 192.168.3.53           # 源IP地址
  hwdst= 00:00:00:00:00:00     # 目的MAC
  pdst= 0.0.0.0                # 目的IP地址

>>> 

sr1 函式作用:sr1 函式包含了傳送資料包和接收資料包的功能。

>>> sr1(ARP(pdst="192.168.3.1"))
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=c4:2b:44:48:a3:99 psrc=192.168.3.1 hwdst=00:0c:29:f6:26:6a pdst=192.168.3.53 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>  
>>> exit

可見ARP包傳送成功並收到來自src=192.168.3.1的應答包。(大家根據自己本地存在的主機IP靈活改變pdst哈)

定製PING包

首先啟動scapy,獲取IP包和ICMP包的格式。

IP().display()
###[ IP ]### 
 version= 4        版本:4,即 IPv4
 ihl= None         首部長度
 tos= 0x0          服務
 len= None         總長度
 id= 1             標識
 flags= 
 frag= 0           標誌
 ttl= 64           生存時間
 proto= hopopt     傳輸控制協議 IPv6 逐跳選項
 chksum= None      首部校驗和
 src= 127.0.0.1    源地址
 dst= 127.0.0.1    目的地址
ICMP().display()
###[ ICMP ]### 
 type= echo-request   型別,標識 ICMP 報文的型別
 code= 0              程式碼
 chksum= None         校驗和
 id= 0x0              標識
 seq= 0x0

通過PING()來指定源IP和目的IP
通過ICMP()來指定為PING包的型別。
思路:
1、修改 IP 包頭的 dst,也就是我們的目的地址
2、拼接上 ICMP 的資料包型別
3、使用 sr1()進行傳送資料包並接收資料包

>>> sr1(IP(dst="192.168.3.1")/ICMP(),timeout=1)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP  version=4 ihl=5 tos=0x0 len=28 id=8377 flags= frag=0 ttl=64 proto=icmp chksum=0xd2a1 src=192.168.3.1 dst=192.168.3.53 |<ICMP  type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>                              
>>> 

定製TCP-SYN請求

首先檢視TCP包格式。

>>> TCP().display() 
###[ TCP ]### 
 sport= ftp_data   TCP 源埠
 dport= http       TCP 目的埠
 seq= 0            32 位序號
 ack= 0            32 位確認序號
 dataofs= None     4 位首部長度 
 reserved= 0       保留 6 位
 flags= S          標誌域,緊急標誌、有意義的應答標誌、推、重置連線標誌、同步序列號標誌、完成傳送資料標誌。
# 按照順序排列是:URG、ACK、PSH、RST、SYN、FIN
 window= 8192      視窗大小
 chksum= None      16 位校驗和
 urgptr= 0         優先指標
 options= []       選項
>>> sr1(IP(dst="192.168.3.1")/TCP(flags="S",dport=80),timeout=1)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP  version=4 ihl=5 tos=0x0 len=44 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0xb345 src=192.168.3.1 dst=192.168.3.53 |<TCP  sport=http dport=ftp_data seq=601526135 ack=1 dataofs=6 reserved=0 flags=SA window=29200 chksum=0xeac8 urgptr=0 options=[('MSS', 1460)] |<Padding  load='\x00\x00' |>>>             
>>> 

flags=”S”表示 SYN 資料包
dport=80 表示目標埠 80

我們的到一個 flags=SA 的資料包。SA 標誌即 SYN+ACK。我們收到伺服器 tcp 三次握手中的第二個包,能收到迴應,表示埠開放。
注:這種基於 tcp 的半連結掃描,更隱密,更不容易被發現。