PHP伪协议使用姿势

php支持的伪协议

1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 23977 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流

1 file://

不受allow_url_fopen,allow_url_include影响
条件:

allow_url_fopen : off/on
allow_url_include: off/on

作用:
用于访问本地文件系统,在ctf中通常用来读取本地文件

在include() / require() / include_once() / require_once() 参数可控的情况下,即使导入非.php文件,如shell.txt ,依然按照php语法进行解析,这是include()函数所决定的

说明:

file:// 文件系统是php使用的默认封装协议,用于展示本地文件系统。

用法示例:

1.file://[文件的绝对路径和文件名]http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
2.file://[文件的相对路径和文件名]http://127.0.0.1/include.php?file=./phpinfo.txt
3.http://网络位置和文件名http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

综上所述,file://后面只能跟绝对路径,跟相对路径的时候就不要写file://了。
查看这个例子:

<?php
$filename = 'file://D:\MyApplication\phpstudy_pro\WWW\example.txt';
$content = file_get_contents($filename);
echo $content;
?>

此时的输出是php解析后的内容:
在这里插入图片描述
这个例子中,我们把file://协议写到了file_get_contents()方法中去,该方法主要用来读取文件,使用file协议即可读取本地文件,但实际上,使用还是不使用file://都可以读取本地文件,为什么还要使用file://呢?像下面这也可以成功读取本地文件而没有在方法中使用file协议:

<?php
$filename = 'D:\MyApplication\phpstudy_pro\WWW\example.txt';
$content = file_get_contents($filename);
echo $content;
?>

这问题问的挺有水平的哈哈哈哈,也许是为了规范?不太清楚。听听我导师怎么说吧:

file://开头的是个URL,你理解一下URL是啥意思
好冷漠,行吧,我不该多此一举问的呜呜呜

如何使文件不被解析而只输出文件源代码呢?这点在ctf中常考。这里就会使用到过滤器,但file:// 不支持通过 filter 对文件内容进行过滤处理,可以使用 php://filter 对这些流进行过滤处理。下面就让我们看看php://吧

2 php://

条件

allow_url_open : off/on allow_url_include: 仅 php://input php://stdin
php://memory php://temp 需要on

作用:
php:// 访问各个输入/输出流 (I/O streams), 在ctf中经常使用的是 php://filter 和 php://input

php://filter 用于读取源码
php://input 用于执行php代码

说明
php提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流,标准输入输出流和错误描述符.
在这里插入图片描述
协议参数

在这里插入图片描述
读链是一系列过滤器的组合,它们按顺序应用于输入流。这些过滤器可以执行各种操作,如解码、解压缩、替换等。
常用方式:

php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

php://filter使用

php://filter/read=convert.base64-encode/resource=[文件名]

利用filter协议读文件,将index.php通过base64编码后进行输出。这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。
而使用的convert.base64-encode,就是一种过滤器。
下面来看一个例子,使用了过滤器编码:

<?php
$filename = 'D:\MyApplication\phpstudy_pro\WWW\example.txt';
$content = file_get_contents("php://filter/read=convert.base64-encode/resource={$filename}");
echo $content;
?>

访问结果:
在这里插入图片描述
解码:
在这里插入图片描述

如果不使用编码,就不能写过滤器编码了,只能直接读取文件:

<?php
$content = file_get_contents("php://filter/resource=example.php");
echo $content;
?>

运行看看:
在这里插入图片描述
我尝试了相对和绝对路径都不行,我又厚脸皮问我导师去了,呜呜我太伤心了,他好像只管他身边的实习生,远在他乡的我好像就被遗忘了,也许是我想多了。
看官网说read是可选参数,我也不知道为啥就是不行:
在这里插入图片描述
知道的朋友解答一下捏?

php://input的使用

http://127.0.0.1/include.php?file=php://input
代码:

<?php
// 使用php://input读取POST请求体
$inputData = file_get_contents("php://input");
echo $inputData;
// 打印读取到的数据
echo urldecode($inputData);
?>

在这里插入图片描述
url解码之后即可查看post请求的内容。
zip://
zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

4. zip://中只能传入绝对路径。

要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23(即下述POC中#要用%23替换)
只需要是zip的压缩包即可,后缀名可以任意更改。
相同的类型的还有zlib://和bzip2://

在这里插入图片描述
使用include等也可以使用伪协议:
在这里插入图片描述

在这里插入图片描述
总之要代码被解析就用file协议,想看源代码就用php协议编码。

相关问题:exit利用php伪协议绕过;

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

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

相关文章

我的软件测试内卷之路

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 现在的大环境下&#xff0c;各行各业都开始内卷起来&#xff0c;测试也不例外&#xff0c;企业要…

分布式数据实现跨设备数据同步的N个秘密 | 分布式数据管理解析(二)

上期我们给大家带来分布式数据管理如何完成数据存储&#xff0c;数据同步&#xff0c;数据跨端访问&#xff0c;并保证整个过程中跨设备数据安全的解读。 这都得益于分布式数据管理平台抽象出的三大关键技术——分布式数据库&#xff0c;分布式文件系统和融合搜索。 那么这三…

IS-IS:10 ISIS路由渗透

ISIS的非骨干区域&#xff0c;无明细路由&#xff0c;容易导致次优路径问题。可以引入明细路由。 在IS-IS 网络中&#xff0c;所有的 level-2 和 level-1-2 路由器构成了一个连续的骨干区域。 level-1区域必须且只能与骨干区域相连&#xff0c;不同 level-1 区域之间不能直接…

ACDSee 2024旗舰版 下载安装汉化教程,ACDSee 最新版,附安装包和工具,全网最简单,轻松搞的安装,无套路

前言 ACDSee是一款数字资产管理、图片管理编辑工具软件&#xff0c;提供良好的操作界面&#xff0c;简单人性化的操作方式&#xff0c;优质的快速图形解码方式&#xff0c;支持丰富的RAW格式&#xff0c;强大的图形文件管理功能等。 准备工作 1、提前准备好 ACDSee 2024 安装…

第20届纪念款-牛客周赛 Round 20 B.C简单构造

B 答案要么是0 要么是1 所以你全部填0或者要么填1然后算就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int n;void solve() {//全0 全1&#xff1f;string str;cin>>str;n str.size();string str1 str;int ans…

阿蒂亚(M.F.Atiyah)与黎曼猜想

&#xff08;注意&#xff1a;黑板上写的数不止20位数&#xff09; 德国柏林时间2018年9月24日上午9点45分&#xff0c;菲尔兹奖与阿贝尔奖双料得主、英国皇家学会院士迈克尔阿蒂亚爵士在德国海德堡举行的海德堡奖诺贝尔奖获得者论坛上&#xff0c;讲述了他对黎曼猜想的证明。…

设计模式⑩ :用类来实现

文章目录 一、前言二、Command 模式1. 介绍2.应用3. 总结 三、Interpreter 模式1. 介绍2. 应用3. 总结 参考文章 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系…

springboot mongodb简单教程

&#xff08;1&#xff09;依赖 compile(org.springframework.boot:spring-boot-starter-data-mongodb) &#xff08;2&#xff09;application.properties配置文件 spring.data.mongodb.host127.0.0.1 spring.data.mongodb.port27017 spring.data.mongodb.databasetest &a…

docker由浅入深

一、什么是docker docker 顾名思义就是轮船的意思&#xff0c;轮船我们知道是通过集装箱运载货物的东西&#xff0c;那么docker其实也是类似的东西&#xff0c;只是装载的是虚拟的运行程序罢了。其中集装箱在docker里面被称为container&#xff08;后面以容器称之&#xff09;…

软件安全测试的重要性简析,专业安全测试报告如何申请?

在当今数字化时代&#xff0c;软件在我们的日常生活中扮演着至关重要的角色&#xff0c;但也带来了各种潜在的安全威胁。为了保障用户的信息安全和维护软件的可靠性&#xff0c;软件安全测试显得尤为重要。 软件安全测试是指通过一系列的方法和技术&#xff0c;对软件系统中的…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面&#xff1a; 开发属性&#xff1a; 1. 功能属性&#xff1a;功能是短视频矩阵系统的核心属性&#xff0c;包括短视频的采集、编辑、发布、推广、互动等功能。此外&#xff0c;系统的个性化定制也是考虑的重要因素&#xff0…

Qt实现验证码相关功能

验证码的原理 验证码的原理基于人类视觉和计算机视觉的差异性。通过给用户显示一些难以被机器识别的图形或文字&#xff0c;让用户进行人机交互&#xff0c;确认自己的身份。这样可以防止机器大规模注册、机器暴力破解数据密码等危害&#xff0c;保护网站安全。 Qt实现验证码…

循环的乐章与爱情的旋律

循环的乐章与爱情的旋律 The Rhapsody of Loops and the Melody of Love 在一个阳光明媚的Java编程课上&#xff0c;男主角林浩然&#xff0c;一个热衷于代码逻辑和算法谜题的大二学生&#xff0c;正沉浸在他的Java世界里。而女主角杨凌芸&#xff0c;则是班级中出了名的“程序…

【图论】拓扑排序

昨天复习的知识点。 ​先复习一下 AOE网。 AOE网&#xff0c;简单来说就是工程的带权有向图&#xff0c;其中&#xff1a; 顶点&#xff1a;活动开始或者结束的事件边&#xff1a;活动边的权值&#xff1a;完成该活动所需的时间 在AOE网中&#xff0c;想要完成一项活动&…

认识思维之熵

经常有读者问我&#xff0c;说&#xff1a; 为什么向您请教一个问题&#xff0c;您总能很快指出在哪篇文章里面提到过&#xff0c;是因为您的记忆力特别好吗&#xff1f; 其实不是的。更重要的原因是&#xff1a;如果你经过系统训练&#xff0c;有意识地去获取知识的话&#x…

华为服务器RAID5

0、BIOS默认密码 TaiShan 100服务器BIOS系统的默认密码为 Huawei12#$ TaiShan 200服务器BIOS系统的默认密码为 Admin9000 1、服务器开机选择DEL,进行设置 2、选择设备管理器进入配置页面 3、选择AVAGO MegaRAID configuration utility 进入raid配置 4、选择 Main Menu 进入主…

在线curl命令转换工具 - KGtools

KGtools提供在线curl命令转换工具&#xff0c;帮助您将curl命令转换为Python代码或命令行格式&#xff0c;将复杂的curl命令转换为可直接在Python程序中使用的代码 https://www.kgtools.cn/convert/curl

使用Transformer 模型进行时间序列预测的Pytorch代码示例

时间序列预测是一个经久不衰的主题&#xff0c;受自然语言处理领域的成功启发&#xff0c;transformer模型也在时间序列预测有了很大的发展。本文可以作为学习使用Transformer 模型的时间序列预测的一个起点。 数据集 这里我们直接使用kaggle中的 Store Sales — Time Series …

Vue3的computed和watch

目录 1、computed 2、computed完整写法 3、watch 4、watch监听对象具体属性 5、watch 监听reactive数据 1、computed 基于现有的数据计算出新的数据 <script setup >import {ref,computed} from vue const numref(1) const doubleNumcomputed(()>{return num.val…

latex表格示例(背景颜色、行距、线粗细、标题、表格长度)

导入库 \usepackage{colortbl} 代码 \begin{table}[H] \begin{center}%表格居中 \tabcolsep1.5cm%表格横向长度 \renewcommand\arraystretch{1.5}%设置表格行间距 \begin{tabular}{cc} \toprule[2pt]%设置线的宽度 %\specialrule{0em}{3pt}{8pt}%添加一条线&#xff0c;第一个…