php;//filter的介绍和应用

yizhihongxing

知识点

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日

相关文章

  • 为Nginx和Apache配置多版本PHP、切割多个conf文件

    有时候我们的项目不可能都是同一个PHP版本,需要每个项目都配置不同版本的PHP,宝塔和PHPStudy就是通过以下配置实现的: Nginx 切割conf(非选) 在nginx.conf添加 include vhosts/*.conf; 这样Nginx会自动引入当前目录->vhosts目录下的所有*.conf文件,方便每个项目单独管理Nginx配置文件 …

    PHP 2023年4月18日
    00
  • 盘点Linux平台下的十佳IDE

    盘点Linux平台下的十佳IDE 在Linux平台下,IDE是程序员必不可少的工具之一。但是,对于初学者来说,选择一款适合自己的IDE是一项颇具挑战性的工作。本文将盘点Linux平台下的十佳IDE,供程序员参考选择。 1. Eclipse Eclipse 是一套开放源代码的、可扩展的 IDE。在 Java 开发方面,Eclipse 无疑是最受欢迎的 IDE …

    PHP 2023年5月27日
    00
  • PHP简单字符串过滤方法示例

    我来为你讲解「PHP简单字符串过滤方法示例」的完整攻略。 1. 什么是字符串过滤 字符串过滤是指在接收用户输入数据时,对输入的数据进行一些安全上的处理,以保证数据的安全。例如防止SQL注入、XSS攻击等。 2. PHP字符串过滤方法 在PHP中,有很多的字符串过滤方法。下面介绍几个常用的字符串过滤方法。 2.1 htmlspecialchars htmlsp…

    PHP 2023年5月26日
    00
  • PHP里的$_GET数组介绍

    下面是关于“PHP里的$_GET数组介绍”的完整攻略。 1. 什么是$_GET数组 $_GET 是 PHP 中的一个超级全局变量,用于获取 URL 中所包含的参数,以键/值对的形式存储在数组中。在 URL 中通过 ? 符号和键值对传递参数,传递多个参数时用 & 分隔。 2. 如何使用$_GET数组 可以通过 $_GET 数组获取 URL 中的参数。例…

    PHP 2023年5月26日
    00
  • PHP向浏览器输出内容的4个函数总结

    下面我详细讲解“PHP向浏览器输出内容的4个函数总结”的完整攻略。 1. 什么是向浏览器输出内容? 向浏览器输出内容指的是,当PHP脚本被执行时,将产生的结果输出给Web浏览器,以便在浏览器中显示。 2. PHP向浏览器输出内容的4个函数 常用的PHP向浏览器输出内容的函数有4个,分别是:echo,print,print_r和var_dump。 2.1 ec…

    PHP 2023年5月26日
    00
  • php文件上传及下载附带显示文件及目录功能

    PHP文件上传及下载附带显示文件及目录功能是web开发中常见的一个功能,下面我将结合相关代码,详细讲解这个功能的完成过程: 一、文件上传 文件上传是指将本地电脑上的文件上传到服务器端,以下是实现文件上传的步骤: 1.创建上传表单 在HTML中创建一个form表单,其中enctype属性设置为multipart/form-data,表示这是一个带文件上传的表单…

    PHP 2023年5月26日
    00
  • php5.2的curl-bug 服务器被php进程卡死问题排查

    下面我将详细讲解“php5.2的curl-bug 服务器被php进程卡死问题排查”的完整攻略。 问题背景 当使用php5.2版本中的curl库进行网络请求时,有可能会出现curl-bug,导致php进程卡死,进而导致服务器崩溃。这是由于curl库在处理某些特殊情况时出现了死锁现象,从而导致进程卡死。 排查过程 要想排查此问题,首先需要了解问题出现的原因。通常…

    PHP 2023年5月27日
    00
  • PHP超全局变量实现原理及代码解析

    PHP超全局变量实现原理及代码解析 1. 什么是超全局变量 PHP中的超全局变量是指可以在程序的任何位置都可以调用的全局变量,且不需要使用global关键字即可在函数内部进行引用。 2. PHP超全局变量的实现原理 PHP实现超全局变量的方法是使用一个名为$GLOBALS的全局数组来存储所有的超全局变量。$GLOBALS数组的每个元素都是一个超全局变量,其下…

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