TCP三次握手分析、http登錄密碼抓取

概述:本次實驗利用Wireshark先對TCP三次握手原理進行分析,解釋TCP連接建立的過程,並用“兩軍問題”解釋爲什麼要進行三次握手;然後分析TCP連接的安全性,概述SYN洪範攻擊和SSL,利用Wireshark抓取http登錄密碼,證明http是明文傳輸,數據不安全,而https是密文傳輸,安全可靠;最後對免費WiFi熱點的安全性提出自己的一些思考。


一,Wireshark分析TCP三次握手

1,抓取數據包

1.1,打開Wireshark,在過濾欄輸入“http”進行抓包過濾。點擊開始,進行抓包。 
1.2,打開瀏覽器,輸入網址www.csdn.net進行訪問。 
1.3,打開www.csdn.net的網頁源代碼,查看響應服務器的域名地址爲read.csdn.net 
這裏寫圖片描述

打開cmd,ping 域名地址read.csdn.net的ip,得到響應服務器的ip地址爲101.201.170.152。 
這裏寫圖片描述

1.4,在抓取到的數據包找到本機和101.201.170.152的交互信息,並找到協議爲HTTP,方法爲GET的數據包,如圖所示。 
這裏寫圖片描述
右鍵選擇Follow TCP Stream,在彈出的窗口中,可以查看到Host和Referer,證明該數據包確實是來自csdn網站。 
這裏寫圖片描述

2,三次握手分析

2.1在追蹤到的TCP流中,可以看到在HTTP之前有三次TCP數據交互,分別是 
第1次:本機->csdn服務器          客戶端向服務器發送連接請求
第2次:csdn服務器->本機          服務器對客戶端的連接請求進行響應,允許請求。
第3次:本機->csdn服務器          客戶端接收到服務器的響應後,進行應答。
這裏寫圖片描述

2.2網上隨便一搜,鋪天蓋地有一堆三次握手的示意圖,找一張過來便於對數據包進行分析: 
這裏寫圖片描述

對應着三次握手的示意圖,對數據包進行分析。

第一次握手(SYN)

這裏寫圖片描述

(1)源IP:本機IP 目的IP:服務器IP;表示本機發往服務器的TCP報文段。 
(2)源端口3800,目的端口爲80(http熟知端口) 
(3)Syn=1,Seq=0,Ack=0 
Client通過發送一個TCP報文段向服務器
發起連接請求,該報文段被稱爲SYN報文段, 不包含應用數據,Syn的值被置爲1,後面可以看到在連接未建立成功時,Syn的值都爲1,連接建立成功之後,Syn爲0,它表示Client和Server都已經Established,可以進行數據傳輸。 
Seq是Client選擇的起始序列號,此處是0。關於序列號的選擇也有諸多的研究,因爲適當的選擇序列號可以避免某些安全性攻擊。 
Ack值爲0。

第二次握手(SYNACK)

這裏寫圖片描述 
(1)源IP: 服務器IP 目的IP:本機IP 表示服務器返回給本機的應答TCP報文段 
(2)源端口80,目的端口爲3800 
(3)Syn=1,Ack=1 , Seq=0 
該報文段被稱爲SYNACK報文段,顧名思義,這是
Server對Client發送的SYN報文段進行確認(ACK),示意Client連接被允許。該報文段也不包含應用數據。 
SYN被置爲1,因爲連接還未建立成功。 
Ack的值爲Client的初始Seq加1,於是Ack=1; 
Server端的初始序列號Seq=0

第三次握手(ACK)

這裏寫圖片描述 
(1)源IP:本機IP 目的IP:服務器IP;表示本機發往服務器的確認TCP報文段。 
(2)源端口3800,目的端口爲80 
(3)Syn=0,Ack=1,Seq=0 
該報文段被稱爲ACK報文段,是
Client對Server的應答進行確認(ACK),服務器成功收到ACK報文段之後,連接就建立成功了。 
此時Syn的值被置爲0; 
Ack的值爲Server的初始Seq加1。


二,爲什麼是三次握手?

imooc上Tony老師是利用有名的兩軍問題來進行解釋的,課程地址http://www.imooc.com/view/258 
在此先感謝老師,然後將課件截圖過來和大家分享:

這裏寫圖片描述 
設左邊的藍色部隊爲A藍,右邊的藍色部隊爲B藍。 
(1)第一次握手:A藍數據成功到達B藍,B藍收到A藍的通知“你準備好攻打紅色部隊了嗎?” 
(2)第二次握手:B藍回覆A藍,“我準備好了!”。 
假設回覆成功到達A藍,但是此時B藍並不知道A藍是否成功收到了它的回覆,因此它並不敢輕舉妄動,假設A藍並沒有收到回覆,沒有出兵,那B藍豈不是會全軍覆沒。於是很有必要進行第三次握手。 
(3)第三次握手:A藍回覆B藍,“我知道你準備好了,開打吧!” 
當B藍收到這個確認之後,就可以開始出兵了。 
理論上來說,兩軍的溝通永遠停不下來,因爲沒有辦法確認最後一次數據包是否成功到達對方,所以三次握手也並不是絕對的可靠,可以選擇四次,甚至多次握手,但是考慮到開銷,選擇三次握手,能保證足夠的可靠性了。


三,初識SYN洪範攻擊和SSL

1, SYN洪範攻擊(SYN flood attack)

在上述TCP三次握手的過程中,涉及到一個問題,那就是TCP緩存和變量的設置,傳統的設置緩存和變量的大致過程如下: 
(1)第二次握手時,Server端分配TCP緩存和變量,生成一個半開TCP連接。 
(2)第三次握手時,Client端分配TCP緩存和變量,TCP雙向連接建立成功。 
SYN洪範攻擊是指,攻擊者利用多個源發出衆多的SYN報文段,但是不會發出ACK報文段,如果按照傳統的TCP連接方式,Server端每接收到一個SYN報文段就會分配TCP緩存和變量,建立半開TCP連接。於是這種攻擊會致使服務器的連接資源消耗殆盡,可憐的服務器此時相當於被攻擊者鉗制住了,別的合法的Client就無法與Server進行TCP連接了。 
由此可以看出,在TCP第三次握手之前進行緩存和變量分配的連接方式,其實是不安全。

2,SSL(Secure Socket Layer)

SSL,即安全套接字層,另外一個類似的名字是TSL,(Transport Layer Security,運輸層安全性)是SSL3的修改版本。 
SSL子層位於應用層之下,傳輸層之上,通過SSL套接字接口與應用層對接,通過TCP套接字與傳輸層對接。 
SSL最大的功能就是使得TCP的連接和數據傳輸變得安全,它運用了加密技術,在數據傳送到傳輸層之前對數據進行加密,具體涉及到的加密算法,和防攻擊技術,在此就不具體介紹了(其實是因爲我也不是很懂)。 
這樣一來,數據就是密文傳輸,而非明文。我們在日常生活中經常聽到兩個名詞,一個是http,另一個是https,這兩者的區別在於後者使用了SSL加密技術,數據是加密傳輸的,一般的網絡抓包工具不能截獲一些重要信息,比如用戶登錄密碼,而http是明文傳輸的,很容易用抓包工具抓取用戶登錄密碼。 
對安全性要求較高的網站一般會使用https,比如百度,淘寶,京東,以及銀行網站等等。而像論壇,博客等網站對安全性要求不是那麼高的網站,一般使用http。

三,抓取http登錄密碼

下面用Wireshark抓取九度Online Judge(http://ac.jobdu.com)的登錄密碼。 
我正好忘記了我的登錄密碼,但是瀏覽器保存下了 ,現在用Wireshark抓取,看看我的密碼到底是多少,下次清空瀏覽器記錄時就不會忘了。 
1,打開Wireshark,開始抓包,登錄九度OJ。 
這裏寫圖片描述

2,找到對應的數據包(HTTP協議,POST方法) 
這裏寫圖片描述

3,查看該數據包應用層的內容 
這裏寫圖片描述


四,關於免費WiFi熱點的一些思考

免費WiFi熱點是極其不安全的,爲什麼呢? 
後臺服務器會很容易抓取你的某些用戶名和登錄密碼,即使https抓取不到,也可以抓取一些http的密碼,對許多人來說,不管哪個密碼被攻破,都不是一件令人愉快的事情,假如對方居心叵測,順藤摸瓜還可以獲取你的更多私人信息。所以說,有些時候免費WiFi其實就是一個魚餌。 
同一個寢室的人也可以利用這種方法獲取室友的信息,先僞造一個WiFi熱點(這是很簡單的),然後吃着零食,慢慢抓包……


感謝原文作者。

原文地址:http://blog.csdn.net/qq_24421591/article/details/50856423


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章