在有進行破解意願的想法誕生之前,博主得先來給各位潑一盆涼水,本文介紹的方法破解http的輕而易舉,而對於https的就算了。因為Wireshark 沒有session key ,不能解密SSL數據流。沒有那東東有什么影響呢?嗯,這么說吧,https是以安全為目標的HTTP通道,簡單講,就是HTTP的安全版。而怎么個安全法呢?原來https在HTTP下加入SSL層,so,https的安全基礎是SSL。這篇文章可以去破解那些以http開頭的網站,比如糗事百科啦,你學校的教務系統啊,一些公司的內部網站啊,其實也挺多的。想更多知道http和https的請自行百度。
當我們輸入賬號、密碼登錄一個網站時,網站如果允許你使用HTTP(明文)進行身份驗證,此時捕獲通信流量非常簡單,然后就可以對捕獲到的流量進行分析以獲取登錄賬號和密碼。這種方法不僅適用於局域網,甚至還適用於互聯網。這就意味着,攻擊者將可以破解任何使用HTTP協議進行身份驗證的網站密碼。
其實很簡單,會幾個語句,ping下目標網站ip,過濾出局域網內的關於那個網站的包,然后把POST截下,從那一堆玩意中,就能找到了。但注意破解只限於局域網內,就是說在你的主機連接的網絡同一個網絡下,而且得要有主機成功登陸你所想破解的那個網站。
在局域網內要做到這一點很容易,這不禁使你驚訝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”。
此時,將會打開一個新窗口,窗口中包含類似下面的內容:
1
2
3
4
5
6
7
8
9
10
11
12
|
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哈希值, 點擊這里 了解更多。
【hashcat可以看這里: http://hashcat.net/hashcat/】
Step 5:破解MD5哈希密碼
可以使用hashcat或者類似的工具很容易地破解這個密碼。
1
2
3
4
5
6
7
|
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服務都需要花錢。然而,網站所有者(任何人都可以注冊的公共網站)至少應該在登錄環節進行哈希值求解操作,這樣至少在攻擊者破解網站密碼的時候能夠多設置一道屏障。