当前位置: 首页 > article >正文

【CTF】文件包含漏洞-php://filter 流包装器 【详】

php://filter 流包装器

php://filter 是 PHP 中的一种流包装器,允许开发者对文件、数据流或资源在读取或写入时进行特定的过滤处理通过 php://filter,你可以在文件被读取或输出之前,对其内容进行某些操作,例如编码、解码、压缩等。

它在一些特定场景下非常有用,比如对文件内容进行处理,而不是直接输出文件的原始内容。在CTF(Capture The Flag)竞赛中,攻击者可以利用 php://filter 包装器绕过某些安全限制,从而获取敏感文件的内容。

php://filter 的语法结构

php://filter/<操作>/resource=<目标文件>
  • <操作>:对数据进行的操作。常见的操作包括编码、解码、字符串转换等。
  • <目标文件>:指定的文件或数据流资源。
示例

假设有一个文件 test.txt,内容为 Hello, World!,我们可以通过 php://filter 以多种方式对其进行读取和操作。

  1. 读取文件的原始内容

    file_get_contents('php://filter/resource=test.txt');
    

    这与直接读取文件内容相同,输出为 Hello, World!

  2. 读取文件并将内容进行 Base64 编码

    file_get_contents('php://filter/read=convert.base64-encode/resource=test.txt');
    

    输出为文件内容经过 Base64 编码后的结果,例如:SGVsbG8sIFdvcmxkIQ==

  3. 读取文件并将内容进行 Base64 解码(假设内容已被编码)

    file_get_contents('php://filter/read=convert.base64-decode/resource=test.txt');
    

    如果 test.txt 的内容是 Base64 编码后的数据,这样就可以解码成原始文本。

常见的 php://filter 操作

  • convert.base64-encode:将读取的数据编码为 Base64 格式。
  • convert.base64-decode:将读取的数据从 Base64 格式解码。
  • string.rot13:将读取的数据通过 ROT13 进行加密或解密(是一种字母替换加密)。
  • convert.quoted-printable-encode:将数据编码为 quoted-printable 格式。
  • convert.quoted-printable-decode:将数据从 quoted-printable 格式解码。
  • convert.iconv.*:转换文件字符编码。
  • resource=<filename>:指定要操作的文件或数据流。

php://filter 的两种主要操作方向

  1. 读取时的过滤 (read):在读取文件时,应用指定的过滤器。

    php://filter/read=convert.base64-encode/resource=<filename>
    

    这会将读取到的文件内容进行 Base64 编码。

  2. 写入时的过滤 (write):在写入文件时,应用指定的过滤器。

    例如:

    php://filter/write=convert.base64-encode/resource=<filename>
    

    这会将写入的数据先进行Base64编码后再写入目标文件。

利用 php://filter 进行文件包含漏洞攻击

1. 绕过文件包含和读取源码

在某些文件包含漏洞(如 LFI:本地文件包含)中,攻击者无法直接读取或查看文件的源码,因为 PHP 文件通常会在服务器端执行而不直接输出原始内容。但攻击者可以使用 php://filter 来获取文件的原始源码内容并以可读形式输出。

示例攻击:

假设在CTF挑战中,有一个存在本地文件包含漏洞的代码片段:

<?php
include($_GET['page']);
?>

攻击者可以通过访问 php://filter 来读取文件的源码并进行Base64编码输出:

http://example.com/index.php?page=php://filter/read=convert.base64-encode/resource=flag.php

这里,攻击者通过 php://filter 包装器将 flag.php 文件的内容进行Base64编码并包含到页面中。这样可以避免直接执行PHP代码,而是将源码以Base64格式输出。攻击者拿到这个Base64编码的内容后,可以解码成原始的PHP代码。

例如,假设 flag.php 的内容是:

<?php
$flag = "CTF{secret_flag}";
?>

经过Base64编码后,输出如下:

PD9waHAgCiAkZmxhZyA9ICJDVEYgezNlY3JldF9mbGFnIjsKPz4=

攻击者将此字符串解码后,可以看到原始的PHP代码,并获取 flag 的值。

2. 读取其他敏感文件

php://filter 不仅可以用来读取PHP源码,还可以读取系统中的其他敏感文件。例如,读取 /etc/passwd 文件中的用户信息:

http://example.com/index.php?page=php://filter/read=convert.base64-encode/resource=/etc/passwd

通过这种方式,攻击者可以轻松绕过文件包含漏洞中对PHP文件的限制,读取任意系统文件并获取敏感信息。

CTF中 php://filter 的常见利用场景

在CTF比赛中,php://filter 常用于绕过源代码隐藏机制或通过文件包含漏洞获取敏感文件。以下是一些常见场景:

  1. 读取源代码:当服务器执行PHP代码而不显示源代码时,攻击者可以通过 php://filter 包装器来查看PHP文件的原始代码。

  2. 绕过过滤限制:某些挑战可能会限制直接访问某些文件(如 flag.phpconfig.php),但攻击者可以使用 php://filter 进行编码绕过,并获取文件内容。

  3. 信息泄露:通过 php://filter,攻击者可以访问包含系统信息的文件(如 /etc/passwd),从而获取用户账户信息。

防御措施

为了防止 php://filter 被恶意利用,开发者可以采取以下防御措施:

  1. 禁用 php:// 流包装器

    php.ini 中禁用远程文件包含和流包装器(如 allow_url_include=Offallow_url_fopen=Off),防止使用 php:// 相关功能。
  2. 严格验证用户输入

    任何允许用户输入文件路径的应用都应对路径进行严格验证。应使用白名单机制来控制哪些文件可以被访问。
  3. 最小化文件访问权限

    确保Web服务器对敏感文件(如 /etc/passwd、配置文件)设置了最小化的权限,只有必要的进程和用户才能访问这些文件。
  4. 限制文件包含函数

    尽量避免使用 include()require() 等文件包含函数来直接加载用户提供的文件路径。

总结

php://filter 是一个功能强大的PHP流包装器,允许对文件进行编码或解码操作。在CTF比赛中,它常被用于绕过文件包含漏洞的限制,获取敏感文件内容。尽管它有许多合法用途,但如果处理不当,也容易被恶意利用,导致严重的安全问题。因此,开发者应对输入进行严格过滤,并采取适当的安全措施,防止该漏洞被利用。


http://www.kler.cn/news/367443.html

相关文章:

  • VIVO售后真好:屏幕绿线,4年免费换屏
  • 【LeetCode】11.盛最多水的容器
  • android openGL ES详解——缓冲区VBO/VAO/EBO/FBO/离屏渲染
  • 量子机器学习:颠覆性的前沿技术
  • Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口
  • csa练习1
  • acwing排列数字
  • 一个和v-html功能一样且能防止xss攻击的插件
  • Java多线程详解②(全程干货!!!)Thread Runnable
  • 本地docker-compose仓库搭建以及推送docker镜像到仓库
  • 音视频入门基础:AAC专题(11)——AudioSpecificConfig简介
  • 【ChatGPT】在多轮对话中引导 ChatGPT 保持一致性
  • 【Qt6聊天室项目】 主界面功能实现
  • 基于SpringBoot的酒店管理系统的设计与实现
  • echarts5.2.2实现 水球图表
  • pdf表格读取和筛选
  • Git process for submit and download
  • 传输层TCP
  • Flutter鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题
  • 使用无线方式连接Android设备进行调试的两种方法
  • 基于Spring boot+Vue 网吧管理系统(源码+LW+部署讲解+数据库+ppt)
  • Rancher2.6管理k8s1.23
  • SQL实战训练之,力扣:1831. 每天的最大交易
  • C++网络编程之C/S模型
  • 服务器数据恢复—EXT3文件系统下邮件数据被误删的数据恢复案例
  • [网络协议篇] ICMP协议