當我們輸入賬號、密碼登錄一個網站時,網站如果允許你使用HTTP(明文)進行身份驗證,此時捕獲通信流量非常簡單,然後就可以對捕獲到的流量進行分析以獲取登錄賬號和密碼。這種方法不僅適用於局域網,甚至還適用於互聯網。這就意味著,攻擊者將可以破解任何使用HTTP協議進行身份驗證的網站密碼。
在局域網內要做到這一點很容易,這不禁使你驚訝HTTP是有多麼的不安全。你可以在宿捨網絡、工作網絡,甚至是校園網絡嘗試這種破解方法,不過校園網絡需要允許廣播流量功能,並且要求你的局域網網卡可以設置為混雜模式。
下面就讓我們在一個簡單的網站上實驗這種方法,本實驗我是在同一個電腦上進行的。實踐的時候,你可以在虛擬機和物理機之間進行。
注意,一些路由器並不支持廣播流量功能,所以在這種路由器上可能會失敗。
Step 1:運行WireShark並捕獲流量
在Kali Linux中可以按以下步驟運行WireShark:
Application > Kali Linux > Top 10Security Tools > Wireshark
在WireShark中依次點擊 Capture > Interface 選項,然後選中適用的網卡接口,在我的例子中,我使用了一個USB無線網卡,所以我選擇了 wlan0。
如果一切順利,那麼接下來你可以按下開始按鈕,然後Wireshark將開始捕獲流量。如果你錯過了這一步,那麼你通過回到 Capture > Interface > Start開始捕獲流量。
Step 2:過濾POST數據流量
此時,Wireshark開始監聽並捕獲所有的網絡流量。然後我打開浏覽器並用我的用戶名和密碼登錄一個網站,當認證過程結束並成功登錄之後,返回並停止Wireshark的流量捕獲。
通常情況下,將會捕獲很多流量數據,然而我們只對POST數據感興趣。為什麼是POST數據呢?
因為當你輸入用戶名和密碼並點擊登錄按鈕時,將會產生一個POST方法將你輸入的數據發送到遠程服務器上。
為了過濾並濾出POST數據,可以在Filter輸入框中輸入以下指令:
http.request.method== "POST"
下圖中顯示了一個POST事件。
Step 3:分析POST數據以獲取用戶名和密碼
接下來,點擊POST事件那一行,然後右擊選擇“Follow TCPSteam”。
此時,將會打開一個新窗口,窗口中包含類似下面的內容:
HTTP/1.1 302 Found
Date: Mon, 10 Nov 2014 23:52:21 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: non=non; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/
Set-Cookie: password=e4b7c855be6e3d4307b8d6ba4cd4ab91; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/
Set-Cookie: scifuser=sampleuser; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/
Location: loggedin.php
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8
即在這個例子中:
1、用戶名:sampleuser
2、密碼:e4b7c855be6e3d4307b8d6ba4cd4ab91
由上面的密碼值可以猜想,“e4b7c855be6e3d4307b8d6ba4cd4ab91”肯定不是真實的密碼值,而應該是一個哈希值。
需要注意的是,一些不注重安全的網站並未對用戶發送的密碼值求哈希值,而是直接將密碼明文發送給服務器。對於這種網站,到這一步就能夠得到用戶名和密碼信息了。而在我分析的例子中,我們還需要更進一步,即識別該哈希值對應的密碼值。
Step 4:確定哈希類型
在這一步中,我將使用hash-identifier工具來確定上面的密碼哈希值到底是什麼類型的哈希。打開終端,然後輸入“hash-identifier”並將上面的哈希值粘貼到終端,回車之後hash-identifier將會給出可能的匹配值。
因為有一件事可以確定,即上面的哈希值不是域緩存憑證(Domain Cached Credential),所以它肯定是MD5哈希值。然後,就可以使用hashcat或者cudahashcat破解該MD5哈希值, 點擊這裡 了解更多。
Step 5:破解MD5哈希密碼
可以使用hashcat或者類似的工具很容易地破解這個密碼。
root@kali:~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(or)
root@kali:~# cudahashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(or)
root@kali:~# cudahashcat32 -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(or)
root@kali:~# cudahashcat64 -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
因為我測試的密碼存在於我的密碼字典中,所以hashcat可以很容易就能破解出。
結論
其實,不可能確保每個網站都使用SSL來保證密碼的安全,因為對於每一個URL來說,使用SSL服務都需要花錢。然而,網站所有者(任何人都可以注冊的公共網站)至少應該在登錄環節進行哈希值求解操作,這樣至少在攻擊者破解網站密碼的時候能夠多設置一道屏障。