PHP伪协议基本原理介绍

作者:隐形卟 时间:2023-05-30 00:24:11 

前言

引用一张比较清晰易懂的图

PHP伪协议基本原理介绍

php伪协议是php自己支持的一种协议与封装协议,简单来说就是php定义的一种特殊访问资源的方法。

常见的php伪协议

php://input

php://input 是个可以访问请求的原始数据的只读流,获取POST请求数据的协议

当enctype=”multipart/form-data” 的时候 php://input 是无效的。

要使php://input 成功使用还需要配置php.ini 中的 allow_url_include设置为On

PHP伪协议基本原理介绍

案例代码

php
<?php
@include($_GET["file"]);
?>

构造执行的代码,输出结果

PHP伪协议基本原理介绍

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出

php://filter 的使用:如
php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

php://filter 伪协议组成:
read=<读链的筛选列表>
resource=<要过滤的数据流>
write=<写链的筛选列表>

php://filter/read=处理方式(base64编码,rot13等等)/resource=要读取的文件

read 对应要设置的过滤器:
常见的过滤器分字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
其中convert.base64-encode ,convert.base64-decode都属于 转换过滤器

<?php
$a=($_GET["file"]);
echo(file_get_contents($a));//获取文件内容
?>

访问输出base64编码后的内容

PHP伪协议基本原理介绍

zip://与bzip2://与zlib://协议

zip:// 等属于压缩流的协议,通过直接压缩普通文件为zip文件,再通过zip:// 协议读取,可以直接执行php代码。压缩后的zip文件可以随意修改后缀也不影响zip://协议读取。(注意是如phpinfo.txt直接压缩为zip,而不是文件夹压缩zip)

例:

<?php
$a=($_GET["file"]);
include($a);
?>

压缩及协议访问格式:

压缩文件为.zip后缀
zip://绝对路径/phpinfo.zip%23phpinfo.php
压缩文件为.bz2后缀
compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
压缩文件为.gz后缀
compress.zlib://绝对路径/phpinfo.zip/phpinfo.php

zip://访问

PHP伪协议基本原理介绍

data://

data://协议与php://input 有很点相似的地方。他们都可以通过请求提交的php代码数据配合文件包含函数可以达到代码执行效果,data:// 的成功执行需要php.ini设置allow_url_include 与allow_url_open都为On。

data://协议的格式是: data://数据流封装器,相应格式数据

常见的用法为
data://,<?php%20phpinfo();?>   
data://text/plain,<?php%20phpinfo();?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

例:

<?php
$a=($_GET["file"]);
include($a);
?>

构造data:// 访问

PHP伪协议基本原理介绍

phar://

phar://伪协议在前面phar反序列化的时候学习过,phar也可以对zip格式压缩包进行访问解析。

格式为:phar://绝对路径\phpinfo.zip\phpinfo.php

PHP伪协议基本原理介绍

来源:https://blog.csdn.net/qq_42077227/article/details/127760256

标签:PHP,伪协议
0
投稿

猜你喜欢

  • Python selenium实现大麦网自动购票过程解析

    2023-10-17 05:43:10
  • 详解Go语言中的数据库操作

    2024-01-15 19:30:23
  • Windows10下安装解压版MySQL教程图文详解

    2024-01-12 20:40:57
  • 学会sql数据库关系图(Petshop)

    2024-01-28 18:43:23
  • 一次Mysql update sql不当引起的生产故障记录

    2024-01-21 09:09:22
  • python爬虫用scrapy获取影片的实例分析

    2023-09-25 09:22:30
  • 使用C#连接并读取MongoDB数据库

    2024-01-15 17:12:13
  • Django框架设置cookies与获取cookies操作详解

    2021-07-24 09:10:49
  • PHP使用GIFEncoder类生成gif动态滚动字幕

    2024-05-08 09:34:46
  • Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面

    2024-05-02 17:31:43
  • 使用pandas忽略行列索引,纵向拼接多个dataframe

    2022-05-23 08:52:42
  • 防止MySQL注入或HTML表单滥用的PHP程序

    2024-05-11 10:12:49
  • python机器学习之神经网络

    2023-11-10 21:39:19
  • PHP字符编码问题之GB2312 VS UTF-8解决方法

    2024-04-29 13:57:28
  • Django REST framework 限流功能的使用

    2023-11-11 07:09:35
  • 学以致用驳ASP低能论

    2007-08-22 14:47:00
  • mysql复制中临时表的运用技巧

    2024-01-20 10:51:49
  • Python变量和数据类型和数据类型的转换

    2023-09-28 07:44:34
  • Python IDE PyCharm的基本快捷键和配置简介

    2021-09-18 07:08:10
  • 在PYQT5中QscrollArea(滚动条)的使用方法

    2023-03-07 06:29:51
  • asp之家 网络编程 m.aspxhome.com