文件包含
文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞,被包涵的文件在第三方服务是,就形成了远程文件包含漏洞
漏洞危害
执行恶意代码
包含恶意文件控制网站
是指控制网站服务器
本地包含
本地文件包含(Local File lnclude,LFI),LFI允许攻击者通过浏览器包含本机上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下就有可能存在,该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器这个漏洞的其他文件。
远程包含
有个前提条件
需要设置allow url include = On,
远程文件包含(Remote File lnclude,RFI),RFI允许攻击者包含远程文件远程文件包含,四个文件都支持HTTP、FTP等协议,相对本地文件包含更容易利用,出现的频率没有本地包含多
挖掘经验
模块加载、cache调用,传入的参数拼接包含路径
include()、include_once()
require()、require_once()
代码案例
本地包含
创建一个phpinfo.php 文件 里面写入phpinfo();
不用打上<?php ?> 文件包含会自动 识别成php代码
创建一个2.php
$a = $_GET['a'];
include($a);
去访问一下, 传参a = phpinfo.php
会出来
加上目录穿越 在file目录里,也写一个 phpinfo.php
访问的时候, a=../file/phpinfo.php
远程包含
远程文件包含 设置php.ini配置文件 开启 allow_url_include = On 然后重启apache服务
a=http://127.0.0.1/phpinfo.php
用菜刀连接
是这样连接的
include($a."php");
%00 截断
a = phpinfo.php%00
a = phpinfo. 都可以
本地包含利用
远程包含利用
漏洞修复
关闭远程包含参数开关,彻底切断这个业务相比较
设置类似白名单的方法,筛选固定文件名
常见目录穿越字符进行过滤,如(./../等)