文件包含漏洞詳解


一、什么是文件包含漏洞

  在了解這個漏洞之前我們先要理解什么是文件包含,文件包含的初衷是為了減少程序代碼的冗余。

  試想一下,我在每一個代碼文件中都要用到同一段代碼,如果我把這段都要用到的代碼轉換成一個文件,讓每一個用到它的代碼都將其包含在里邊,不就可以減少很多代碼量,減少很多工作量了嗎?

  在php中,包含一個文件有四種函數:

    include()、include_once()、require()、require_once()

  include()和include_once()的區別在於,include_once()只會引用同樣的文件一次,為了避免函數和變量的重新定義,require和require_once()同理。

  include()函數包含的文件如果不存在,程序會發出警告,但是會繼續運行。

  require()函數包含的文件如果不存在,程序會拋出異常,停止運行。

  在用這四個函數來包含文件的時候,不論文件類型為什么,其中的內容都會被當作php代碼來解析  

  根據包含文件位置的不同,文件包含漏洞可以分為兩類。遠程文件包含(RFI)和本地文件包含(LFI)。

二、本地文件包含(LFI)  

   

   在https://www.zllovell.com/phpstudy/ 服務器目錄下有一個zl.txt文件,內容如上圖,當前目錄還有一個test.php文件內容如下

  

 

  這時候我們訪問https://www.zllovell.com/phpstudy/test.php?file=zl.txt,結果如下

  

  這就是本地文件包含漏洞,可以讀取服務器本地的文件。

三、遠程文件包含(RFI)

  RFI的利用條件較為苛刻,需要php.ini配置文件中allow_url_fopen與allow_url_include都為on才可以。

  但是遠程文件包含意味着包含的文件內容是我們完全可控的,不是來自服務器端的文件,所以一旦服務器存在遠程文件包含漏洞會造成的危害極大。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM