前言
這篇文章紀錄我在 2025 AIS3 Junior 中的學習歷程,從基礎 Web 題目開始,一路接觸到前端 XSS 與後端常見漏洞(PHP、SQL Injection、SSRF 等)。
這份內容除了當下的解題紀錄,也整理了我對每一類題目的理解與反思,作為自己之後複習 Web Security 與 CTF 的學習筆記。
一、基礎 Web 題目:培養觀察力
GET aHEAD — HTTP Method 的差異
這題讓我第一次明確感受到,HTTP Method 本身就可能是漏洞來源。
我使用 Burp Suite 攔截請求,將原本的 POST 改成 HEAD,結果在回應標頭中直接看到 flag。
1 | HEAD /index.php |
這題讓我學到:
有些伺服器會把敏感資訊放在 header,而 HEAD 請求因為不回傳 body,反而更容易被忽略。
Cookies — 修改 Cookie value
在瀏覽器中開啟 F12 → Application → Cookies,可以直接修改 Cookie 的 value。這題透過不斷嘗試不同數值,最後在特定值時直接顯示 flag。
這提醒我:
只要沒有在後端驗證,Cookie 就永遠不能被信任。
Inspect HTML / Web Inspector
這幾題都圍繞在一個核心概念:
使用者看到的畫面,往往只是實際 HTML 與 DOM 的一小部分。
包含:
- HTML 註解中藏 flag
- DOM 深層節點藏 Base64 編碼字串
- 將 Base64 解碼後取得 flag
也再次驗證了一件事:Web 題目一定要先打開 F12 看一輪。
二、Linux 基礎操作:CTF 的基本功
在 Linux 題目中,大多數考的不是複雜技巧,而是對基本指令的熟悉度,例如:
ls -la:查看隱藏檔案cat:讀取檔案內容touch:建立檔案mv:移動檔案rm:刪除檔案
這些指令看似簡單,但在 CTF 中就是最重要的「肌肉記憶」。
三、前端題目:XSS 攻擊實作
Stored XSS — Note Sharing
當使用者輸入的內容沒有經過過濾就被直接渲染成 HTML,就可能導致 Stored XSS。
透過插入 <script>,確認可以執行 JavaScript 後,再將 cookie 透過 fetch 傳送到自己的 webhook。
這類題目讓我清楚理解:
只要惡意內容會被存起來並再次顯示,就有機會影響其他使用者。
DOM XSS — innerHTML
這題使用 innerHTML 將使用者輸入直接插入 DOM,導致事件屬性(如 onerror)仍可執行。
即使不能直接使用 <script>,仍可以透過圖片錯誤事件來觸發 JavaScript。
javascript: URL 與 <base> 利用
在某些題目中,使用者輸入會被放入按鈕連結或相對路徑中:
javascript:URL 可在點擊時執行程式碼<base>標籤可以改變整個頁面的相對路徑解析方式
這些技巧讓我理解到:
XSS 不只存在於 <script>,而是存在於所有「可被解譯的位置」。
四、後端漏洞:邏輯錯誤比技巧更重要
PHP 鬆散比較(Loose Comparison)
透過陣列傳參,讓 strcmp 與 md5 發生型別錯誤回傳 null,再搭配鬆散比較 (==) 繞過條件判斷。
這類題目不需要高深技巧,只要理解 PHP 的型別系統就能突破。
檔案上傳與 WAF 繞過
利用:
- 偽造
Content-Type - 副檔名大小寫差異(
.phP)
即可繞過簡單檢查並成功上傳可執行檔案。
LFI、SQL Injection 與 SSRF
後端題目涵蓋:
- 路徑回跳繞過白名單
include()導致的 LFI 轉 RCE- UNION-based SQL Injection
- 利用 open redirect 繞過 SSRF 主機名檢查
這些題目讓我最大的收穫是:
很多漏洞並不是因為少了 WAF,而是因為「邏輯假設錯誤」。
收穫與反思
這次 2025 AIS3 Junior 對我來說,不只是解題,而是一個完整的 Web Security 入門體驗。
我學到的關鍵包括:
- 永遠不要相信使用者輸入
- 前端與後端的每一個假設,都可能成為漏洞
- 比起背 payload,更重要的是理解程式怎麼「想錯了」
這些經驗也讓我更確定,未來想繼續往資安與系統安全方向深入學習。