前言
PHP的文件包含可以直接執行包含文件的代碼,包含的文件格式是不收限制的,只要能正常執行即可。文件包含又分為本地文件包含和遠程文件包含。滲透測試中文件包含漏洞大多可以直接利用獲取webshell。文件包含函數有include、include_once,require、require_once。他們之前的區別就是include遇到報錯還會執行下面的代碼,require則是會報錯退出程序。遠程文件包含是需要開啟allow_url_include=On的。
正文
接下來就開始學習一下文件包含的3中截斷方法
首先給出代碼
這是網站首頁,這段代碼是典型的文件包含漏洞,將獲取的get傳參進行文件包含,參數為可控
我的目錄下有一個123.php文件,內容為這里是123.php文件
可以看到文件包含的內容固定添加了.php后綴,沒法任意文件包含
文件包含截斷方法有3種,第一種是使用%00截斷,但是php>5.3以后就不能使用了,開啟了GPC的情況下也是不能使用的
我在123.txt下寫了一段php代碼,來進行測試
直接添加?a=123.txt%00,是可以截斷后綴名的,這樣就可以達到任意文件包含的目的了
第二種截斷方法是使用垃圾字符填充
Windows下使用(.)加(/)的方法填充259次,linux下需要使用2038次
這一種方法我本地沒能復現成功
第三種方法是在遠程文件包含時通過?來偽截斷
這種階段方法不受GPC和PHP版本的影響,webserver會把問好當作請求的參數
來看示例