搭載Arp攻擊實驗分析
研究生課程-信安實驗報告整理
前言
ARP是什麼?
ARP(Address Resolution Protocol)是地址解析協議。作用是將32位IP地址解析為48位MAC(硬體地址)的協議。
ARP的工作流程
第一步
假設主機A想和主機B通訊,主機A根據路由表的內容,找到主機B的IP,然後在自己的ARP高速緩衝中,檢視有無主機B的MAC地址。如果沒有,主機A會發送一個ARP請求廣播包,本地網路上的每臺主機都接收到主機A的ARP請求並且檢查是否與自己的IP地址匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。
第二步
主機B在ARP請求分組中看到自己的IP地址,就向主機A傳送ARP響應分組,並寫入自己的硬體地址。同時,主機B還把主機A的IP地址和MAC地址的對映關係也儲存到自己的ARP快取記憶體中。
第三步
主機A收到主機B的ARP響應分組後,就在其ARP快取記憶體中寫入主機B的IP地址到硬體地址的對映。這樣,主機A、B都有了彼此的IP和硬體地址,雙方可以通訊了。
ARP的缺陷分析
無狀態
ARP快取記憶體根據所接收到的ARP協議包隨時進行動態更新,它是無狀態的協議,不會檢查自己是否發過請求包,只要收到目標MAC傳送的ARP響應資料包或ARP廣播包,都會接受並快取。
不認證
ARP協議沒有認證機制,只要接收到的協議包是有效的,主機就無條件地根據協議包的內容重新整理本機ARP快取,並不檢查該協議包的合法性。
實驗探索
實驗環境
WinXP:裝有WinArpAttack與WireSharp
win7: 靶機
實驗工具在文末給出
實驗流程
開啟WinArpAttacker工具,點選[掃描],就能獲取整個區域網的資訊

介面
其中:
紅色方框就是靶機(Win7)的資訊
藍色方框是預設的閘道器
IP為192.168.248.132就是宿主機XP的資訊
選中靶機,進行 [不斷IP] 的攻擊,開啟WireSharp,由下面的圖,可以觀察到:

網路中湧現了大量Arp包,我們隨意點一個進去看(下圖)。

可以看到源地址的MAC地址(Sender MAC address )是偽造的(01:01:01:01:01:01),目的地址(Target MAC address)就是靶機的地址。
這樣同一個IP地址就有兩個不一樣的MAC地址,我們知道IP地址是唯一的,並且對應的MAC地址也應該是唯一的。當網路中出現一個IP地址對應多個MAC地址時,就會產生IP衝突,嚴重還會導致宕機!
由分析的結果,我們可以瞭解到 [不斷IP衝突] 這種攻擊模式的原理就是:
保持靶機的IP地址不變,修改MAC地址,並在網路中傳送大量這樣的包。
另外,我們可以看到靶機的ARP相關請求數目不斷增多。

我們再選擇[禁止上網]的攻擊模式,抓包分析得到如下結果:

可以看到,有兩個可疑的包。
開啟第一個包,發現偽裝成IP地址與靶機相同的一個包,但是修改了mac地址,然後傳送給閘道器(192.168.248.2),因為閘道器不會辨別是否是真的靶機傳送來的,所以閘道器收到arp包以後,將IP地址與mac地址儲存在自己的高速Arp快取中。此時靶機在閘道器的ARP對應關係就被修改成錯誤的了。
同時在第二個包中,我們可以發現:這個Arp包偽裝成閘道器的IP地址,將自己的mac地址改變,然後傳送給靶機,靶機就會將其儲存在快取中。這樣靶機的高速Arp緩衝中儲存的閘道器對應關係就是錯誤的。
由此,我們可以知道該次攻擊進行了一次雙向欺騙,閘道器中儲存的是錯誤的靶機資訊,靶機中儲存的是錯誤的閘道器資訊。

為了更好地看到結果,在攻擊之前,我們在靶機中輸入' arp -a ' ,可以看到正確的對映關係。

攻擊之後,我們在靶機下再次執行' arp -a ',此時,就會發現閘道器的mac地址變了。由此可見, [禁止上網] 攻擊的原理就是:
發包欺騙閘道器,告訴閘道器錯誤的靶機MAC地址,這樣會導致靶機無法接受到閘道器傳送的資訊,進而不能上網。

值得一提的是,當我們在靶機上再次輸入' arp -a ',此時會發現閘道器的mac地址又自動回覆成原來的,這是因為每隔一段時間會發送廣播包,重新建立對映關係,這樣又能回到正確的對映關係了。

程式設計部分
接下來,我們基於Winpcap編寫程式,對指定的目標IP地址進行ARP欺騙攻擊。
在我們使用Wincap來手動構造Arp包時,可以從網上找來Arp的包資訊,也可以去WireSharp中抓取一個Arp包,來獲取Arp包的資訊,這樣對我們在使用程式碼構造Arp包時有很大的幫助。


開啟WireSharp,可以看到傳送的很多包,任意選取一個Arp包,然後雙擊開啟。

可以看到目的地址是ff:ff:ff:ff:ff:ff,源地址是 00:50:56:C0:0C:08,當我們點選某個條目是,下面自動對應到數字,非常直觀。

在構造Arp包之前,首先獲取裝置名稱,在ifirst下直接執行即可,紅色方框裡面就是專案名,記住要全部複製,同時\要改為\,這是為了防止轉義字元做。

在使用vc++較低版本的時候,在專案[右鍵],點選 Set as Start Up Project然後可以看是運行了。
當我們清楚arp包的結構之後,就能夠實現Arp攻擊,我們先進行 [IP衝突] 攻擊,假設我們要攻擊的目標IP 為192.168.227.135,我們就能偽造一個假的mac地址來,我們設為1.1.1.1.1.1,然後設立目的mac: 00:50:56:C0:0C:08, 依次,再設立硬體協議等等,設定完畢以後開始設定ip地址。根據上述IP的衝突原理,源ip地址和目的ip地址都設定成靶機的192.168.227.135,源mac地址設定成為1.1.1.1.1.1,目的mac地址設定為00:50:56:C0:0C:08。
單單一個包肯定是不夠的,在這裡我們設定flood的數,表示傳送包的數量。可以看到如下結果,我們設定的flood的數目為10,那麼傳送了10次衝突。
可以看到如下結果,我們設定的flood的數目為10,那麼傳送了10次衝突

再點進包裡面,可以包的資訊(目的mac地址,目的ip地址等)與我們設定的是一摸一樣的。由此就造成了IP衝突,我們還可以模擬禁止上網,照葫蘆畫瓢即可。

修改程式碼,主要是修改sendpack.c
程式碼地址工具
關注[微信公眾號] 文無第一 ,回覆 arp 就能獲取雲盤連線。
工具僅作學習交流之用,請勿濫用。
