文章目录
- 一、漏洞概念
- 二、原理
- 三、分类
- 四、危害
- 五、攻击和实例
- 六、防御
- 七、产生原因
- 八、常用绕过方法
- 九、总结
一、漏洞概念
LIF(文件包含漏洞(File Inclusion Vulnerability))是指Web应用程序由于未正确验证或过滤用户输入,允许攻击者通过传递不受信任的路径或文件名参数来操控系统包含本地或远程文件的安全缺陷。此类漏洞通常发生在文件包含功能中(如PHP的include()或require()),攻击者可以利用该漏洞加载任意文件,导致敏感信息泄露、代码执行、远程控制等高危风险。该漏洞的产生通常是由于开发者未对用户提供的输入进行严格验证或访问控制,导致应用程序 错误地将攻击者构造的路径解析为合法资源。根据加载文件的来源,文件包含漏洞可分为两类:本地文件包含(
Local FileInclusion, LFI)和远程文件包含(Remote File Inclusion, RFI)
1、文件包含(LFI)
1.1 本地文件包含(LFI)
允许攻击者通过路径遍历等手段加载服务器上的本地文件,从 而读取敏感信息(如配置文件、日志文件)或触发任意代码执行。
1.2 远程文件包含(RFI)
允许攻击者通过传递远程URL加载外部资源,攻击者可将恶意脚 本托管在远程服务器上并通过漏洞加载执行,从而实现远程代码执行(Remote Code Execution, RCE)。 文件包含漏洞可能导致严重后果,包括敏感信息泄露、服务器权限提升、远程控制以及进一步的后续攻击(如植入后门、数据窃取等)。 因此,针对文件包含漏洞的防御措施包括输入验证、文件路径白名单、禁用远程文件加载(如关闭allow_url_include选项)以及限制文件访 问权限等。
二、原理
2、LFI的工作原理
2.1 文件包含功能
在许多Web应用中,开发者使用文件包含功能动态加载内容。
例如, 允许通过URL参数选择不同的页面:
php
<?php
$page = $_GET['page']; // 用户输入页面名称
include($page); // 包含用户指定的文件
?>
在正常情况下,?page=home.php会加载home.php页面。
2.2 用户输入未过滤
如果未对$page变量的值进行验证,攻击者可以传入不受限制的文件路径,加载服 务器上的任何文件。
2.3 路径遍历
LFI通常通过路径遍历技术(Path Traversal)实现,即利用 …/(表示返回上一级 目录)来绕过开发者预期的目录限制。
例如:
?page=../../etc/passwd
此输入可能会导致加载系统的敏感文件(如Linux系统中的/etc/passwd)。
2.4 文件内容访问
如果应用程序将文件内容输出给用户,攻击者可以直接查看本地文件的内容,例如:配置文件、日志文件等。
2.5 代码执行
在某些情况下,攻击者可能加载包含恶意代码的本地文件,从而触发代码执行。例如,通过日志注入的方式,攻击者在服务器日志中写入恶意代码后,利用LFI加载 日志文件并执行其中的代码
三、分类
3、文件包含分类
本地文件包含漏洞(LFI, Local File Inclusion)的分类可以根据攻击的利用方式和目标进行细分。
以下是LFI的主要分类和解释:
3.1 基于文件读取的LFI
这是最常见的LFI类型,攻击者利用漏洞直接读取服务器上的敏感文件。
其目标是获取服务器中的重要信息,如配置文件、日志文件、用户认证信息等。
典型攻击目标:
3.1.1 Linux系统
/etc/passwd(系统用户信息)
/etc/shadow(密码文件,需要权限访问)
/etc/hosts(本地DNS配置)
/var/log/auth.log(认证日志)
/var/log/apache2/access.log(Web访问日志)
3.1.2 Windows系统
C:\boot.ini(引导配置文件)
C:\Windows\win.ini(Windows配置文件)
C:\Windows\System32\config\SAM(用户密码文件)
3.1.3 目的
窃取系统信息或凭据。为进一步攻击(如权限提升或远程代码执行)做准备。
3.2 基于代码执行的LFI
在某些情况下,LFI可被用来执行恶意代码。攻击者通过注入恶意代码到本地可读取的文件中
(如日志文件或上传文件夹中的文件),然后通过LFI漏洞加载这些文件,从而实现代码执行。
典型攻击方法:
3.2.1 日志注入
攻击者通过伪造HTTP请求,在Web服务器日志中插入恶意代码(如PHP代码)。
然后通过LFI加载日志文件,从而执行恶意代码。
示例:
日志注入内容:<?php system($_GET['cmd']); ?>
LFI调用:?page=../../var/log/apache2/access.log&cmd=id
3.2.2 上传文件注入
攻击者通过文件上传功能上传包含恶意代码的文件。
通过LFI漏洞加载此文件,并执行其中的恶意代码。
远程代码执行(Remote Code Execution, RCE)。
进一步控制服务器。
3.3 基于路径遍历的LFI
此类LFI利用路径遍历(Path Traversal)技术,突破应用程序的目录限制,访问任意本地文 件。攻击者通过输入…/(返回上一级目录)构造超出预期目录的路径。
典型示例:
?page=../../../../etc/passwd
攻击目标
读取服务器上的任意文件。
突破应用程序的目录限制。
3.3.1 目的
窃取敏感文件或配置文件。
进一步发现可利用的文件或漏洞。
3.4 基于会话劫持的LFI
攻击者通过LFI漏洞加载服务器上的会话文件(如PHP会话文件),窃取用户的会话数据,从而 伪造身份或执行未授权的操作。
3.4.1 典型目标
PHP会话文件路径:
/var/lib/php/sessions/sess_<session_id>(存储当前用户的会话信息)
3.4.2 攻击方法
利用LFI漏洞访问会话文件:
payload示例:
?page=../../../../var/lib/php/sessions/sess_abc123
3.4.3 作用
解析会话文件内容,窃取敏感信息(如用户名、Session ID)。
使用窃取的会话数据伪造登录或操作。
3.4.4 目的
劫持用户会话。 模拟合法用户进行敏感操作。
3.5 基于其他文件的LFI
攻击者通过LFI漏洞加载其他特定类型的文件,结合上下文实现攻击目标。
攻击目标类型:
3.5.1 临时文件
Web应用在运行时可能生成临时文件(如缓存文件、编译文件),攻击者可通过LFI 访问这些文件。
3.5.2 备份文件
开发者可能在服务器上保留未删除的备份文件(如 .bak、.old),攻击者可以通过 LFI漏洞读取这些文件,获取未发布的代码或配置。
3.5.3 环境变量文件
常见文件如.env(存储环境变量信息,包括数据库密码、API密钥等)。
目的:
访问未保护的敏感资源。
通过特定文件信息进行进一步利用。
3.6 综合利用型LFI
攻击者将多种LFI攻击方法结合起来,形成一套完整的攻击链,以实现更复杂的目标。例如:
3.6.1 思路
- 路径遍历读取服务器上的日志文件。
- 在日志文件中注入恶意代码。
- 再次利用LFI加载注入的日志文件,触发代码执行。
3.6.2 示例攻击链
3.6.2.1 利用路径遍历读取
/var/log/apache2/access.log
3.6.2.2 注入恶意代码
#php
GET /<?php system($_GET['cmd']); ?> HTTP/1.1
3.6.2.3 使用LFI加载日志文件
?page=../../var/log/apache2/access.log&cmd=id
3.6.3 目的
链式攻击,逐步控制服务器。
扩大攻击范围,造成更严重的后果。
3.7 LFI的分类总结表

四、危害
4、文件包含两种类型主要危害
4.1 本地文件包含漏洞(LFI, Local File Inclusion)主要危害
4.1.1 信息泄露
攻击者可以通过LFI漏洞访问服务器上的敏感文件,窃取应用程序和系统的关键信息。这些信息可能包括:
常见的敏感文件:
4.1.1.1 系统文件
Linux:
/etc/passwd
/etc/shadow(包含用户信息和密码哈希值)。
Windows:
C:\boot.ini
C:\Windows\win.ini。
4.1.1.2 配置文件
Web应用的配置文件,如config.php、.env(存储数据库连接信息、API密钥等)。
4.1.1.3 日志文件
访问日志或错误日志,如/var/log/apache2/access.log。
攻击者可从日志中获取敏感的请求信息或应用的错误细节。
4.1.1.4 其他文件
服务器上未删除的备份文件(如.bak、.old)。
危害: 泄露服务器内部结构和敏感数据。
攻击者可以使用泄露信息执行进一步攻击,例如利用数据库凭据访问数据库。
4.1.2 代码执行(远程代码执行, RCE)
攻击者可以通过注入恶意代码到本地文件中,再利用LFI漏洞加载该文件并触发代码执行。
可能的注入途径:
4.1.2.1 日志注入
攻击者通过伪造HTTP请求,将恶意代码注入到服务器的日志文件中。
例如,在请求 头中注入:
<?php system($_GET['cmd']); ?>
然后通过LFI加载日志文件执行:


502

被折叠的 条评论
为什么被折叠?



