進入鐵人賽的第四階段後,我們將結合資安競賽中最受歡迎的 CTF (Capture The Flag) 觀念,帶大家實戰網路封包鑑識。
在資安的世界裡,新手最常犯的致命錯誤,就是把 「編碼 (Encoding)」 誤認為是 「加密 (Encryption)」 。許多早期的系統或設備(例如路由器後台)會使用 HTTP Basic Authentication (基本驗證) 來進行登入。它會把你的帳號密碼變成一串看起來像亂碼的英數字,讓許多人產生了「我的密碼很安全」的幻覺。
今天我們就要以 CTF 選手的視角,利用 Wireshark 直接戳破這個密碼學的經典幻覺!
我們利用 httpbin.org 來模擬一個需要「基本驗證」的網站,並刻意帶入一組 CTF 風格的密碼(Flag),看看它在網路上傳輸時會變成什麼樣子。
【實作練習】
enp0s3)並開始擷取。http。curl 的 -u 參數帶入帳號 admin 與密碼 CTF{Base64_Is_Not_Safe}:
curl -u "admin:CTF{Base64_Is_Not_Safe}" "[http://httpbin.org/basic-auth/admin/CTF](http://httpbin.org/basic-auth/admin/CTF){Base64_Is_Not_Safe}"

畫面解析:
指令送出後,Wireshark 瞬間抓到了我們發送的 GET 請求封包。接下來,我們要把這個封包扒開來,看看我們的密碼藏在哪裡。
我們來看看這串密碼在網路上傳輸時,披了什麼樣的防護衣。
【實作練習】
GET 封包。Hypertext Transfer Protocol。Authorization: Basic 這一行。
畫面解析:
看到了嗎?我們的帳號密碼不見了,取而代之的是一串長長的英數字:YWRtaW46Q1RGe0Jhc2U2NF9Jc19Ob3RfU2FmZX0=
這串結尾通常帶有 = 號的字串,在不懂密碼學的人眼中,就像是被高科技加密過的亂碼。但對於駭客或資安人員來說,這就像是在裸奔一樣明顯——這只是標準的 Base64 編碼。
「編碼 (Encoding)」與「加密 (Encryption)」最大的區別在於:編碼不需要金鑰就能隨時還原,它的目的只是為了確保資料傳輸的格式相容性,完全沒有保密功能。
【實作練習】
其實 Wireshark 身為最強照妖鏡,早就幫你把這層遮羞布給掀了。
在剛剛的 Authorization: Basic 標頭下方,你會看到一個子節點:Credentials: admin:CTF{Base64_Is_Not_Safe}。Wireshark 直接將原始帳號密碼顯示給你看!
如果你想體驗駭客解碼的快感,也可以複製那串 Base64 亂碼,到終端機親手解開它:

在終端機輸入:
echo "YWRtaW46Q1RGe0Jhc2U2NF9Jc19Ob3RfU2FmZX0=" | base64 -d
系統瞬間就會將字串還原成 admin:CTF{Base64_Is_Not_Safe}!我們成功拿到了這題的 Flag!
今天我們透過實戰,驗證了 Base64 編碼在網路傳輸中是毫無安全性可言的。這也是為什麼現代的網站絕對不會在未加密的 HTTP 環境下傳輸任何認證資訊。防禦這種風險的唯一解法,就是回到我們在 [Day 18] 實作過的 HTTPS / TLS 加密。只要底層套上了 TLS,就算是 Base64 編碼,也會被加密成真正的亂碼。
今天我們體驗了 CTF 中的密碼學與網管基礎。明天 [Day 26],我們將進一步挑戰 CTF 中的經典題型:「PCAP 封包鑑識實戰:從惡意流量中挖掘隱藏的秘密」。我們明天見!