i 春秋 web 题

打开链接地址:http://454e308408314446b0961f6226b502e7ad8cd9afd5614658.game.ichunqiu.com/

i 春秋 web 题_第1张图片
题题目中以给出提示,这是文件包含题,打开题目链接后出现:

i 春秋 web 题_第2张图片
代码中包含一个phpinfo.php文件,试着去打开这个文件,什么也没有发现。而且可以发现改代码是没有防护的文件包含。
既然是关于php的,可以使用php协议
在该链接下查看allow_url_include,发现是处于打开状态。i 春秋 web 题_第3张图片
这时就可以使用php://input协议,来观察下该目录下的列表
构造url  /?path=php://input
传入 
i 春秋 web 题_第4张图片
发现该目录下有3个文件;
再利用再利用  /?path=php://filter/read=convert.base64-encode/resource=dle345aae.php
读取文件内容;
i 春秋 web 题_第5张图片)
base64解码便可得到flag;

对于这道题中的某些地方应该还存在疑问,下面是一一所对应的知识点:

i 春秋 web 题_第6张图片

 php:// 协议    访问各个输入/输出流(I/O streams)

php://input协议 :

是个可以访问请求的原始数据的只读流。 POST 请求的情况下来代替 ,因为它不依赖于特定的指令。打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。

通过输入流以文件读取方式取得未经处理的POST原始数据;

php://filter
是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。

具体可参考  https://blog.csdn.net/qq_33020901/article/details/78706764

php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流

path=php://filter/read=convert.base64-encode/resource=dle345aae.php       将POST内容转换成base64编码并输出

 

 

 

你可能感兴趣的:(CTF)