文件包含漏洞原理

目录

漏洞的特点

1.无条件执行php文件

2.无视后缀读取文件

知识

文件包含

本地文件包含

远程文件包含

例子


文件包含起初是用来调用另一个文件 直接执行该文件的代码

当服务器端 没有对文件包含进行合理校验或者校验被绕过 就导致了文件包含漏洞

<?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文件内容