漏洞講解之文件包含
- 2020 年 3 月 8 日
- 筆記
一、文件包含漏洞是什麼?
通過函數引入文件時,由於傳入的文件名沒有經過合理的校驗,從而操作了預想之外的文件,導致意外的文件泄露甚至惡意的程式碼注入。
二、 文件包含漏洞有哪幾種類型?
本地文件包含漏洞:本地包含顧名思義,就是在網站伺服器本身存在惡意文件,然後利用本地文件包含使用。
遠程文件包含漏洞:遠程文件包含就是調用其他網站的惡意文件進行打開。
三、 php的包含函數
PHP中文件包含函數有以下四種
require()require_once()include()include_once()
include和require區別主要是,include在包含的過程中如果出現錯誤,會拋出一個警告,程式繼續正常運行;而require函數出現錯誤的時候,會直接報錯並退出程式的執行。
而include_once(),require_once()這兩個函數,與前兩個的不同之處在於這兩個函數只包含一次,適用於在腳本執行期間同一個文件有可能被包括超過一次的情況下,你想確保它只被包括一次以避免函數重定義,變數重新賦值等問題。
四、 本地包含漏洞
本地包含顧名思義,就是在網站伺服器本身存在惡意文件,然後利用本地文件包含使用。本地包含漏洞常被用來讀取本地文件,上傳包含惡意程式碼的圖片,然後包含執行。
1. 包含惡意程式碼的文件
創建一個後綴為jpg的文件,內容如圖:

上傳該文件,直接訪問,文件並不會執行

通過包含漏洞包含該文件後,php程式碼被執行了

2. 讀取本地文件
可通過該漏洞讀取一些配置文件等敏感文件
/etc/passwd//賬戶資訊/etc/shadow//賬戶密碼文件/usr/local/app/apache2/conf/httpd.conf//Apache2默認配置文件/usr/local/app/apache2/conf/extra/httpd-vhost.conf//虛擬網站配置/usr/local/app/php5/lib/php.ini //PHP相關配置/etc/httpd/conf/httpd.conf//Apache配置文件/etc/my.conf // mysql 配置文件

五、 遠程包含漏洞
遠程包含漏洞需要伺服器期的伺服器的php.ini的配置選項allow_url_fopen和allow_url_include為On,然後在自己的伺服器放一個包含惡意程式碼的文件。

然後包含這個遠程文件,通過文件包含漏洞執行文件內的程式碼。

手握日月摘星辰,安全路上永不止步。