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。 ...