一,什么是文件包含漏洞
文件包含包括:
- 内容包含
- 函数包含
优点:减少代码量;易于维护;
出现的问题:
可能会导致允许访问敏感文件或者执行恶意代 码,造成漏洞;这就被称为文件包含漏洞;
文件包含漏洞是一种常见的Web应用程序漏洞,允许恶意用户通过在URL或表单字段中注入恶意代码来访问和执行服务器上的文件。这种漏洞通常出现在PHP等动态网页语言中,当应用程序使用用户提供的输入直接包含文件时容易发生。
攻击者利用文件包含漏洞可以执行各种恶意操作,比如读取敏感文件、执行系统命令、获取数据库信息等。为了防止文件包含漏洞,开发人员应该避免直接包含用户输入的文件路径,应该对用户输入进行严格的过滤和验证,或者使用白名单来限制可包含的文件。此外,及时更新软件补丁和安全配置也是防范文件包含漏洞的重要措施。
主要分类:
1,本地文件包含(Local file Inclusion)
- 固定文件名;
- 通过接口动态包含;
- 包含恶意代码或者图片马;
- 包含系统的敏感文件;
2,远程文件包含(Remote file inclusion)
- 使用远程文件包含来包含本地的一句话木马;
PHP的相关函数;
include() //用来包含并且运行指定的文件
include_once() //只包含一次,不重复包含
require() //同includ(),出错时会停止
require_once() //只包含一次
fopen() //打开文件或者url
readfile() //读取并且输出
highlight_file() //用语法高亮文件
show_source() //同highlight_file()
file_get_contents() //把整个文件读入一个字符串
file() //把整个文件读入一个数组
PHP的相关伪协议;
在PHP中,伪协议是一种特殊的URL格式,用于访问各种资源而不是普通的HTTP或FTP。以下是一些PHP中常用的伪协议:
- file://: 用于访问本地文件系统中的文件,例如`file:///path/to/file.txt`。
- http:// 或 https://: 用于通过HTTP或HTTPS协议访问Web资源,例如`http://example.com`。
- ftp://: 用于通过FTP协议访问文件,例如`ftp://example.com/file.txt`。
- php://: 用于访问各种输入/输出流,例如`php://stdin`、`php://stdout`、`php://stderr`等。
- data://: 用于将数据嵌入到URL中,例如`data:text/plain;base64,SGVsbG8gV29ybGQ=`。
二,DVWA靶场
1,使用medium级别;
首先查看源码:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
?>
可以看出对http://,https://等远程文件包含进行过滤;
对../等本地文件包含也进行了过滤;
所以我们试着采用双写绕过(如下payload):
http://localhost/dvwa/vulnerabilities/fi/?page=..././..././..././phpinfo.php
远程文件包含也可以使用双写绕过;
2,使用high级别;
首先来看源码:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
使用伪协议(file://);
设置payload:
http://localhost/dvwa/vulnerabilities/fi/?page=file:///"想要访问的文件路径"
三,文件包含的挖掘
可能出现文件包含:
- 1,url的内容中出现了如file,filename之类的或者include之类的;
- 2,url中出现xxx.php之类的;
- 3,对开源的cms(内容管理系统)进行代码审计;
对于文件包含漏洞的利用:
发现漏洞;
上传shell/读取敏感文件;
执行恶意代码;
四,文件包含漏洞的防御
文件包含漏洞是一种常见的Web应用程序漏洞,攻击者可以利用该漏洞来读取系统文件或执行恶意代码。为了防御文件包含漏洞,可以采取以下几种措施:
1. 输入验证:对用户输入的文件路径进行验证,确保用户无法输入恶意文件路径。可以使用白名单机制,只允许访问特定目录下的文件。
2. 输出编码:对输出到页面的文件路径进行编码,以防止攻击者利用路径遍历漏洞读取系统文件。
3. 文件权限设置:确保Web服务器进程没有读取系统敏感文件的权限,避免攻击者通过文件包含漏洞读取系统文件。
4. 使用安全函数:在代码中使用安全的文件包含函数,如include_once()或require_once(),避免使用可变变量作为文件包含的路径。
5. 更新和监控:及时更新Web应用程序和相关组件,以修复已知的文件包含漏洞,并监控系统日志以检测潜在的攻击行为。
6.过滤协议及目录字符。