SSH(Secure Shell)是一種加密的網路協定,主要提供安全的遠端連線和資料傳輸。SSH 提供了加密的通訊通道,確保連線過程中的安全性。SSH 不僅能用來遠端登入伺服器,還能執行多種功能,如檔案傳輸、port 轉發、Agent Forwarding 等。
加密連線: 使用加密技術來保護資料傳輸過程中的機密性和完整性。利用非對稱加密(如 RSA 或 ECDSA)進行身份驗證,並透過對稱加密(如 AES)來加密實際的通訊資料,防止資料遭到攔截或竄改。
身份驗證: 支援多種身份驗證方式,最常見的是密碼驗證與公鑰驗證。公鑰驗證是更安全的方式,使用者生成一對公私鑰,伺服器保留公鑰以驗證登入者身份,並允許使用私鑰來建立加密連線。
遠端命令執行: 允許使用者直接在遠端伺服器上執行命令,無需登入伺服器的圖形介面。例如:在遠端伺服器上列出 /var/www
目錄中的內容使用以下。
ssh user@remote-server "ls /var/www"
local-file
傳輸至遠端伺服器的 /remote/path
路徑。scp local-file user@remote-server:/remote/path
port 轉發(Port Forwarding): 可以透過埠轉發(又稱 Tunneling)將網路流量重定向至遠端伺服器,這樣可以在加密的情況下傳輸資料。
Proxy Jump: 當管理多台遠端伺服器時,SSH 提供跳躍功能,允許透過中間伺服器跳轉至目標伺服器,避免直接暴露目標伺服器。
nc
指令相比加密與安全性:
SSH
:SSH 的連線是完全加密的,所有資料在傳輸過程中受到 AES 等加密演算法的保護,確保資料的機密性與完整性。SSH 也具有身份驗證機制,如公鑰認證,防止未經授權的連接。Netcat
:相比之下,nc 並不提供加密,所有資料以純文本形式傳輸,容易受到攔截與竄改。因此,nc 不適合用於不安全的網路環境傳輸敏感資訊。身份驗證:
SSH
:SSH 要求透過密碼或公私鑰進行身份驗證,只有授權使用者才能連線。Netcat
:nc 沒有內建的身份驗證機制,任何知道伺服器 IP 和埠號的人都能進行連線。應用場景:
SSH
:SSH 適用於需要高安全性的時機,例如遠端管理伺服器、傳輸機密資料,或使用 Tunneling 技術保護應用程式通訊。Netcat
:nc 更適合在內部網路中進行測試、port 掃描或傳輸非敏感資料。其安全性較低,不建議在公開網路中長時間使用。Lab_1 - Super SSH
點選 Launch Instance
按鈕後,我們會拿到以下資訊。這題我們將會學習如何使用 ssh
來連線,那參考本文最底部的參考資料,可以知道如果要以 ctf-player
這個身分登入至遠端主機。可以使用 ssh ctf-player@titan.picoctf.net -p58803
接著會詢問是否要進行連線,輸入 yes
,密碼使用題目提供的 f3b61b38
,成功進去後就會拿到 flag
進入第二個練習之前,我們先來看關於位元運算的知識
AND 位元運算
AND 位元運算符 (&) 是位元運算中一種常見的運算,當兩個對應位元皆為 1 時,結果為 1;若其中有任何一 個位元為 0,結果即為 0。兩個 8 位元的數字:10101010 和 11001100,進行 AND 運算的結果如下:
10101010
& 11001100
----------
10001000
OR 位元運算
OR 位元運算符 (|) 用於當任一輸入位元為 1 時,結果為 1。如果兩個對應位元都是 0,結果才會是 0。有兩 個二進位數字:10101010 和 11001100,進行 OR 運算的結果如下:
10101010
| 11001100
----------
11101110
二進位加法
二進位加法是位元操作的基本運算之一。遵循進位規則:若兩個位元都是 1,則結果為 0 並進位 1;若其中一 個位元為 1,另一個為 0,則結果為 1。以下對 1101 和 1011 進行加法運算:
1101
+ 1011
------
11000
乘法運算 (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'
左位移 (Left Shift)
左位移運算 (<<) 是將數字的所有位元往左移動,這相當於數字乘以 2。每移動一位,數字會變大兩倍。左移時,最左邊的位元被丟棄,最右邊的位元補 0。我們對 1010 進行 1 次左位移:
1010 << 1 = 10100
右位移 (Right Shift)
右位移運算 (>>) 是將數字的所有位元往右移動,每移動一位,數字相當於除以 2。右移時,最右邊的位元被丟棄,左邊補 0。對 1010 進行 1 次右位移:
1010 >> 1 = 101
Lab_2 - binhexa
一樣使用 nc
進到題目,給 10111111
和 01111101
兩個二進位數字,讓我們對這兩個數進行運算。
將 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.
最後將 Number 1 與 Number 2 相乘的結果轉乘 16 進制,使用 Python 來計算 101110101000011 -> 0x5d43
Enter the results of the last operation in hexadecimal:
今天的練習就到這邊,以下是參考資料,請搭配服用:
內文如有錯誤,還請不吝指教~