1. 程式人生 > 實用技巧 >SSH抓包分析

SSH抓包分析

開啟xshell, 登入linux伺服器,開始wireshake抓包。

SSH抓包從測試如下:

一、3次握手建立tcp連線

1、 seq = 0表示客戶端當前的TCP包序列號。

2、seq = 0,表示伺服器端當前的TCP包序列號ack = 1(客戶端seq + 1),表示對客戶端第 seq = 0 的TCP包進行應答

3、seq = 1,表示客戶端端當前的TCP包序列號ack = 1(伺服器seq + 1),表示對伺服器端第 seq = 0 的TCP包進行應答

二、ssh版本協議交換

4、伺服器將自己的SSH協議版本傳送到客戶端,格式為:SSH-protoversion(版本號)-softwareversion(自定義) SP(空格一個,可選) comments(註釋,可選) CR(回車) LF(換行)。如:SSH-2.0-OpenSSH_7.4

5、客戶端將自己的SSH協議版本傳送到伺服器,格式為:SSH-protoversion(版本號)-softwareversion(自定義) SP(空格一個,可選) comments(註釋,可選) CR(回車符) LF(換行符)。如:SSH-2.0-nsssh2_6.0.0037 NetSarang Computer, Inc.

三、協商出會話ID和會話金鑰

後面加解密用的是會話金鑰。

四、然後接下來才是認證階段

  用賬號名密碼登入的是password認證。還有一種是公鑰認證,這個是在免密登入的時候有用到。如果是password認證客戶端會把賬號密碼和認證方法用會話金鑰加密傳輸到服務端進行認證。

  免密登陸,簡單地說,就是客戶端自己生成公鑰私鑰(通常採用ssh-keygen程式生成),然後將公鑰以某種方式(通常是手動新增)儲存到伺服器~/.ssh/authorized_keys檔案中,以後伺服器都會接受客戶端傳過來的經過會話金鑰加密過的公鑰,然後解密得到公鑰之後和本地authorized_keys配置的公鑰是否相等,如果是,則允許登陸。 以上歸納的原理圖如下:這個圖是從別人那邊copy來的, 注意點:會話金鑰的協商    會話金鑰是用DH演算法得出來的。 其中DH演算法協商會話金鑰的流程如下,這是摘自維基百科的,就是會話金鑰(對稱)的協商過程其實是用到了非對稱加密原理。

  如果愛麗絲是客戶端,鮑勃是服務端,但是其中如果伊芙假裝成鮑勃跟愛麗絲通訊,假裝成愛麗絲和鮑勃通訊?這也很好解釋了為什麼我們第一次登陸的時候,Shell終端總是會出現這個提示,你是否新新任服務端公鑰,這也是將確認權留給客戶端自己去判斷的一種策略,所以用這樣保證客戶端愛麗絲只對服務端鮑勃協商,而不會對伊芙協商,所以愛麗絲就不會把賬號密碼給伊芙。如果伊芙偽裝成愛麗絲和服務端鮑勃通訊,這個時候伊芙沒有賬號、密碼,最終肯定沒有辦法成功登入的。