资讯动态

CTF实战:如何用PHP伪协议绕过SWPUCTF 2022新生赛的ez_ez_php(revenge)题目

发布时间:2026/8/23 4:23:58 来源:尧图企业网站定制
CTF实战PHP伪协议在SWPUCTF新生赛中的高阶应用第一次参加CTF比赛时我盯着那道PHP题目整整半小时毫无头绪。直到发现php://filter这个神奇的存在才明白原来文件包含可以玩出这么多花样。今天我们就以SWPUCTF 2022新生赛的ez_ez_php(revenge)为例深入剖析PHP伪协议在安全竞赛中的实战技巧。1. 题目环境与代码审计拿到题目首先查看页面源代码是基本操作。这道题给出了完整的PHP代码?php error_reporting(0); if (isset($_GET[file])) { if ( substr($_GET[file], 0, 3) php ) { echo Nice!!!; include($_GET[file]); } else { echo Hacker!!; } } else { highlight_file(__FILE__); } //flag.php代码逻辑看似简单却暗藏玄机检查是否存在file GET参数用substr检查参数值前3个字符是否为php满足条件则包含该文件否则返回Hacker!!无参数时显示当前文件源码关键限制在于substr($_GET[file], 0, 3) php这个检查。我们需要构造一个以php开头的文件路径同时利用文件包含漏洞读取flag。2. PHP伪协议核心原理PHP伪协议是PHP内置的一系列特殊流包装器允许以各种方式访问PHP的输入输出流。在CTF中常用的有协议类型功能描述典型用法php://input访问请求的原始数据读取POST数据php://filter对数据流进行过滤处理编码转换、字符串处理data://直接嵌入数据(RFC 2397)执行PHP代码phar://访问PHAR归档文件反序列化利用其中php://filter是我们解决本题的关键。它的基本语法结构为php://filter/[read|write]过滤器链/resource资源路径过滤器可以多层嵌套常用过滤器包括convert.base64-encodeBase64编码convert.base64-decodeBase64解码string.rot13ROT13编码string.toupper转为大写string.tolower转为小写3. 构造有效Payload回到题目我们需要构造一个以php开头的文件路径。直接尝试?filephp://filter/readconvert.base64-encode/resourceflag.php这个Payload完美满足以php开头绕过检查使用base64编码避免直接输出被PHP解析读取flag.php文件内容解码后可能会遇到几种情况直接显示flag得到提示指向真正的flag位置返回空白或错误在本题目中第一次解码后得到提示需要修改路径为?filephp://filter/readconvert.base64-encode/resource/flag最终解码得到flagNSSCTF{7877cb1d-5672-4cc9-946a-d69f3c5d2640}4. 防御与进阶技巧了解攻击手段后如何防御这类漏洞开发者可以白名单校验文件路径禁用危险PHP函数allow_url_includeOff对输入进行严格过滤而对于攻击者还有更多高阶技巧多层过滤器嵌套php://filter/readconvert.base64-encode|convert.base64-encode/resourceflag.php组合利用其他协议php://filter/convert.base64-encode/resourcephar://uploaded/file.phar编码绕过特殊字符php://filter/readstring.rot13/resourceflag.php利用压缩流php://filter/zlib.deflate/convert.base64-encode/resourceflag.php5. 实战中的变种与思考在实际CTF比赛中这类题目往往会有更多变种限制检查字符串长度strlen($_GET[file]) 20黑名单过滤关键词filter、base64等限制协议类型allow_url_includeOff面对这些限制我们需要灵活应对使用短标签php://filter/readconvert.quoted-printable-decode/resourceflag.php多重编码php://filter/readconvert.iconv.utf-8.utf-16/resourceflag.php协议嵌套compress.zlib://php://filter/readconvert.base64-encode/resourceflag.php记得在某次比赛中遇到一个变形题要求file参数必须同时以php开头和php结尾。最终通过构造php://filter/php成功绕过这种创造性思维正是CTF的魅力所在。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价