文件包含_PHP filter伪协议利用方式

前言

本文主要讲解php filter伪协议,文件包含漏洞

php://filter伪协议是PHP中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理、rot13处理等。php://filter伪协议主要用于一体式(all-in-one)的文件函数,如readfile()、file()、file_get_contents()等,这些函数在数据流内容读取之前没有机会应用其他过滤器,而php://filter伪协议则可以在读取或写入数据时对数据进行过滤处理。

基本语法

php://filter伪协议的基本语法如下:

php://filter/<action>/resource=<待过滤的数据流>
  • <action>:表示要对数据执行的过滤操作,如读取(read)、转换编码(convert)或字符串操作(string)等。
  • <待过滤的数据流>:通常是要读取或写入的文件路径或URL。

过滤器分类

php://filter伪协议支持的过滤器主要分为以下几类:

  1. 字符串过滤器:以string开头,对数据进行字符串处理,如rot13、toupper、tolower、strip_tags等。
    • string.rot13:使用当前字母在字母表后第13个字母替换当前字母。
    • string.toupperstring.tolower:将字符串转换为大写或小写。
    • string.strip_tags:去除字符串中的HTML、XML和PHP标签。
  2. 转换过滤器:以convert开头,对数据进行编码转换,如base64编码、解码,quoted-printable编码、解码,iconv字符编码转换等。
    • convert.base64-encode/decode:对数据进行Base64编码或解码。
    • convert.quoted-printable-encode/decode:对数据进行Quoted-Printable编码或解码。
    • convert.iconv..:对字符串进行字符编码转换。
  3. 压缩过滤器:如zlib.deflate(压缩)、zlib.inflate(解压)、bzip2.compress(压缩)、bzip2.decompress(解压)等。
  4. 加密过滤器:如mcrypt.、mdecrypt.等,用于数据的加密和解密。

使用示例

以下是一些使用php://filter伪协议的例子:

  1. 读取文件并进行Base64编码

    php复制代码
    echo file_get_contents("php://filter/convert.base64-encode/resource=index.php");

    这行代码会读取index.php文件的内容,并将其进行Base64编码后输出。

  2. 写入文件并进行Base64解码

    php复制代码
    file_put_contents("php://filter/write=convert.base64-decode/resource=shell.php", base64_encode("<?php phpinfo(); ?>"));

    这行代码会将Base64编码的字符串写入shell.php文件,并在写入前进行Base64解码,最终shell.php文件中将包含原始的<?php phpinfo(); ?>代码。

注意事项

  • 在使用php://filter伪协议时,需要注意过滤器的选择和数据流的指定,以确保数据的正确处理和安全性。
  • 在某些环境下,出于安全考虑,可能会对php://filter伪协议的使用进行限制或禁用。

靶场复现

实战之前,请大佬来吃瓜

83780ab1e6a97d95bc267af7de79ae5

题1

题目ctfshow这里我们的练习题目是,ctfshow的web87,分析源码,file_put_contents函数,将$content的内容(前面附加了一段PHP代码<?php die('大佬别秀了');?>)写入到URL解码后的$file指定的文件中。这段附加的PHP代码会在文件被包含或执行时显示"大佬别秀了"

image-20240730194642998

这里,我们可以将我们的payload和这段die代码,对他进行base64编码,发现都是乱码

image-20240730143344925

如果我们在base64编码前面加几个字符呢,我们的php一句话木马就可以直接读出来了

image-20240730143420499

我们将他复制到这里,进行传参

image-20240730152454070

绕过方式参考:全编码工具推荐棱角社区的https://forum.ywhack.com/coding.php

image-20240730143454353

首先将我们的payload进行全编码

然后再使用ur编码

image-20240730154622262

对目标文件进行传参?file=【你的payload】

image-20240730143845544

此时我们去访问我们上传的php代码,

image-20240730143906268

文件列表已经列出来了

image-20240730194317387

找到源码

image-20240730194300680

题2

ctfshow的练习web116提示

image-20240730163653979

只有这一个视频

image-20240730154826267

查看源码也没发现什么东西

image-20240730163728193

那就从文件下手

image-20240730155814612

我们拿010编辑器看文件尾部,发现是一个图片结束的16进制的图片文件

image-20240730160614492

图片进制表

image-20240730164019916

这里我们查找有没有png的内容

image-20240730161239583

找到指定选项

image-20240730161516017

从这里开始一直到最后,把他复制下来

image-20240730164324127

新建一个文本文件

image-20240730160812680

粘贴

image-20240730161434441

保存png图片

image-20240730161411128

发现是源代码,检查过滤协议

image-20240730162027722

发现file和php协议没有过滤,抓包即可,php协议测试

image-20240730163302271

file协议测试

image-20240730163150045

posted @   白小雨  阅读(564)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示