歡迎來到鐵人賽的第二天!在昨天的環境設定完成後,今天我們要正式揮出第一刀,進攻 CTF 中佔比非常重的 Web Exploitation(網頁安全)。
許多人剛接觸網頁解題時,常會誤以為需要很厲害的開掛工具或複雜的漏洞利用(Exploit)。但事實上,許多初階題目考驗的反而是「你是否懂得觀察網頁的構造」。今天我們就從最基礎、也最不可或缺的技能開始:使用 F12 開發者工具檢視原始碼與 HTTP 標頭!
透過 PicoCTF 的兩道經典入門題,掌握以下核心技能:
curl 彈性發送特定的 HTTP Request。
現代網頁通常由三大要素組成:
開發者在撰寫程式碼時,常會留下 <!-- 註解 --> 或 /* 註解 */ 來提醒自己或團隊成員。如果上線前沒有清理乾淨,這些註解就會被直接傳送到使用者的瀏覽器中。
檢查 HTML 原始碼:
Ctrl + U)。picoCTF{tru3_d3
檢查 CSS 樣式檔:
F12 開啟開發者工具(DevTools),切換到 Sources(來源)頁籤,或者在 HTML 原始碼中找到引用的 .css 檔案連結(如 mycss.css)。t3ct1ve_0r_ju5t
檢查 JavaScript 腳本檔:
.js 檔案(如 myjs.js)。_lucky?302945a7}
組合 Flag:
picoCTF{tru3_d3t3ct1ve_0r_ju5t_lucky?302945a7}
瀏覽器向伺服器請求網頁時,會使用 HTTP 方法(HTTP Methods):
GET:最常見的請求,用來「獲取」網頁內容(伺服器會傳回 Header + Body)。POST:常用於表單傳送資料。HEAD:與 GET 非常相似,但伺服器只會傳回 HTTP Header(標頭),不會傳回 Body(內文)。題目名稱取名為 "Get AHEAD",雙關語提示我們嘗試發送 HTTP 的 HEAD 請求!
curl我們在 Day 01 安裝的 curl 工具這時候就派上用場了!使用 -I(或 --head)參數可以指定只發送 HEAD 請求並印出回應標頭:
curl -I http://<題目給定的網址:埠號>/


這條指令是 Linux 中用來向伺服器發送 HTTP 請求並觀察回應的核心工具,以下為你拆解每個部分的原理與原因:
curl
是一個在 Terminal 中傳輸資料的命令列工具。它可以發送各種 HTTP 請求(如 GET、POST、HEAD),並將伺服器回傳的結果直接顯示在螢幕上。
-I(或 --head)
這是最關鍵的參數!預設情況下,curl 發送的是 GET 請求(會抓取整個網頁 HTML 內文)。加上 -I 參數後,curl 會改為發送 HEAD 請求。
HEAD 請求的作用: 告訴伺服器:「我只需要 HTTP 標頭(Headers),請不要傳回網頁內文(Body)。」
在 Get AHEAD 這道題中,Flag 被伺服器藏在了 Response Header 的 flag: 欄位裡,所以加上 -I 能讓你直接拿到完整的 Headers 資訊。
http://<題目給定的網址:埠號>/
這是題目伺服器的網路位址:
http://:通訊協定名稱。mercury.picoctf.net)。:埠號(Port):伺服器開放該網頁服務的通訊埠(例如 :15931),HTTP 預設是 80,但 CTF 題目常使用自訂的特殊埠號。curl http://... (GET 請求)[Header 資訊] + [整個網頁的 HTML 原始碼]
curl -I http://... (HEAD 請求)[Header 資訊](乾淨俐落,正好露出藏在 Header 裡的 Flag)