翼度科技»论坛 编程开发 PHP 查看内容

php;//filter的介绍和应用

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
知识点

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        可选。规定要写入文件的数据。可以是字符串、数组或数据流。
  实例介绍

  1. eee.php
  2. <?php
  3. $content = '<?php exit; ?>';
  4. $content .= $_POST['txt'];
  5. file_put_contents($_POST['filename'], $content);
  6. ?>
复制代码
当用户通过POST方式提交一个数据时,会和exit拼接,从而造成提交的数据不能被执行。
  1. txt=aPD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=convert.base64-decode/resource=b.png
复制代码
向b.png写入,解码后的$content拼接上txt的内容
base64编码中只包含64个可打印字符,当PHP遇到不可解码的字符时,会选择性的跳过,这个时候base64就相当于以下的过程:
  1. <?php
  2. $_GET['txt'] = preg_replace('|[^a-z0-9A-Z+/]|s', '', $_GET['txt']);
  3. base64_decode($_GET['txt']);
复制代码
phae xita 解码失败


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


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

来源:https://www.cnblogs.com/1zpeasy/p/16914687.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具