• 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
    @include($_GET["file"]);
    ?>
    
    • 1
    • 2
    • 3
    • 4

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

    在这里插入图片描述

    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都属于 转换过滤器
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    
    $a=($_GET["file"]);
    echo(file_get_contents($a));//获取文件内容
    ?>
    
    • 1
    • 2
    • 3
    • 4

    访问输出base64编码后的内容

    在这里插入图片描述

    zip:// , bzip2://, zlib:// 协议

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

    
    $a=($_GET["file"]);
    include($a);
    ?>
    
    • 1
    • 2
    • 3
    • 4

    压缩及协议访问格式:

    压缩文件为.zip后缀
    zip://绝对路径/phpinfo.zip%23phpinfo.php
    压缩文件为.bz2后缀
    compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
    压缩文件为.gz后缀
    compress.zlib://绝对路径/phpinfo.zip/phpinfo.php
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    zip://访问
    在这里插入图片描述

    data://

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

    常见的用法为
    data://,   
    data://text/plain,
    data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
    
    • 1
    • 2
    • 3
    • 4

    例:

    
    $a=($_GET["file"]);
    include($a);
    ?>
    
    • 1
    • 2
    • 3
    • 4

    构造data:// 访问
    在这里插入图片描述

    phar://

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

    在这里插入图片描述

  • 相关阅读:
    1、Jvm体系结构(jvm位置,jvm体系结构)
    为什么MySQL的浮点数类型不够精准?(实例证明)
    【AI视野·今日Robot 机器人论文速览 第八十二期】Tue, 5 Mar 2024
    数据结构-leetcode-环形链表Ⅱ
    高并发下如何防重?
    Flutter 数据存储大全之使用 MongoDB Realm 构建离线 Flutter 应用(教程含源码)
    【李航统计学习】第 1 章 统计学习方法概论 笔记
    把控元宇宙产业的发展脉络
    浅谈安科瑞无线测温产品在巴西某工厂的应用
    Django--ORM 多表查询
  • 原文地址:https://blog.csdn.net/qq_42077227/article/details/127760256