首页 > 编程语言 >文件包含_PHP filter伪协议利用方式

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

时间:2024-09-18 15:13:45浏览次数:7  
标签:编码 php 包含 协议 filter 文件 file PHP

前言

本文主要讲解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

标签:编码,php,包含,协议,filter,文件,file,PHP
From: https://www.cnblogs.com/xiaoyus/p/18418566

相关文章

  • zblog 404.php 怎么写,zblogphp主题错误之模板选择
    在Z-BlogPHP中,如果你想要自定义404页面(即当用户访问不存在的页面时显示的页面),你可以创建一个 404.php 文件。下面是创建一个简单的404页面的基本步骤和示例代码:创建404.php文件创建文件:在你的主题目录中创建一个名为 404.php 的文件。添加基本HTML结构:在文件中......
  • zblogphp错误之“未知方法或属性 (set_error_handler)
    当你在Z-BlogPHP中遇到“未知方法或属性(set_error_handler)”的错误时,这通常意味着PHP版本不支持 set_error_handler 函数。该函数在PHP5.0及更高版本中可用。如果你的PHP版本低于5.0,你可能会遇到这个问题。解决方案检查PHP版本确认当前PHP版本是否支持......
  • 图形学系列教程,带你从零开始入门图形学(包含配套代码)—— 透明度和深度
    图形学系列专栏序章初探图形编程第1章你的第一个三角形第2章变换顶点变换视图矩阵&帧速率第3章纹理映射第4章透明度和深度第5章裁剪区域和模板缓冲区第6章场景图第7章场景管理第8章索引缓冲区第9章骨骼动画第10章后处理第11章实时光照(一)第12章实时光照(二)......
  • zblog水印插件上传图片提示getimagesize(tem/phpOMxjlk)错误
    当在Z-Blog中使用水印插件上传图片时出现 getimagesize(tem/phpOMxjlk) 错误,这通常意味着 getimagesize 函数在处理图片时遇到了问题。这个错误可能是由以下几个原因引起的:1.图片文件不存在或路径错误问题描述:getimagesize 函数尝试访问一个不存在的文件或路径错误。......
  • 解决ZBLOG PHP 程序无法登录后台账户问题
    如果您的Z-BlogPHP程序无法登录后台账户,那么您可以按照以下步骤来排查和解决问题:1.检查用户名和密码问题描述:输入的用户名或密码不正确。解决方法:确认输入的用户名和密码是否正确。尝试重置密码,如果忘记了密码。2.检查数据库问题描述:数据库中的用户信息可能被篡......
  • zblog php版修改默认后台错误页后登录后台跳转错误
    如果您在修改了Z-BlogPHP版本的默认后台错误页之后遇到了登录后台时跳转错误的问题,这可能是因为修改操作影响了登录流程或者错误处理机制。以下是一些可能的原因及解决方法:1.检查错误页修改问题描述:修改错误页后导致跳转逻辑出错。解决方法:回滚错误页的修改,使用备份的原......
  • ZBlogPHP提示非法访问,验证码不显示,验证码报错
    针对您在ZBlogPHP升级后遇到的问题,以下是解决步骤:定位文件位置使用FTP客户端或者通过您的虚拟主机控制面板中的文件管理器找到 zb_users 目录。打开 c_option.php 文件。修改配置选项在 c_option.php 文件中找到如下两行配置:php 'ZC_LOGIN_CSRFCHECK......
  • ZBlogPHP密码重置(Z-BlogPHP 密码找回工具)
    Z-BlogPHP密码找回工具:<?phprequire'./zb_system/function/c_system_base.php';//$zbp->Load();if(isset($_GET['uid'])&&isset($_GET['resetpw'])){$id=(int)$_GET['uid'];$m=$zbp->GetMemb......
  • [CTFshow] 文件包含 78~88,116~117
    web78if(isset($_GET['file'])){$file=$_GET['file'];include($file);}else{highlight_file(__FILE__);}php伪协议,data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码?file=data://text/plain,<?=system('ls')?>?file=dat......
  • 手写Promise实现(不包含静态方法)
    手写Promise实现#基本promise不包含all等方法定义状态常量constPENDING='pending';constFULFILLED='fulfilled';constREJECTED='rejected';封装函数,将同步任务放入微任务队列functionrunsynctask(callback){returnqueueMicrotask(callback);}......