PHP文件包含漏洞的產生緣由是在經過PHP的函數引入文件時,因爲傳入的文件名沒有通過合理的校驗,從而操做了預想以外的文件,就可能致使意外的文件泄露甚至惡意的代碼注入。最多見的就屬於本地文件包含(Local File Inclusion)漏洞了。php
程序開發人員通常會把重複使用的函數寫到單個文件中,須要使用某個函數時直接調用此文件,而無需再次編寫,這種文件調用的過程通常被稱爲文件包含。shell
程序開發人員通常但願代碼更靈活,因此將被包含的文件設置爲變量,用來進行動態調用,apache
但正是因爲這種靈活性,從而致使客戶端能夠調用一個惡意文件,形成文件包含漏洞。服務器
1. 本地文件包含漏洞ssh
就是在網站服務器上自己存在惡意文件,而後利用本地包含使用。函數
2. 遠程文件包含漏洞測試
遠程文件包含漏洞就是調用其它網站的惡意文件進行打開網站
常見的PHP文件包含函數ui
require:找不到被包含的文件時會產生致命錯誤,並中止腳本執行。url
Include:找不到被包含的文件時只會產生警告,腳本將繼續執行
Include_once:與include相似,區別就是若是該文件中的代碼已經被包含,則不會再次包含。
Require_once:與require相似,區別就是若是該文件中的代碼已經被包含,則不會再次包含。
1. 本地包含
修改ph配置文件php.ini
寫一個測試文件qswz,測試頁面正常
在寫一個文件包含測試頁qswz111.php
這就是一個簡單的文件包含過程
接下來,咱們把被包含的文件名改成txt文件測試
事實說明,只要文件裏面寫的是php代碼就會執行。固然,若是包含的不是php語法規則的內容則會暴露源碼。
2. 遠程包含
執行的是qswz.txt文件中的內容。
1. 讀取敏感文件
Eg: 訪問URL:localhost/qswz111.php?page=http://127.0.0.1/qswz.txt若是目標主機文件存在,而且具備相應的權限,那麼就能夠讀出文件的內容,反之會被警告。
2. 遠程包含shell
若是目標主機allow_url_fopen選項是激活的,就能夠嘗試遠程包含一句話木馬
3. 本地包含配合文件上傳
4. PHP封裝協議
file:// 訪問本地文件系統
http:// 訪問HTTP(S)網址
ftp:// 訪問FTP(s)URLs
php:// 訪問輸入/輸出流 (I/O streams)
zlib:// 壓縮流
data:// 數據(RFC 2397)
ssh2:// Secure Shell 2
expect:// 處理交互式的流
glob:// 查找匹配的文件路徑
a. 可使用封裝協議讀取php文件
b. 可使用封裝協議寫入php文件 php://input
5. 包含apache 的日誌文件
6. 截斷包含
嗯,就先這麼多吧