延續昨天的 CTF 實戰,今天我們要來面對更真實、也更殘酷的競賽情境。
昨天我們因為預先知道駭客使用的是 UDP Port 9999,所以能輕鬆定位並追蹤資料外洩的封包。但在真實的 CTF 比賽或資安鑑識事件中,你拿到的通常是一份高達數百 MB、充滿幾百萬個正常上網流量的巨大封包檔。題目不會告訴你駭客用了什麼協定,更不會告訴你目標 IP 是多少。
要在這種茫茫封包海中撈出機密,我們必須拋棄原本用 IP 或 Port 過濾的習慣,改用 Wireshark 中最強大的兩把武器:「尋找封包 (Find Packet)」與「全域內容過濾 (Contains)」!
這次我們不走奇怪的 Port,我們把 Flag 偷偷塞在一個正常的 HTTP POST 請求表單裡,讓它就像一般使用者在網頁上填寫問卷一樣,混入正常的網頁流量中。
【實作練習】
enp0s3)並開始擷取。curl 發送一個帶有隱藏 Flag 的 POST 請求:
curl -X POST -d "secret_data=CTF{You_Found_Me_By_String}" http://httpbin.org/post

畫面解析:
指令發送完畢後,終端機顯示伺服器成功接收了資料。而在 Wireshark 中,這個帶有機密的封包就這樣靜靜地躺在 NTP、DNS 與各種 TCP 雜訊之中,等待我們去發掘。
假設現在我們面對的是幾萬個未知的封包,我們唯一的線索就是:CTF 競賽的過關密碼格式一定是 CTF{...}。
【實作練習】
Ctrl + F(或點擊選單 Edit -> Find Packet)。CTF{,然後點擊「Find (尋找)」。
畫面解析:
太神啦!Wireshark 瞬間幫你從茫茫封包海中,跳轉並鎖定了第 19 號封包。
仔細看下方的詳細資訊窗格,Wireshark 甚至貼心地幫你自動展開了 HTML Form URL Encoded 區塊,並將 Value: CTF{You_Found_Me_By_String} 用橘色高光反白出來。這就是資安鑑識中最基礎的字串特徵搜尋。
Ctrl + F 雖然好用,但它只能「一個一個跳轉」。如果這個 .pcap 檔案裡有十幾個主辦單位故意放的假 Flag 陷阱,一直按尋找會非常沒效率。
身為專業的封包分析師,我們可以直接用過濾器,把所有「內容包含特定字串」的封包一口氣篩選出來!
【實作練習】
frame contains "CTF{"

畫面解析:
按下 Enter 的瞬間,幾十上百個雜訊封包全部消失了!畫面上乾淨得只剩下兩筆封包(一筆是我們送出的 POST 請求,另一筆是伺服器回傳包含該字串的 200 OK JSON 回應)。
frame contains 是一個極度不講武德的霸道指令。它的意思是:「我不管你是什麼協定、不管你是哪個 Port、不管你在 OSI 模型的哪一層,只要你這整包二進位資料裡面,夾帶著 CTF{ 這個字串,就全部給我顯示出來!」
在 CTF 比賽中,這招通常是拿到未知流量檔後的「起手式第一擊」,往往能直接秒殺許多初階題目!
今天我們學會了如何在不知道任何網路連線資訊(IP、Port、Protocol)的極端劣勢下,單靠「已知特徵字串」來逆向揪出隱藏的封包。frame contains 絕對是你未來在進行網路除錯、資安鑑識時最依賴的終極殺手鐧。
我們在 Day 18 曾說過,HTTPS 的 TLS 加密會把所有內容變成亂碼,連 Wireshark 都看不懂。但如果你在 CTF 比賽中,除了封包檔之外,還拿到了一把「私鑰檔案 (Key)」呢?
明天 [Day 28],我們將挑戰 Wireshark 最硬核的進階魔法:「突破加密防線:匯入金鑰,解密 HTTPS/TLS 流量」!我們明天見。