别只记一个base64了!手把手教你用PHP filter伪协议绕过CTF题中的字符过滤(附完整payload)

CTFPHP安全web安全filter伪协议
于 2026-05-31 11:58:56 修改
·本内容遵循CC 4.0 BY-SA版权协议

PHP Filter伪协议高阶玩法:从编码转换到WAF绕过实战

在CTF比赛中,PHP的filter伪协议常被用来绕过各种字符限制和WAF规则。大多数选手只熟悉基础的convert.base64-encode用法,但实际上filter协议的功能远不止于此。本文将深入探讨如何利用filter协议的各种过滤器组合实现高级绕过技巧。

1. Filter伪协议基础回顾

PHP的filter伪协议提供了多种数据过滤和转换功能,主要分为以下几类:

  • 字符串过滤器:如string.rot13string.toupper
  • 转换过滤器:如convert.base64-encodeconvert.quoted-printable-encode
  • 编码转换过滤器:如convert.iconv.*
  • 压缩过滤器:如zlib.deflate
  • 加密过滤器:如mcrypt.*

基础用法示例:

PHP
// 读取文件并base64编码
file_get_contents('php://filter/read=convert.base64-encode/resource=flag.php');
 
// 写入时进行rot13编码
file_put_contents('php://filter/write=string.rot13/resource=output.txt', 'secret');

2. 过滤器链的威力

filter协议真正的强大之处在于可以串联多个过滤器,形成处理流水线。过滤器按从左到右的顺序依次应用。

典型过滤器链结构:

TEXT
php://filter/[read=|write=]filter1|filter2|filter3/resource=filename

关键技巧

  • 每个过滤器用竖线|分隔
  • 可以混合不同类型的过滤器
  • 某些过滤器组合会产生意想不到的效果

3. 编码转换的高级应用

convert.iconv过滤器可以实现不同字符编码间的转换,这在绕过字符限制时非常有用。

常用编码转换组合:

转换方向 效果描述 典型应用场景
UTF-8 → UTF-16 将ASCII字符转换为双字节 生成非常规字符
UTF-16 → UTF-8 将双字节转换回单字节 还原原始数据
UTF-8 → UCS-2 类似UTF-16但略有不同 特定场景下的绕过

示例代码:

PHP
// 将字符串从UTF-8转换为UTF-16BE
$encoded = file_get_contents('php://filter/read=convert.iconv.utf-8.utf-16be/resource=data:,hello');

4. 实战:绕过CTF中的字符限制

让我们通过一个模拟CTF题目来演示如何组合使用这些技术。假设题目有以下限制:

  1. 禁止使用特定关键词(如"flag")
  2. 限制文件写入内容
  3. 对输入进行严格过滤

绕过步骤

  1. 准备payload:
PHP
// 原始payload
$payload = 'system("cat /flag");';
 
// 转换为base64
$base64 = base64_encode($payload);
 
// 再进行UTF-8到UTF-16的转换
$encoded = iconv('UTF-8', 'UTF-16', $base64);
  1. 构建过滤器链:
TEXT
php://filter/
convert.quoted-printable-decode|
convert.iconv.utf-16.utf-8|
convert.base64-decode
/resource=payload.txt
  1. 执行流程解析:
  • 首先quoted-printable-decode处理特殊编码
  • 然后iconv将UTF-16转换回UTF-8
  • 最后base64-decode还原原始PHP代码

5. 防御与检测建议

虽然filter协议功能强大,但作为防御方也需要了解如何检测和防范这类攻击:

防御措施

  • 严格限制文件操作函数的参数
  • 禁用不必要的协议包装器
  • 对用户输入进行多重验证

检测方法

PHP
// 检测是否包含filter伪协议
if (preg_match('/php:\/\/filter/i', $input)) {
die('可疑输入 detected');
}

在实际开发中,应当遵循最小权限原则,只允许必要的协议和操作。

CTF 实战:巧用 PHP 伪协议绕过文件包含限制
本文详解CTF竞赛中利用PHP伪协议(特别是php://filter绕过本地文件包含(LFI)限制的技术原理与实战流程。重点剖析base64编码过滤器的作用机制、Payload构造要点(含路径拼接逻辑与规避后缀干扰)、Base64响应提取与解码步骤,并补充路径遍历、过滤器链等高级绕过技巧,强调其在读取flag.php等敏感文件源码中的核心应用。
791
攻防世界fileinclude通关秘籍:如何用PHP伪协议绕过文件包含漏洞
本文深入剖析CTF中fileinclude题目的核心利用技术,聚焦PHP伪协议(尤其是php://filter)在绕过路径限制、后缀校验和目录遍历防护中的实战应用。详细讲解如何通过Base64编码读取PHP源码获取flag,涵盖Payload构造、Burp Suite协同调试、多过滤器组合及常见坑点规避,并强调白名单校验、disable_functions配置等关键防御措施。
999
CTF实战:如何绕过正则过滤利用PHP伪协议读取flag.php(NewStarCTF2023真题解析)
本文以NewStarCTF2023真题为例,详解如何利用PHP convert.iconv伪协议进行编码转换,绕过匹配'base'/'rot'的大小写不敏感正则过滤,实现文件包含并读取flag.php。重点涵盖convert.iconv编码组合、多重filter链构造、路径遍历协同等实战技巧,并给出白名单校验、禁用危险协议等防御建议。
QuietPulse
704
filter和data伪协议
本文围绕CTF比赛中的题目,介绍了PHP伪协议的应用。通过php://filter协议访问本地文件,利用base64编码查看文件内容;还使用data伪协议写入内容,结合代码审计和反序列化程序,构造payload获取flag,展示了PHP伪协议在解决CTF问题中的重要作用。
蹦蹦炸弹芜湖
1489
手把手教你用PHP伪协议绕过过滤,搞定攻防世界file_include靶场
本文深入解析PHP伪协议(尤其是php://filter)在文件包含漏洞利用中的高阶应用,重点介绍通过字符集转换(如UTF-8→UTF-7)绕过关键词过滤的实战技巧,适用于CTF中LFI场景下的源码读取与flag提取。内容涵盖payload构造、多重过滤器串联、编码探测及解码处理,并简述服务端防御最佳实践。
weixin_30851867
556
新手必看:用PHP伪协议绕过攻防世界file_include目的过滤附完整payload
本文详解如何利用PHP伪协议(特别是php://filter绕过CTF平台'攻防世界'中file_include题目的关键词黑名单过滤。重点介绍UTF-8到UTF-7等编码转换器在LFI漏洞利用中的实战应用,通过非base64编码方式读取flag.php源码并解码获取flag,同时涵盖常见过滤器限制分析与payload构造逻辑。
weixin_30448603
397
从‘Include’到‘Get Flag’:手把手教你用php://filter绕过CTF文件包含限制
本文详解如何利用php://filter伪协议绕过CTF中常见的文件包含漏洞防护机制。重点涵盖base64编码读取PHP源码的原理与构造方法,iconv等多编码组合技巧,以及实战中从参数识别、payload构造、解码分析到获取flag的完整链路。同时简述防御措施及常见错误排查,强调对流过滤器原理的理解而非单纯套用payload
weixin_30376509
268
新手必看:如何用PHP伪协议绕过文件包含漏洞获取CTF Flag(实战步骤)
本文详解PHP文件包含漏洞(LFI)原理及php://filter伪协议的实战利用方法,重点介绍如何通过Base64编码绕过代码执行、读取flag.php源码并解码获取CTF Flag,涵盖漏洞验证、payload构造、请求注入与高级绕过技巧如exit拦截规避和路径截断。
weixin_30329623
370
NewStarCTF2023week2-include 0。0:绕过过滤伪协议实战解析
本文深入剖析CTFPHP文件包含漏洞的利用技术,重点讲解如何绕过常见过滤机制,涵盖编码转换(如SJIS/UTF-16)、多重filter链式处理、长度限制突破等方法,并系统解析php://filter及其他伪协议(如data://、phar://)在信息读取与代码执行中的高级应用,结合NewStarCTF2023真实题目演示完整Exploit构造与调试过程。
499
从‘Include’到GetShell:手把手教你用php://filter绕过CTF文件包含限制(实战payload
本文深入解析php://filter协议在Web安全中的高级利用,重点介绍如何通过Base64编码、iconv字符集转换及多级过滤器串联等技术绕过LFI/RFI的过滤限制,实现从敏感文件读取到远程代码执行(RCE)的完整攻击链,并涵盖日志注入、临时文件利用等实战手法,同时提出禁用危险协议、路径白名单等有效防御措施。
weixin_30381317
401
CTFshow文件包含实战:如何用data协议绕过过滤拿到flag(附完整payload
本文深入解析CTFshow web88中利用data://协议绕过等号过滤获取flag的技术细节,涵盖data协议原理、Base64编码去等号处理、Payload构造要点及解码完整性保障;同时介绍php://filter、expect://等变种协议利用方式,并给出服务端禁用危险协议、open_basedir限制等防御措施。
525
Web安全实战:如何利用PHP伪协议绕过FileInclude限制获取Flag(详细Payload
本文详解如何利用PHP filter://伪协议(特别是php://filter/base64-decode)绕过LFI中的后缀拼接、目录限制等防护机制,实现源码读取与Flag提取。涵盖信息收集、白盒分析、Payload构造原理、base64解码流程及过滤器链进阶技巧,并强调PHP配置(allow_url_include/allow_url_fopen)对协议可用性的影响。
161
CTF实战:如何用PHP伪协议绕过SWPUCTF 2022新生赛的ez_ez_php(revenge)题目
本文以SWPUCTF 2022新生赛ez_ez_php(revenge)题为例,详解如何利用php://filter伪协议绕过'file'参数前缀检测,通过多层Base64编码构造合法Payload读取flag.php;涵盖PHP伪协议原理、payload设计、常见绕过手法(如编码嵌套、大小写变换)及对应防护措施。
于欣烈
195
CTF 必学:PHP 伪协议文件包含与代码执行
本文详解CTF竞赛中常用的PHP伪协议及其利用方式,包括file://(绕过双off限制读取本地文件)、php://filterBase64编码/解码与strip_tags绕过获取源码)、php://input(POST数据代码执行)、zip:///bzip2:///zlib://(压缩包内文件包含)及data://(双on条件下直接执行任意代码)。重点覆盖各协议触发条件、典型Payload构造及实战利用场景。
向往着的青绿色
769
一天一道ctf 第16天(data伪协议,异或sql注入)
本文介绍了两道CTF比赛题目,一题涉及PHP反序列化,利用filter伪协议和data伪协议读取文件解密flag。另一题是SQL注入,通过异或判断绕过过滤,利用payload获取flag。文章包含了解题过程和部分Python脚本。
scrawman
2292
CTF新手必看:如何用PHP伪协议轻松拿下SWPUCTF文件包含Hackbar实战截图)
本文聚焦CTF中常见的PHP文件包含漏洞,深入解析php://filter伪协议在LFI利用中的核心作用,结合Hackbar实操演示如何构造base64编码payload读取敏感文件(如flag.php)。涵盖路径遍历、日志污染、Session包含等进阶技巧,并强调绕过函数禁用与简单过滤的关键方法,适用于Web安全初学者快速掌握实战解题逻辑。
米西西
287
WEB-2025 SWPU-NSSCTF部分题解
本文解析了SWPU-NSSCTF比赛中多道Web题目,涵盖无字母数字RCE、PHP伪协议利用、命令注入绕过等核心技术,涉及异或取反构造payloadphp://filter读取源码、base64解码获取flag等内容,适合CTF初学者学习参考。
2401_87876265
1924
攻防世界fileclude题解:手把手教你用php伪协议绕过文件包含限制
本文详解攻防世界fileclude题目,聚焦利用php://filter和data://协议绕过文件包含限制。重点介绍如何用php://filter+convert.base64-encode读取flag.php源码,以及用data://协议构造'hello ctf'验证内容;涵盖Payload构建、Base64解码验证、编码优化、路径遍历及多过滤器组合等关键技术,适用于CTF中文件包含类漏洞的实战利用。
罗昌毕
193
beginctf小白教程,一看就懂
action=php://filter/convert.base64-encode/resource=/flag`,利用`convert.base64-encode`过滤器将文件内容转换为Base64编码
xiaoshun007~
25
ACTF2020 Include1解题[代码]
作者利用了PHP语言中的php://filter伪协议来解决这个问题。php://filter是一种流封装器,它可以用于读取流数据,并且通过一系列过滤器对数据进行处理。
22
2020YCBCTF羊城杯官方Writeup.pdf
在文档中,还提到了如何绕过安全限制,例如对特定函数的禁用disable_functions),以及利用伪协议绕过函数限制php://filter),或者利用特殊字符(如反斜杠\)绕过字符限制。
月牙爱学习
700
网络安全PHP黑魔法漏洞利用技术解析:常见绕过手法与安全防御策略研究
内容概要:本文系统总结了PHP开发中常见的安全漏洞与“黑魔法”技巧,涵盖哈希比较绕过、类型混淆、JSON解析漏洞、SQL注入及伪协议利用等。重点包括:使用0e开头的MD5哈希值实现科学计数法下的相等判
SpiderManSun
4
UNCTF2021 部分wp.pdf
Crypto1探秘中世纪城堡密码题目,直接反应凯撒密码、base64 编码,阻栏。。。栅栏密码???这个问题考察了我们的密码学知识和 crypto 能力。
柒是幸运
196
BJDCTF文件探测[代码]
文件包含漏洞存在于index.php中一处动态include语句,参数经简单白名单过滤(仅允许包含“home”、“about”、“contact”三类字符串),但未对路径截断、编码绕过及phar伪协议做任何限制
网络安全CTF竞赛综合渗透测试技术指南:Web漏洞利用与逆向分析实战方法
内容概要:本文档主要围绕CTF(Capture The Flag网络安全竞赛中的各类Web安全与Misc杂项题型,详细介绍了多种漏洞利用技巧和解题方法。涵盖的知识点包括但不限于:备份文件下载、G
火白学安全
43
WMCTF_2020官方WriteUp 高清PDF版
checkin1因配置错误可直接获取flag;checkin2则通过二次编码绕过过滤器,并利用
YG亲测源码屋
188
渗透测试技术之本地文件包含
本地文件包含Local File Inclusion, LFI是渗透测试领域中的一个重要知识点,特别是在Web应用程序的安全评估中。LFI漏洞是指Web应用程序在处理用户输入时未能有效过滤,导致攻
weixin_38672794
199