PHP伪协议基本原理介绍

 更新时间:2022年11月11日 11:22:08   作者:隐形卟  
这篇文章主要介绍了PHP伪协议,php中有很多封装协议,最常见的如file协议,php协议,data协议,zip和phar协议等等

前言

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

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"]);
?>

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

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编码后的内容

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://访问

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:// 访问

phar://

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

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

到此这篇关于PHP伪协议基本原理介绍的文章就介绍到这了,更多相关PHP伪协议内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • PHP+MySQL高并发加锁事务处理问题解决方法

    PHP+MySQL高并发加锁事务处理问题解决方法

    这篇文章主要介绍了PHP+MySQL高并发加锁事务处理问题解决方法,结合实例形式分析了PHP+MySQL事务处理相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • PHP实现限制IP访问及提交次数的方法详解

    PHP实现限制IP访问及提交次数的方法详解

    这篇文章主要介绍了PHP实现限制IP访问及提交次数的方法,涉及php针对客户端来访IP的获取、判断以及结合session记录IP访问次数等相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • php类常量的使用详解

    php类常量的使用详解

    本篇文章是对php中类常量的使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 四个PHP非常实用的功能

    四个PHP非常实用的功能

    这篇文章主要介绍了四个PHP非常实用的功能,需要的朋友可以参考下
    2015-09-09
  • php防攻击代码升级版

    php防攻击代码升级版

    我上一篇文章《最新开发的网站防IP攻击代码,超级有用》写了一个完整的防止网络恶意IP攻击的方案,使用了一个月,效果良好。
    2010-12-12
  • 功能强大的php文件上传类

    功能强大的php文件上传类

    这篇文章主要为大家详细介绍了功能强大的php文件上传类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • PHP读取大文件末尾N行的高效方法推荐

    PHP读取大文件末尾N行的高效方法推荐

    下面小编就为大家带来一篇PHP读取大文件末尾N行的高效方法推荐。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Linux系统下PHP-FPM的安装和配置教程

    Linux系统下PHP-FPM的安装和配置教程

    这篇文章主要介绍了Linux系统下PHP-FPM的安装和配置教程,PHP-FMP是用于PHP的FastCGI管理器,经常被用于配置PHP和服务器软件,需要的朋友可以参考下
    2015-08-08
  • php基于curl实现的股票信息查询类实例

    php基于curl实现的股票信息查询类实例

    这篇文章主要介绍了php基于curl实现的股票信息查询类,结合完整实例形式分析了php使用curl调用API接口实现股票信息查询功能的相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • 浅谈php的TS和NTS的区别

    浅谈php的TS和NTS的区别

    这篇文章主要介绍了php的TS和NTS的区别,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论