当前位置: 首页 > article >正文

文件包含 任意文件读取

文件处理漏洞--文件包含 - wizard骑士 - 博客园

1,什么是文件包含

        程序开发人员一般会吧重复使用的函数写道单个文件中,需要使用某个函数时直接调用此文件,无需再次编写,文件调用的过程就是文件包含,所以将包含的文件设置为变量,用来动态调用,但是这种灵活性,导致客户端可以调用一个恶意文件,造成文件包含漏洞 。

      下面的代码通过get获取file的值,并用include包含此文件。

<?phperror_reporting(0);$file = $_GET["file"];include $file;> 

而文件包含除了有include,还能用其他的函数

  • include

    include()在包含的过程中如果出现错误,只产生警告,并且脚本会继续

  • require

    require()在包含的过程中如果出现错误,会生成致命错误,并停止脚本

  • include_once、require_once

    如果文件已包含,则不会包含,以避免函数重复定义,变量重新赋值等问题

  • 在写法上 include('xx')   ====   include 'xx'

2,文件包含漏洞利用

 1,任意文件读取

        当文件包含的文件没有被php标签包裹时,会直接显示包含文件的内容,否子会被先解析为php代码。直接包含本地php文件,只能得到运行后的结果,如果想要得到具体内容可以利用php中的filter伪协议将文件编码成base64后输出。

php://filter/read=convert.base64-encode/resource=xxx
什么是伪协议?

        PHP 伪协议(PHP Pseudo Protocols)是 PHP 提供的一种特殊的协议机制,用于在 PHP 脚本中实现一些特殊的文件操作功能。这些伪协议并不是真正的网络协议,而是 PHP 内部定义的、用于特定用途的协议。它们通常用于处理文件路径、数据流、内存操作等。

这里用到的伪协议就是filter伪协议,后续的文件包含漏洞都与这个伪协议有关。

而这里的使用原理就是将php源码编码输出,这样php代码就不会被执行,再通过base64解码即可获得php源码。

payload中的各种组成部分

 

 2,执行php代码

这里有两种伪协议php://input和data://

两种方式都有条件,它们都需要满足一个条件 allow_url_include=on

data://还需满足另一个条件 allow_url_fopen=on

php://input可以获取POST的数据流,当与包含函数结合时,php://input流会被当做php文件执行,从而导致任意代码执行

data://同样类似于php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当做php文件执行。从而导致任意代码执行

这里的input用法简单,只需用post的方法上传要执行的php代码即可。

但data比较吃操作

 

比如需要执行phpinfo函数

php://input (post内容 <?php phpinfo;?>)

data://[<MIME-type>][;charset=<encoding>][;base64],<data>

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

?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

 

还可以用zip://伪协议(zlib://和bzip2://)

zip://可以访问压缩包里的文件,当与包含函数结合时,zip://流会被当作php文件执行,从而实现任意代码执行

只需要是zip压缩包即可

条件:allow_url_fopen=off/on、allow_url_include=off/on

zip://[压缩包绝对路径]#[压缩包内文件]

?file=zip.jpg#phpinfo.txt

还有几种利用方法

 

3,做题

[SWPUCTF 2021 新生赛]include

 此题虽说没有任何过滤和保护,而且明确告诉了flag的文件名。如果没学文件包含漏洞利用可能就只有目录遍历找了,但学了文件包含漏洞我们就可以用php://input来执行代码

但是没成功,后面又尝试遍历目录看能不能找到,发现也没有

突然想起来包含php文件会被解析,所以用fliter看下

 [HNCTF 2022 Week1]Interesting_include 

参数中必须包含flag,然后就没有其他的了。 

用fliter伪协议读取 [HNCTF 2022 WEEK2]easy_include

正则表达式过滤了flag,php,data和一些特殊字符 

由于php被过滤(此处正则表达式忽略大小写),所以可以用日志文件包含

可以看到ua头被存储在这个日志文件中

 写这个一定要小心,因为一但写错就删不了了

这个还要注意发送后包含不会立即执行,需要在包含一次 

相关文章:

文件包含 任意文件读取

文件处理漏洞--文件包含 - wizard骑士 - 博客园 1&#xff0c;什么是文件包含 程序开发人员一般会吧重复使用的函数写道单个文件中&#xff0c;需要使用某个函数时直接调用此文件&#xff0c;无需再次编写&#xff0c;文件调用的过程就是文件包含&#xff0c;所以将包含的文件…...

缓存套餐-01.Spring Cache介绍和常用注解

一.Spring Cache 要使用直接导入坐标即可。 如何选择底层的缓存实现呢&#xff1f;只要导入对应的缓存坐标即可。如果要使用redis作为缓存实现&#xff0c;那么只需要导入redis的maven坐标。 二.常用注解 Cacheable&#xff1a;不光往缓存中写缓存数据&#xff0c;而且会从缓…...

C++类与对象—下:夯实面向对象编程的阶梯

9. 赋值运算符重载 9.1 运算符重载 在 C 里&#xff0c;运算符重载能够让自定义类型的对象像内置类型那样使用运算符&#xff0c;这极大地提升了代码的可读性与可维护性。运算符重载本质上是一种特殊的函数&#xff0c;其函数名是 operator 加上要重载的运算符。 下面是运算…...

MCP认证全解析:从零到微软认证专家

MCP认证全解析&#xff1a;从零到微软认证专家 什么是MCP认证&#xff1f; Microsoft Certified Professional&#xff08;MCP&#xff09;是由微软官方颁发的技术认证&#xff0c;旨在验证IT从业者在微软技术栈&#xff08;如Azure、Windows Server、SQL Server等&#xff0…...

裸辞8年前端的面试笔记——JavaScript篇(一)

裸辞后的第二个月开始准备找工作&#xff0c;今天是第三天目前还没有面试&#xff0c;现在的行情是一言难尽&#xff0c;都在疯狂的压价。 下边是今天复习的个人笔记 一、事件循环 JavaScript 的事件循环&#xff08;Event Loop&#xff09;是其实现异步编程的关键机制。 从…...

TCP 与 UDP报文

** TCP 与 UDP报文** 1. 引言 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 是两种最核心的传输层协议。它们各自适用于不同的场景&#xff0c;理解其工作原理对开发高性能网络应用至关重要。本文将详细解…...

开上“Python跑的车”——自动驾驶数据可视化的落地之道

开上“Python跑的车”——自动驾驶数据可视化的落地之道 一、自动驾驶离不开“看得见”的智能 在智能汽车时代,自动驾驶已然不是“炫技”标签,而是一场技术实力的全面拉锯战。而在这场战役中,有一个极其关键但常被忽略的领域,叫做: 数据可视化(Data Visualization)。 为…...

Linux中安装mysql8,转载及注意事项

一、先前往官网下载mysql8 下载地址&#xff1a; https://dev.mysql.com/downloads/选择Linux 二、删除Linux中的mysql&#xff08;如果有的话&#xff09;&#xff0c;上传安装包 1、先查看mysql是否存在&#xff0c;命令如下&#xff1a; rpm -qa|grep -i mysql如果使用这…...

可以下载blender/fbx格式模型网站

glbxz.com glbxz.com可以下载blender/fbx格式模型。当然里面有免费的...

SpringBoot的汽车商城后台管理系统源码开发实现

概述 汽车商城后台管理系统专为汽车4S店和经销商设计&#xff0c;提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能&#xff1a; ​​销售管理​​&#xff1a;记录销售信息&#xff0c;跟踪交易进度​​客户管理​​&#xff1a;维护客户…...

从入门到深入:Vue.js 学习全攻略

一、Vue.js 入门基础 &#xff08;一&#xff09;Vue.js 简介与环境搭建 Vue.js 是一套用于构建用户界面的渐进式 JavaScript 框架&#xff0c;所谓渐进式&#xff0c;意味着开发者可以根据项目需求&#xff0c;灵活地选择使用 Vue 的功能。它既可以嵌入到简单的 HTML 页面中…...

C++八股--6--mysql 日志与并发控制

这里向大家介绍一下数据库基础&#xff1a;共分为以下章节 10前序.日志系统 这是数据库的核心。我放到首页来介绍&#xff0c;给大家一个前置概念&#xff0c;方便进行更好的学习 日志文件我们用来记录事务对数据库更新操作的文件&#xff0c;分为以记录为单位的文件和数据块…...

DeepSeek实战--手搓实现Agent

1.背景 要学习AI agent&#xff0c;只会用agent 框架&#xff0c;还不够&#xff0c;一旦框架出现问题&#xff0c;没法快速的排查出问题。 学习就应该“知其然&#xff0c;更应该知其所以然” &#xff0c;今天我们就用编码的方式实现一个简单的agent 。我们模拟一套AI学生评…...

Hutool的`BeanUtil.toBean`方法详解

BeanUtil.toBean是Hutool工具包中一个非常实用的JavaBean转换工具方法&#xff0c;它能够方便地将一个对象&#xff08;通常是Map或另一个JavaBean&#xff09;转换为目标类型的JavaBean实例。 方法签名 public static <T> T toBean(Object source, Class<T> tar…...

线性代数——行列式⭐

目录 一、行列式的定义⭐ 1-1、三阶行列式练习 1-2、下面介绍下三角行列式、上三角行列式、对角行列式 ​编辑 二、行列式的性质 2-1、性质1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6 ​编辑 2-2、性质7 2- 3、拉普拉斯定理、克莱姆法则 三…...

iPhone手机连接WiFi异常解决方法

iPhone手机连接WiFi异常解决方法 一、问题现象二、iPhone连不上可能的原因三、基础排查与快速修复第一步:重启大法第二步:忽略网络,重新认证第三步:关闭“私有无线局域网地址”第四步:修改DNS服务器第五步:还原网络设置四、路由器端排查及设置关闭MAC地址过滤或添加到白名…...

Spark缓存

生活中缓存容量受成本和体积限制&#xff08;比如 CPU 缓存只有几 MB 到几十 MB&#xff09;&#xff0c;但会通过算法&#xff08;如 “最近最少使用” 原则&#xff09;智能决定存什么&#xff0c;确保存的是 “最可能被用到的数据”。 1. 为什么需要缓存&#xff1f; 惰性执…...

计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术

基于Transformer的低照度图像增强技术通过结合Transformer的全局建模能力和传统图像增强理论(如Retinex),在保留颜色信息、抑制噪声和平衡亮度方面展现出显著优势。以下是其核心原理、关键公式及典型代码实现: 一、原理分析 1. 全局依赖建模与局部特征融合 Transformer的核…...

学习设计模式《八》——原型模式

一、基础概念 原型模式的本质是【克隆生成对象】&#xff1b; 原型模式的定义&#xff1a;用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 。 原型模式的功能&#xff1a; 1、通过克隆来创建新的对象实例&#xff1b; 2、为克隆出来的新对象实例复制…...

疗愈服务预约小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的疗愈服务预约小程序源码&#xff0c;这款小程序在功能设计和用户体验上都表现出色&#xff0c;为疗愈行业提供了一种全新的服务模式。 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;保证了系统的稳定性和高效性。同时&#xff0c…...

如何通过外网访问内网?对比5个简单的局域网让互联网连接方案

在实际应用中&#xff0c;常常需要从外网访问内网资源&#xff0c;如远程办公访问公司内部服务器、在家访问家庭网络中的设备等。又或者在本地内网搭建的项目应用需要提供互联网服务。以下介绍几种常见的外网访问内网、内网提供公网连接实现方法参考。 一、公网IP路由器端口映…...

Linux 服务器静态 IP 配置初始化指南

✅ 第一步&#xff1a;确认网络管理方式 运行以下命令判断系统使用的网络管理服务&#xff1a; # 检查 NetworkManager 是否活跃 systemctl is-active NetworkManager# 检查 network&#xff08;旧服务&#xff09;是否活跃 systemctl is-active network或者检查配置路径&…...

【随笔】Google学术:but your computer or network may be sending automated queries.

文章目录 一、问题复述二、问题原因三、解决 前提&#xff1a;你的xxx是自己做的&#xff0c;你自己可以管理&#xff0c;而不是用的那些劣质✈场。 一、问题复述 &#x1f7e2;如下图所示&#xff1a;可以打开谷歌学术&#xff0c;但是一搜索就是这个界面。 二、问题原因 …...

长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南

引言&#xff1a;凌晨三点的告警 "张工&#xff01;生产库又告警了&#xff01;"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式&#xff0c;排查发现某核心表的年龄值&#xff08;Age&#xff09;已突破20亿大关。经过一夜奋战&#xff0c…...

ubuntu nobel + qt5.15.2 设置qss语法识别正确

问题展示 解决步骤 首选项里面的高亮怎么编辑选择都没用。如果已经有generic-highlighter和css.xml&#xff0c;直接修改css.xml文件最直接&#xff01; 在generic-highlighter目录下找到css.xml文件&#xff0c;位置是&#xff1a;/opt/Qt/Tools/QtCreator/share/qtcreator/…...

优化01-统计信息

Oracle 的统计信息是数据库优化器生成高效执行计划的核心依据。它记录了数据库对象&#xff08;如表、索引、列等&#xff09;的元数据信息&#xff0c;帮助优化器评估查询成本并选择最优执行路径。以下是关于 Oracle 统计信息的详细介绍&#xff1a; 一、统计信息的分类 表统…...

Unity-Socket通信实例详解

今天我们来讲解socket通信。 首先我们需要知道什么是socket通信&#xff1a; Socket本质上就是一个个进程之间网络通信的基础&#xff0c;每一个Socket由IP端口组成&#xff0c;熟悉计网的同学应该知道IP主要是应用于IP协议而端口主要应用于TCP协议&#xff0c;这也证明了Sock…...

MATLAB仿真定点数转浮点数(对比VIVADO定点转浮点)

MATLAB仿真定点数转浮点数 定点数可设置位宽&#xff0c;小数位宽&#xff1b;浮点数是单精度浮点数 对比VIVADO定点转浮点 目录 前言 一、定点数 二、浮点数 三、定点数转浮点数 四、函数代码 总结 前言 在FPGA上实现算法时&#xff0c;相比MATLAB实现往往需要更长的开发…...

配置Jupyter Notebook环境及Token认证(Linux服务器)

配置Jupyter Notebook环境及Token认证&#xff08;Linux服务器&#xff09; 背景 在Ubuntu 18.04.6 LTS服务器&#xff08;IP: 39.105.167.2&#xff09;上&#xff0c;基于虚拟环境pytorch_env&#xff0c;通过Mac终端&#xff08;SSH&#xff09;配置Jupyter Notebook环境&…...

【计算机网络】Cookie、Session、Token之间有什么区别?

大家在日常使用浏览器时可能会遇到&#xff1a;是否清理Cookie&#xff1f;这个问题。 那么什么是Cookie呢&#xff1f;与此相关的还有Session、Token这些。这两个又是什么呢&#xff1f; 本文将对这三个进行讲解区分&#xff0c;如果对小伙伴有帮助的话&#xff0c;也请点赞、…...