php://filter协议在任意文件读取漏洞中的利用(学习总结)

本文介绍了PHP的php://协议,用于访问各种I/O流,并详细阐述了php://filter如何作为元器封装,用于对PHP的IO流进行处理。通过示例展示了如何使用不同的过滤器,如base64编码、解码,字符串转换等,以及在实际问题中如何利用这些过滤器解决文件读取漏洞。最后,提供了一个简单的PHP文件读取漏洞的修复示例,演示了如何通过过滤器获取原本被注释隐藏的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、php://协议 

官网解释为:

        php:// — Accessing various I/O streams

PHP provides a number of miscellaneous I/O streams that allow access to PHP's own input and output streams, the standard input, output and error file descriptors, in-memory and disk-backed temporary file streams, and filters that can manipulate other file resources as they are read from and written to

个人理解为php在访问或打开文件时为建立一个IO流的方式,而php://协议则可以访问这个IO流,

二、php://filter

        php://fiter 中文叫 元器封装,咱也不知道为什么这么翻译,目前我的理解是可以通过这个玩意对上面提到的php IO流进行处理,及现在可以对php的 IO流进行一定操作。

        过滤器:及通过php://filter 对php 的IO流进行的具体操作

              格式为:php://filter / [read|write =] 过滤器 / resource= 目标文件 

        解释:对目标文件的IO流的输出流(read)或输入流(write)进行 过滤器的操作 处理 

       过滤器的分类(及常见过滤器):

        string filter(字符过滤器)
                string.rot13  (对字符串执行 ROT13 转换)
                        例:php://filter/string.rot13/resource=flag.php
                string.toupper (转大写)
                        例:php://filter/string.toupper/resource=flag.php
                string.tolower (转小写)
                string.strip_tags (去除 HTML 和 PHP 标记,尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果)
                        例:php://filter/string.strip_tags/resource=flag.php
        conversion filter (转换过滤器)
                convert.base64-encode & convert.base64-decode (base64加密 base64解密)
                        例:php://filter/convert.base64-encode/resource=flag.php
                convert.quoted-printable-encode & convert.quoted-printable-decode(在字符串后加=0A,及恢复)
        compression filter(压缩过滤)
                zlib.deflate & zlib.inflate(压缩 解压)
                        例:php://filter/zlib.deflate/resource=flag.php                                                       php://filter/zlib.inflate/resource=flag.php
                bzip2.compress & bzip2.decompress(zip 压缩 解压)
        encryption filter(加密过滤器) 

三、练习: 

 简单的demo

#index.php 文件
<?php
    include($_GET[file]);      //一个简单的任意文件读取漏洞
?>


#falg.php 文件
<?php
    echo "hello world";
    # flag{test_filter}
?>

 直接传入flag.php 文件名 (可见读不到flag信息,因为被被 # 注释了 在 web 服务器会过滤掉)

 使用php://filter/read=convert.base64-encode/resource=flag.php (使用base64对flag.php输出流进行编码)

 对信息进行base64解码得到flag信息

<think>好的,我现在需要回答用户关于PHP协议的问题,特别是要包括ogg、php、zlib、phar这些类型。首先,我需要回忆PHP支持的伪协议,并参考用户提供的引用内容来确保准确性。 用户提到的引用里有几个关键点:php协议php://input、php://filter、data://,还有zlib://和phar://。另外,用户还问到了ogg,这可能是指ogg://,但我不太确定,需要确认PHP是否支持这个协议。 首先,根据引用[2],PHP协议PHP自带的特殊协议机制,可以用于读写操作,不需要文件系统或网络协议。引用[3]提到了一些危险协议php://input,需要禁用。引用[4]详细说明了php://filter的读写用法,以及zlib://、bzip2://等压缩流协议。 现在要列出用户要求的协议:ogg、php、zlib、phar,可能还有其他相关的。我需要逐个检查每个协议是否存在及其用途。 PHP官方文档中的协议包括:php://, file://, http://, ftp://, data://, glob://, phar://, ssh2://, rar://, ogg://, expect://等。其中,ogg://可能用于处理音频流,但实际使用较少。而phar://用于访问PHAR归档文件,zlib://用于处理压缩流。 接下来,需要为每个协议写说明,包括基本用途、语法示例和注意事项。例如,php://input用于读取原始POST数据,php://filter用于过滤处理流,zlib://用于压缩流,phar://访问PHAR文件,ogg://可能和音频有关,但实际应用可能有限,或者用户可能混淆了其他协议。 需要确保每个协议的信息准确,并引用提供的资料。例如,引用[4]提到了zlib://的用法,引用[3]提到php://input的危险性。对于phar://,可能涉及反序列化漏洞,如引用[1]中的例子。还要注意安全建议,如禁用危险协议。 可能用户提到的ogg协议实际是ogg://,但PHP文档中是否有这个协议呢?需要核实。根据PHP文档,ogg://可能属于某些扩展,比如通过封装协议处理Ogg Vorbis音频,但一般情况下可能不常用,或者用户可能误写。需要确认是否存在,如果不存在,可能需要指出这一点。 总结,我需要整理出PHP协议列表,包括用户提到的几个,并给出每个的说明、语法示例和相关安全注意事项,同时引用提供的资料中的内容。例如,phar://在引用[1]中被用来执行代码,说明其潜在风险。此外,确保使用正确的LaTeX格式,如变量用$...$,独立公式用$$...$$,但这个问题中可能较少涉及数学公式,所以重点放在协议列表和说明上。 最后,生成相关问题,如协议的区别、安全防护方法、实际应用例子等。需要确保问题与内容相关,并帮助用户深入理解。</think>### PHP协议列表及说明 PHP协议PHP内置的特殊协议,允许通过流式操作访问文件、压缩包、输入输出等资源[^2]。以下是常见伪协议及其说明: --- #### 1. **`php://`协议** - **用途**:处理输入/输出流、过滤数据或访问临时文件。 - **常见类型**: - **`php://input`**:读取原始POST数据,可能被用于执行恶意代码[^3]。 示例:`file_get_contents('php://input')` - **`php://filter`**:对资源进行过滤处理(如Base64编码)。 读文件示例: ```php file_get_contents('php://filter/read=convert.base64-encode/resource=config.php'); ``` - **`php://temp`** 或 **`php://memory`**:临时存储数据。 --- #### 2. **`phar://`协议** - **用途**:访问PHAR(PHP归档文件)内的内容,常用于反序列化攻击[^1]。 - **示例**: ```php include('phar://example.phar/internal/file.php'); ``` - **风险**:可能触发PHAR反序列化漏洞[^3]。 --- #### 3. **`zlib://`协议** - **用途**:读取或写入Zlib压缩流(`.gz`文件)。 - **示例**: ```php file_get_contents('compress.zlib:///path/to/file.gz'); ``` - **关联协议**:`bzip2://`(Bzip2压缩)、`zip://`(ZIP压缩)[^4]。 --- #### 4. **`ogg://`协议** - **用途**:用于处理Ogg Vorbis音频流,需配合音频扩展使用(如`pecl/oggvorbis`)。 - **说明**:实际使用较少,可能需特定扩展支持。 --- #### 5. **`data://`协议** - **用途**:直接嵌入数据(如Base64编码内容)。 - **示例**: ```php include('data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+'); ``` - **风险**:可能用于执行任意代码。 --- ### 安全建议 1. **禁用危险协议**:在`php.ini`中设置`allow_url_include=Off`,禁用`php://input`和`data://`。 2. **过滤输入**:避免动态拼接协议路径,如`include($_GET['file'])`。 3. **更新PHP版本**:修复已知的协议相关漏洞。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值