一,解析
题目是include,文件包含
点击tips后就显示你发现了flag没,那么这个过程肯定产生了flag,
看url发现它访问了flag.php文件,想办法把flag读取出来
这里我们要用到PHP伪协议
本题要用到的伪协议是php://filter
官方文档的解释:
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
php://filter/read=convert.base64-encode/resource=[文件名]
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔
convert.base64-encode 将读取的内容进行base64加密
resource=<要过滤的数据流> 指定了要筛选过滤的数据流
[文件名] 本题要读取的文件是flag.php
放进去拿到经过了base64编码的flag
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7MmMxNmE3ZGEtYTI2ZC00NzljLTk0ZGQtNmIxODE0NWFlMWVlfQo=
解码得到flag,没有工具也可以在线解码,浏览器搜base64在线解码
二、相关扩展
常见的几个伪协议如下:
file:// | 访问本地文件系统 |
http:// | 访问 HTTP(s) 网址 |
php:// | 访问各个输入/输出流 |
phar:// | PHP 归档 |
zip:// | 压缩流 |
参数
一些过滤器用法的官方链接
字符串过滤器
转换过滤器(convert.*)
压缩过滤器
加密过滤器