iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

SSH

SSH(Secure Shell)是一種加密的網路協定,主要提供安全的遠端連線和資料傳輸。SSH 提供了加密的通訊通道,確保連線過程中的安全性。SSH 不僅能用來遠端登入伺服器,還能執行多種功能,如檔案傳輸、port 轉發、Agent Forwarding 等。

一些功能

  • 加密連線: 使用加密技術來保護資料傳輸過程中的機密性和完整性。利用非對稱加密(如 RSA 或 ECDSA)進行身份驗證,並透過對稱加密(如 AES)來加密實際的通訊資料,防止資料遭到攔截或竄改。

  • 身份驗證: 支援多種身份驗證方式,最常見的是密碼驗證與公鑰驗證。公鑰驗證是更安全的方式,使用者生成一對公私鑰,伺服器保留公鑰以驗證登入者身份,並允許使用私鑰來建立加密連線。

  • 遠端命令執行: 允許使用者直接在遠端伺服器上執行命令,無需登入伺服器的圖形介面。例如:在遠端伺服器上列出 /var/www 目錄中的內容使用以下。

ssh user@remote-server "ls /var/www"
  • 安全檔案傳輸: 支援透過 SCP(Secure Copy Protocol)或 SFTP(SSH File Transfer Protocol)來進行檔案傳輸。與傳統 FTP 相比,SCP 和 SFTP 的傳輸過程是加密的。例如將本地檔案 local-file 傳輸至遠端伺服器的 /remote/path 路徑。
scp local-file user@remote-server:/remote/path
  • port 轉發(Port Forwarding): 可以透過埠轉發(又稱 Tunneling)將網路流量重定向至遠端伺服器,這樣可以在加密的情況下傳輸資料。

  • Proxy Jump: 當管理多台遠端伺服器時,SSH 提供跳躍功能,允許透過中間伺服器跳轉至目標伺服器,避免直接暴露目標伺服器。

與 Day23 的 nc 指令相比

  1. 加密與安全性:

    • SSH:SSH 的連線是完全加密的,所有資料在傳輸過程中受到 AES 等加密演算法的保護,確保資料的機密性與完整性。SSH 也具有身份驗證機制,如公鑰認證,防止未經授權的連接。
    • Netcat:相比之下,nc 並不提供加密,所有資料以純文本形式傳輸,容易受到攔截與竄改。因此,nc 不適合用於不安全的網路環境傳輸敏感資訊。
  2. 身份驗證:

    • SSH:SSH 要求透過密碼或公私鑰進行身份驗證,只有授權使用者才能連線。
    • Netcat:nc 沒有內建的身份驗證機制,任何知道伺服器 IP 和埠號的人都能進行連線。
  3. 應用場景:

    • SSH:SSH 適用於需要高安全性的時機,例如遠端管理伺服器、傳輸機密資料,或使用 Tunneling 技術保護應用程式通訊。
    • Netcat:nc 更適合在內部網路中進行測試、port 掃描或傳輸非敏感資料。其安全性較低,不建議在公開網路中長時間使用。

Lab_1 - Super SSH

https://ithelp.ithome.com.tw/upload/images/20241009/20169462I4JFgdao9M.png

點選 Launch Instance 按鈕後,我們會拿到以下資訊。這題我們將會學習如何使用 ssh 來連線,那參考本文最底部的參考資料,可以知道如果要以 ctf-player 這個身分登入至遠端主機。可以使用 ssh ctf-player@titan.picoctf.net -p58803

https://ithelp.ithome.com.tw/upload/images/20241009/20169462Rihdxo8Mxm.png

接著會詢問是否要進行連線,輸入 yes,密碼使用題目提供的 f3b61b38,成功進去後就會拿到 flag

https://ithelp.ithome.com.tw/upload/images/20241009/201694621dRjM29yB7.png

進入第二個練習之前,我們先來看關於位元運算的知識

位元運算

  1. AND 位元運算
    AND 位元運算符 (&) 是位元運算中一種常見的運算,當兩個對應位元皆為 1 時,結果為 1;若其中有任何一 個位元為 0,結果即為 0。兩個 8 位元的數字:10101010 和 11001100,進行 AND 運算的結果如下:

       10101010
     & 11001100
     ----------
       10001000
    
  2. OR 位元運算
    OR 位元運算符 (|) 用於當任一輸入位元為 1 時,結果為 1。如果兩個對應位元都是 0,結果才會是 0。有兩 個二進位數字:10101010 和 11001100,進行 OR 運算的結果如下:

       10101010
     | 11001100
     ----------
       11101110
    
  3. 二進位加法
    二進位加法是位元操作的基本運算之一。遵循進位規則:若兩個位元都是 1,則結果為 0 並進位 1;若其中一 個位元為 1,另一個為 0,則結果為 1。以下對 1101 和 1011 進行加法運算:

       1101
     + 1011
     ------
      11000
    
  4. 乘法運算 (Q4)
    將二進位數字轉換為十進位數字,然後進行乘法計算,最終再將結果轉回二進位格式。有兩個二進位數字 101 和 110,將它們轉換為十進位:101 轉換為十進位:5;110 轉換為十進位:6 。然後進行乘法:5 * 6 = 30,再將結果 30 轉換為二進位:11110。

    # 使用 Python 來運算
    a = "101"
    b = "110"
    result = int(a, 2) * int(b, 2)
    print(bin(result)[2:])  # 會輸出 '11110'
    
  5. 左位移 (Left Shift)
    左位移運算 (<<) 是將數字的所有位元往左移動,這相當於數字乘以 2。每移動一位,數字會變大兩倍。左移時,最左邊的位元被丟棄,最右邊的位元補 0。我們對 1010 進行 1 次左位移:

    1010 << 1 = 10100
    
  6. 右位移 (Right Shift)
    右位移運算 (>>) 是將數字的所有位元往右移動,每移動一位,數字相當於除以 2。右移時,最右邊的位元被丟棄,左邊補 0。對 1010 進行 1 次右位移:

    1010 >> 1 = 101
    

Lab_2 - binhexa

https://ithelp.ithome.com.tw/upload/images/20241009/20169462ldQd9ZNGva.png

一樣使用 nc 進到題目,給 1011111101111101 兩個二進位數字,讓我們對這兩個數進行運算。

https://ithelp.ithome.com.tw/upload/images/20241009/20169462LfJBl0Hdt1.png

將 Number 1 左位移一位,10111111 -> 101111110

Question 1/6:
Operation 1: '<<'
Perform a left shift of Binary Number 1 by 1 bits.

將 Number 1 & Number 2,結果為 00111101

Question 2/6:
Operation 2: '&'
Perform the operation on Binary Number 1&2.

將 Number 2 右位移一位,結果為 01111101 -> 00111110

Question 3/6:
Operation 3: '>>'
Perform a right shift of Binary Number 2 by 1 bits.

將 Number 1 與 Number 2 相加,結果為 100111100

Question 4/6:
Operation 4: '+'
Perform the operation on Binary Number 1&2.

將 Number 1 OR Number 2,結果為 11111111

Question 5/6:
Operation 5: '|'
Perform the operation on Binary Number 1&2.

將 Number 1 與 Number 2 相乘,結果為 101110101000011,使用 Python 來計算

Question 6/6:
Operation 6: '*'
Perform the operation on Binary Number 1&2.

https://ithelp.ithome.com.tw/upload/images/20241009/20169462mNMY0IznkK.png

最後將 Number 1 與 Number 2 相乘的結果轉乘 16 進制,使用 Python 來計算 101110101000011 -> 0x5d43

Enter the results of the last operation in hexadecimal: 

https://ithelp.ithome.com.tw/upload/images/20241009/20169462XpcBYnDOnx.png

今天的練習就到這邊,以下是參考資料,請搭配服用:

SSH 安全加密連線
SSH 指令參數
位元運算
左位移與右位移

內文如有錯誤,還請不吝指教~


上一篇
Day24 - [Skills] 萬用字元(Wildcard Characters)
下一篇
Day26 - [Skills] Git
系列文
新手村預備,CTF 小菜雞跌跌撞撞的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言