文件包含漏洞
原理
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
在php中,提供了四个文件包含的函数
文件包含函数会将文件包含进去,直接使用包含文件中的代码。
分别为:
include(): include ‘filename’;
include 只生成警告(E_WARNING),并且脚本会继续
include_once():
和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。
require(): require ‘filename’;
require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
require_once():
和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
文件包含危害
危害
1.配合文件上传漏洞Getshell (常见图片马中)
2.可执行任意脚本代码
3.可导致网站源码文件及配置文件泄露
4.远程包含GetShell
5.控制整个网站甚至服务器
文件包含脚本
文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<!-—#include file="1.asp " -->
<!--#include file="top.aspx"-->
<c:import url="http://lthief.one/1.jsp">
<jsp:include page="head .jsp" / >
<%@ include file="head.jsp" %>
<?php Include ( 'test.php ' ) ?>
文件包含类型
LFI:local fileinclude 本地文件包含漏洞,被包含的文件在服务器本地
RFI:remote file include 远程文件包含漏洞,被包含的文件在第三方服务器(如站库分离)
本地包含
本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行。
文件包含可以包含任意文件,如图片,文本文件,压缩包等等,如果文件中有服务器能识别的脚本语言,就按照当前脚本语言执行,否则就直接显示出源代码
无限制的本地文件包含
本地文件包含脚本
<?php
$filename=$_GET['filename'];
include($filename);
?>
include将filename包含了进去
而filename为用户可以控制的部分
包含实例:
pp.txt文件内容
<?php
phpinfo();
?>