目录
文件包含起初是用来调用另一个文件 直接执行该文件的代码
当服务器端 没有对文件包含进行合理校验或者校验被绕过 就导致了文件包含漏洞
<?php
$file = $_GET['file']
include($file) //就是将有$file这个变量的php文件包含
?>
这就是文件包含 主要是重用 可以让我们更加简便 提高我们代码开发的效率
include只是其中一个函数 还有其他的
include(),include_once(), require(),require_once()
这些都是文件包含的函数
通常出现在php语言中
文件包含存在两种
1.本地文件包含 : 就是文件包含的本质是执行服务器端的文件 我们就只能查看服务器端的数据
只能看服务器目录的数据 无法实现直接攻击
2.远程文件包含:可以对url进行文件包含漏洞 可以传入任何代码
文件包含例子
比如把一系列功能函数都写进function.php
中,之后当某个文件需要调用的时候就直接在文件头上写上一句<?php include function.php?>
就可以调用函数代码。
漏洞的特点
1.无条件执行php文件
如果文件是info.rar 里面代码是执行 phpinfo() 依旧会照常执行 只要php代码规范 就都能执行
2.无视后缀读取文件
如果我们文件包含一个图片 他返回的就是图片的源代码
知识
./ 当前目录
../ 返回上一级目录
127.0.0.1/1.php?a=xxxxxxx/../../../1/1.txt
就是访问xxxxxx这个目录的上一级目录三次 然后在那个目录中访问名为1的文件夹
然后打开1.txt
文件包含
本地文件包含
因此可以尝试访问他的固定配置文件../../../../../etc/passwd
远程文件包含
远程文件包含我们要先查看phpinfo()
allow_url_fopen=on //默认打开
Allow_url_include=on //默认打开
这两个是否打开
例子
后面文件包含的意思就是根目录中etc文件夹下面的hosts文件
我们可以打开我们自己的kali
确实有文件 就能返回hosts文件内容