本地文件包含和遠程文件包含:
本地文件包含:只要內(nèi)容中帶有<?php ?>即可解析成php文件執(zhí)行。即使包含的文件后綴是.txt或是.jpg等。
遠程文件包含:需要allow_url_fopen=on和allow_url_include=on才能進行包含。不能解析后綴為php可解析的文件。例如.php、php3等都是不行的??梢岳脗螀f(xié)議進行文件讀寫等操作。
常見的幾個偽協(xié)議:php://? file://?zip://? phar://? data:
今日實踐的三個偽協(xié)議:php://? file://?data:
一、php://filter和php://input
php://filter/resource=可以將非php代碼文件內(nèi)容直接輸出。php代碼文件直接執(zhí)行。在讀取文件時可以利用php://filter/read=convert.base64-encode/resource=將文件base64編碼再進行包含,不會再被執(zhí)行,可以直接輸出文件內(nèi)容的base64編碼。解碼即可獲取文件內(nèi)容。


php://input可以利用post方式傳入命令執(zhí)行

二、file://
file://和php://filter很相似。但是只能依靠絕對路徑查看文件內(nèi)容。

三、data:
類似于php://input,直接執(zhí)行輸入的命令。

關(guān)于文件包含防護:
1. 利用open_basedir =? 限制用戶訪問路徑。
2. allow_url_include = Off 和 allow_url_fopen=Off
3.注意偽協(xié)議的濫用
4.設置白名單