打开题目让点击链接
既然提示了文件包含,又看到*.php?file=
这种格式就往伪协议上考虑。
关于PHP伪协议知识可以在这里补充
https://blog.csdn.net/cosmoslin/article/details/120695429
先测试看下?file=/etc/passwd
这里没有进行过滤可以直接读出来。
那么目前知道了是伪协议文件包含读文件接下来就要确定flag的目录了
这个可以上目录扫描看下,我没有这么做,试了几个简单的flag.php,/flag.php
然后就试出来了 /flag
当然这样直接猜目录还是靠运气,既然考伪协议,那么我们试着读一下这个index.php、show.php
构造也很简单,使用php://filter/resource=index.php
就表示使用伪协议读index.php
那么payload就是
http://xxxx/index.php?file=php://filter/resource=index.php
http://xxxxx/index.php?file=php://filter/resource=show.php
可以看到这里直接执行了php,想看文件内容我们可以添加这个参数read=convert.base64-encode
使用base64编码输出。
那么payload就是这样
http://xxxx/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
http://xxxx/index.php?file=php://filter/read=convert.base64-encode/resource=show.php
base64解一下
index.php
show.php(其实这个show.php就是个提示,提示flag在index.php中)
那么到此这题就解出来了
flag:flag{c10e8c4f0c1cab878bf0a61166a43524}
总结:
1.看到?file=的包含先用常见的目录尝试猜测,往往事半功倍。
2.伪协议读文件可以提供下一步的思路