2025 AIS3 Junior Writeup|從基礎 Web 到 XSS 與後端漏洞

1.7k 詞

前言

這篇文章紀錄我在 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 HTTP/1.1

這題讓我學到:
有些伺服器會把敏感資訊放在 header,而 HEAD 請求因為不回傳 body,反而更容易被忽略。


在瀏覽器中開啟 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)

透過陣列傳參,讓 strcmpmd5 發生型別錯誤回傳 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,更重要的是理解程式怎麼「想錯了」

這些經驗也讓我更確定,未來想繼續往資安與系統安全方向深入學習。