seed lab 2020 packet sniffing and spoofing lab

戴上聖誕帽我還是一條好漢發表於2020-10-17

本實驗均使用 python3 scapy 完成

本文可能使用到的同時發包和收包的程式如下:

1.	import subprocess  
2.	from time import *  
3.	from sys import *  
4.	  
5.	sniffer=subprocess.Popen(['python3','tcp_sniffer.py'])  
6.	sleep(0.5)  
7.	sender=subprocess.run(args=['python3','tcp_sender.py'],stdout=subprocess.PIPE)  
8.	sleep(0.5)  
9.	sniffer.kill()  
10.	  
11.	print('\n\n'+str(sender.stdout,encoding='utf-8'))  
12.	exit()

Task1.1A

通過設定filter規則為’icmp’,可以過濾掉其他的資料包;通過指定prn的引數為顯示資料包的函式在終端列印資料包。在執行sniffer.py指令碼的同時,使用ping發出icmp資料包。
當使用sudo執行指令碼時可以正常捕獲icmp包,如下圖:
在這裡插入圖片描述
當不使用sudo執行指令碼時,顯示操作不被允許,根據報錯可以看到這是因為__init__socket.socket.init(self,family,type,proto,fileno)函式的執行需要更高的許可權。
在這裡插入圖片描述

Task1.1B

(1)
捕獲icmp的操作與task1.1A相同。

(2)

主機ip為10.222.182.210。

Seedlab主機ip:
在這裡插入圖片描述

編寫嗅探指令碼tcp_sniffer.py:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='tcp and src host 10.0.2.15 and dst port 23',prn=print_pkt)

編寫發包指令碼tcp_sender.py:

1.	from scapy.all import *  
2.	  
3.	ip=IP()  
4.	ip.src='10.0.2.15'  
5.	ip.dst='10.222.182.210'  
6.	tcp=TCP()  
7.	tcp.dport=23  
8.	send(ip/tcp) 

收到資料包結果:
在這裡插入圖片描述
(3)
發包指令碼subnet_sender.py:


1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='tcp and src host 10.0.2.15 and dst port 23',prn=print_pkt)


編寫發包指令碼tcp_sender.py:

1.	from scapy.all import *  
2.	  
3.	ip=IP()  
4.	ip.src='10.0.2.15'  
5.	ip.dst='10.222.182.210'  
6.	tcp=TCP()  
7.	tcp.dport=23  
8.	send(ip/tcp) 

收到資料包結果:
在這裡插入圖片描述
(3)
發包指令碼subnet_sender.py:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='128.230.0.0/16')) 

嗅探指令碼subnet_sniffer.py:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='dst net 128.230.0.0/16',prn=print_pkt) 

利用script.py執行抓到資料包結果如下:
在這裡插入圖片描述

Task1.2

使用icmp_spoofing.py發包:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='10.222.182.210')/ICMP())

用wireshark看到來回的資料包:

在這裡插入圖片描述

Task1.3

使用下面的tarcerout.py指令碼傳送syn包並接收返回包:

1.	from scapy.all import *  
2.	  
3.	ans,unans=sr(IP(dst='www.baidu.com', ttl=(4,25))/TCP(flags=0x2))  
4.	for snd,rcv in ans:  
5.	    print(snd.ttl, rcv.src, isinstance(rcv.payload, TCP))

實驗結果如下:

Task1.4

用sniff_spoof.py截獲本網段的資料包併發出回應包:

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        send(IP(src=pkt[IP].dst,dst=pkt[IP].src)/ICMP(type='echo-reply',code=0,id=pkt[ICMP].id,seq=pkt[ICMP].seq))  
5.	  
6.	pkt=sniff(filter='icmp[icmptype]==icmp-echo',prn=print_pkt) 

被劫持的ping應答:
在這裡插入圖片描述

可以看到上面的應答包明顯比下面正常情況下的應答包速度快很多:
在這裡插入圖片描述

task2.1A

使用下面icmp_sniffer.py截獲資料包

1.	from scapy.all import *  
2.	  
3.	def print_pkt(pkt):  
4.	        pkt.show()  
5.	  
6.	pkt=sniff(filter='icmp',prn=print_pkt)

結果截圖:
在這裡插入圖片描述

qestion1:這個程式首先在包到達後通過filter指定的引數判斷是否是符合條件的包,如果是就呼叫prn指向的函式執行,並且將資料包返回給等號左邊的變數
qestion2:因為scapy涉及到資料包的監聽和修改,這些操作如果不根據使用者許可權進行限制將會造成安全問題
qestion3:使用混雜模式後可以截獲本網段下另一個機器的ping包,不使用則不行

在這裡插入圖片描述

task2.1b

使用下面指令碼捕獲icmp和ip為10.0.2.15和192.168.43.16之間的icmp:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='icmp && host 10.0.2.15 && host 10.219.160.70',prn=print_pkt) 

實驗結果:

在這裡插入圖片描述

用下面的程式碼捕獲tcp和指定埠的資料包:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='tcp && dst portrange 10-100',prn=print_pkt) 

ssh的埠號為22,可以用作測試。
在這裡插入圖片描述

截獲的ssh協議包:
在這裡插入圖片描述

task2.1c

將埠設為25監聽telnet的報文:

1.	from scapy.all import *  
2.	def print_pkt(pkt):  
3.	        pkt.show()  
4.	  
5.	pkt=sniff(filter='tcp port 25',prn=print_pkt) 

密碼截圖省略。

task2.2A

發包指令碼:

1.	from scapy.all import *  
2.	  
3.	send(IP(src='10.0.2.15',dst='10.219.160.70')) 

用wireshark截獲的資料包

在這裡插入圖片描述

task2.2b

向www.baidu.com傳送請求icmp包:

1.	from scapy.all import *  
2.	  
3.	send(IP(dst='www.baidu.com',src='10.0.2.15')/ICMP(type=8,code=0)) 

收到來自百度的應答報文:
在這裡插入圖片描述

question4:將資料包長度改為200依然能成功發出資料包
在這裡插入圖片描述

question5:用python不需要自己計算校驗和
question6:函式內部的呼叫需要root許可權,如果沒有許可權會停在下面的函式
在這裡插入圖片描述

task2.3

使用python和task1.4的操作相同。

相關文章