php;//filter的介绍和应用

知识点

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伪协议

原文链接:https://www.cnblogs.com/1zpeasy/p/16914687.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php;//filter的介绍和应用 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • Laravel中如何轻松容易的输出完整的SQL语句

    在Laravel中,可以通过启用SQL日志来轻松地输出完整的SQL语句。具体步骤如下: 打开Laravel项目中的配置文件 config/database.php,找到 connections 部分。 找到对应的数据库连接配置(比如 mysql),将该连接配置的 log_queries 值设置为 true。代码如下: php ‘mysql’ => [ …

    PHP 2023年5月26日
    00
  • python处理PHP数组文本文件实例

    让我来为你介绍一下关于“Python处理 PHP 数组文本文件实例”的攻略。 概述 在 PHP 中,数组是非常常用的一种数据结构,我们有时候需要将 PHP 数组以文本格式存储到文件中,然后在 Python 中读取并进行处理。本篇攻略将介绍如何使用 Python 处理 PHP 数组文本文件。 将 PHP 数组存储为文本文件 我们可以使用 PHP 中的 json…

    PHP 2023年5月26日
    00
  • 微信有哪些好用的小程序?19款好用的微信小程序

    微信有哪些好用的小程序? 微信小程序是在微信中使用的轻量级应用程序,拥有和原生应用类似的使用体验,具有启动快、不需要安装、占用空间小的特点。 以下是19款好用的微信小程序: 1. 微信运动 微信运动是一款记录步数、计算运动距离和消耗卡路里的小程序,可以与微信好友一起比赛步数,增强锻炼的趣味性。 2. 青柠茶馆·图书馆 青柠茶馆·图书馆是一个在线的读书社区小程…

    PHP 2023年5月30日
    00
  • PHP实现linux命令tail -f

    我来详细讲解一下如何用PHP实现Linux命令tail -f的攻略。具体内容如下: 什么是tail -f命令 Linux系统的tail命令可以查看文件的末尾几行或者追踪一个正在增长的文件。其中,tail -f命令会不断监控文件,将文件的新增内容实时输出到屏幕上。 我们的目标是通过PHP实现这一功能。 实现方法 在PHP中,读取文件时需要注意到文件锁、缓存等问…

    PHP 2023年5月26日
    00
  • PHP三层结构(下) PHP实现AOP第1/2页

    关于“PHP三层结构(下) PHP实现AOP第1/2页”的攻略,我可以给出如下的详细讲解: PHP三层结构简介 在Web应用开发中,三层结构通常是指数据层、业务逻辑层和表示层。其中,数据层用于处理数据的读写操作,业务逻辑层用于实现业务流程和逻辑,表示层则负责呈现给用户的视图和界面。PHP作为一门流行的Web编程语言,其应用架构通常也采用三层结构。 在实际开发…

    PHP 2023年5月27日
    00
  • Thinkphp微信公众号支付接口

    请看下面的”ThinkPHP微信公众号支付接口完整攻略”: 1. 前言 微信公众号支付,是指用户在微信公众号中完成整个支付的过程,微信公众号支付的好处是用户不需要离开微信的环境就可以完成支付,使用户跨入购买行动的门槛更低,也使商家更方便地与用户进行交互。 本攻略主要介绍如何在 ThinkPHP 框架中,快速使用微信公众号支付接口。 2. 准备工作 首先,我们…

    PHP 2023年5月23日
    00
  • php实现多维数组中每个单元值(数字)翻倍的方法

    要实现多维数组中的每个单元值(数字)翻倍,可以使用PHP中的循环结构和数组操作函数来完成。以下是实现的完整攻略。 步骤一:定义一个多维数组 首先,需要定义一个多维数组,例如: $array = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) ); 上面的代码定义了一个三行三列的二维数组,每个元素都是…

    PHP 2023年5月26日
    00
  • PHP防注入安全代码

    关于“PHP防注入安全代码”的完整攻略,可以按照以下步骤进行: 1. 了解注入攻击的基本原理 注入攻击的原理是将恶意代码嵌入到用户输入的数据中,通过执行这些代码来实现攻击的目的。比如利用SQL注入攻击,攻击者可以在表单中输入一些恶意的SQL语句,从而获取敏感数据或者篡改数据。 2. 使用PDO或者mysqli扩展连接数据库 首先,我们要使用PDO或者mysq…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部