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伪协议绕过;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rqt查看rosbag中视频的方法

1. 播放bag视频 执行&#xff1a; rosbag play xxx.bag2. 打开rqt_image_view 执行&#xff1a; rqt_image_view3. 在选择话题处选择图片话题

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据&#xff0c;将后端得到的数据进行分页处理&#xff0c;通过pagehelper实现动态的分页查询&#xff0c;将查询页数和分页数通过前端发送到后端&#xff0c;后端使用pagehelper&#xff0c;底层是封装threadlocal得到页数和分页数并动态…

sqli-labs靶场(1-6关)

1、第一关 测试id1 id1加一个引号报错&#xff0c;两个引号正常&#xff0c;应该是字符&#xff0c;还有回显 猜测字段长度 id1 order by 3 -- id1 order by 4 -- 字段长度为三&#xff0c;接下来确定位置&#xff1a;id1 and 12 union select 1,2,3 -- 查出库名,及版本号id1 …

Transformer and Pretrain Language Models3-4

Transformer structure 模型结构 Transformer概述 首先回顾一下之前的RNN的一个端到端的模型&#xff0c;以下是一个典型的两层的LSTM模型&#xff0c;我们可以发现&#xff0c;这样一个RNN模型&#xff0c;一个非常重要的一个缺点就在于&#xff0c;它必须顺序地执行&#x…

项目管理平台

技术架构&#xff1a; MySQL、Servlet、JSP 功能模块&#xff1a; 从管理员角度看: 用户登入系统后&#xff0c;可以修改管理员的密码。同时具有以下功能&#xff1a; 1、管理员可以管理具体项目信息。 2、管理员可以管理项目经费信息。 3、管理员可以管理项目资源信息。 4、…

光明之盒:揭开可解释性人工智能的神秘面纱

在人工智能&#xff08;AI&#xff09;的日益普及之际&#xff0c;可解释性人工智能&#xff08;Explainable AI&#xff0c;简称XAI&#xff09;成为了桥接人机理解的关键技术。XAI不仅让人们窥视AI的内在工作原理&#xff0c;还能够提高我们对其决策过程的信任感。本文将深入…

【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libzip介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libzip介绍 libzip是一个开源C库,用于读取,创建和修改zip文件。 libzip可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件。在不关闭存档的情况下所做的更改可以还原…

网站服务器中毒或是被入侵该怎么办?

随着互联网的普及和发展&#xff0c;网站服务器已经成为了企业和个人存储数据、展示信息的重要平台。然而&#xff0c;网络安全问题也日益突出&#xff0c;其中网站服务器中毒或被入侵的事件时有发生。一旦发生这种情况&#xff0c;不仅会导致网站无法正常运行&#xff0c;还可…

快速搭建一个基于MVC架构的Spring Boot应用

提示&#xff1a;如果对 MVC 架构模式不熟悉可以看我的博客 > MVC架构模式与三层架构 快速搭建一个基于MVC架构的Spring Boot应用 一、Web 服务二、快速构建一个Spring Web MVC的 Web 应用1.使用脚手架快速的搭建环境&#xff1a;2.准备数据库&#xff1a;3.编写Dao层访问数…

Linux修改系字符集的方法总结

引言&#xff1a; Linux系统安装后&#xff0c;发现中文显示乱码。因为系统原编码为en_US.UTF-8&#xff0c;那么怎样改为中文呢&#xff1f; 1、检查系统编码 locale英文环境如下&#xff1a; 中文环境如下&#xff1a; 2、检查是否安装中文包 #rpm -qa|grep chinese 3、安…

Spring第二讲

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://www.springframework.org/sche…

docker 修改默认存储位置

✨✨✨✨✨✨✨ &#x1f380;前言&#x1f381;查看前面docker储存位置&#x1f381;移动文件位置&#x1f381;修改配置文件docker.service&#x1f381;修改daemon.json&#x1f381;加载配置并重启 &#x1f380;前言 最近服务出现系统盘满了,发现其中docker存储占用很大一…

6.【SpringBoot3】登录优化-redis

1. SpringBoot 集成 redis 示例 在之前实现的登录接口中&#xff0c;用户登录成功后会生成一个令牌响应给浏览器&#xff0c;之后浏览器访问其他接口时&#xff0c;都要携带该令牌&#xff0c;接受拦截器的检验&#xff0c;如果令牌有效就放行&#xff0c;允许访问后续接口&am…

校招刷题指南

编程题训练逻辑思维能力&#xff0c;这是程序员需要具备的核心能力。校招还是比较看重算法能力的&#xff0c;刷题时建议分类型刷&#xff0c;先做简单题&#xff0c;再做比较困难的题&#xff1b;先刷数据结构相关的&#xff0c;然后是剑指offer的其他题目&#xff1b;刷题过程…

MySQL-删除重复数据

在实际应用中&#xff0c;遇到一个这样的问题&#xff0c;MySQL中存储的数据为资讯类数据&#xff0c;在页面展示时会出现多个平台的新闻报导相同的内容&#xff0c;导致页面会出现重复数据。因为数据是每天定期更新&#xff0c;所以最快捷有效的方式是在更新完数据后增加一个去…

【Leetcode】2861. 最大合金数

文章目录 题目思路代码结果 题目 题目链接 假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台…

C++实现推箱子游戏

推箱子游戏 运行之后的效果如视频所示&#xff0c;在完成游戏后播放音乐 准备工作&#xff1a;建立一个新的文件夹&#xff0c;并在文件夹中任意增加一张背景图片&#xff0c;以及各个部件的照片文件 因为这里用到了贴图技术&#xff0c;要使用graphic.h这个函数&#xff0c…

详解SpringCloud微服务技术栈:DSL查询ES文档高级语法、相关性算分数学原理总结

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch实践1——RestClient操作索引库与文档 &#x1f4da;订阅专栏&#xff1…

通信入门系列——高斯白噪声和限带高斯白噪声

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、高斯白噪声 二、复高…

单调栈第二天(还没写完)

503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…