什么是文件包含漏洞
1:随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。
经常见到的函数
1:include()当前使用该函数包含文件时,只有代码执行到include()函数时将文件包含起来,发生错误时给出一个警告,然后继续执行语句
2,include_once()功能和include()相同,区别当重复调用一个文件时,程序只调用一次
3:reguire()执行如果发生错误,函数会输出错误信息,并终止脚本的运行
4:require_once()功能与require()相同区别在于当重复调用一个文件时,程序只调用一次
5:nighcight_file(),show_source()函数对文件进行语法高亮显示,通常能看到源代码
6:readfile(),file_get_contents()函数读取一个文件,并写入输出缓冲
7:fopen(),打开一个文件或者url
几乎所有的脚本语言中都提供文件包含的功能,但文件包含漏洞在php中居多,而在jsp\ASP\ASP.NETC 程序中非常少,甚至没有文件包含漏洞的存在。
文件包含漏洞分类
1,本地文件包含:
当被包含的文件在服务器本地时,就形成的本地文件包含漏洞
2,远程文件包含漏洞:
本地文件包含和远程文件包含造成漏洞的原因时一样的,当php.ini中的配置选项allow_url_fopen和alliw_url_include为ON的话,则包含的文件可以是第三方服务器中的文件,就形成了远程文件包含漏洞。
漏洞的环境代码
<?php
$flie=$_GET[ "file"];
include($flir);
?>
127.0.0.1/a.php/../shell.php相对路径就可以访问到这个文件
C:/windows/system32.txt
../是父级目录 就是上一层的目录 C:/
./是当前目录
/是根目录
本地包含是可以实现php phpinfo();的,写一个文件aa.php里面写php phpinfo();它的后缀名是什么都可以,aa.dada都可以的
也可以写一句话木马,用工具来链接,不管后缀名是什么都会当代码执行,这个漏洞一般都要配合i其他漏洞来找。这就是本地包含漏洞
远程包含文件漏洞
利用条件
在对方开启这两个配置时才可以使用
需要满足两个条件在php.ini中。当php.ini中的配置选项allow_url_fopen:on allow_url_include:on
开启apache 服务 ,一定要桥接模式
已经显示出来了,用第3方服务器来做操作 ,如果用的是一句话木马,就可以用菜刀蚁剑来链接!