复制代码

2. 文件包含(150)

文件包含 (150)

        -------南京邮电大学ctf : http://4.chinalover.sinaapp.com/web7/index.php

 

从这道ctf的网址 :

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

我们明显感受到了文件包含的信息

 

 

文件包含漏洞

先了解一下php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

php://filter

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

php://filter 目标使用以下的参数作为它路径的一部分。 复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例。


   名称                                     描述

resource=<要过滤的数据流>      这个参数是必须的。它指定了你要筛选过滤的数据流。

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

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

<;两个链的筛选列表>            任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

同时我也借此机会学到了文件读取的相关知识。

  • include “test.php”php文件包含,在执行流中插入写在其他文件中的有用的代码。读取的时候也是数据流形式,因此可以使用php://filter进行过滤,返回值为0,1。
  • readfile(“test.php”)是将文件以数据流的形式读取过来,并不会执行,但会在前台浏览器上进行解析。返回值是字节数多少。
  • file_get_contents(“test.php”)返回值为文本内容

此题运用的就是关于数据流过滤的文件包含,我们一般在进行文件包含的时候都这么写include “test.php”获得的就是test.php直接解析出来。但如果运用readfile(“test.php”) 就不进行解析,导致无法在浏览器前台进行显示。那么问题来了看题

它让我点击它 我一下子就点了他!!! 

出来了个这个URL

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

典型的文件包含漏洞我们可以通过构造含有漏洞的语句,查看想要看的代码

file=php://filter/read=convert.base64-encode/resource=index.php

注解:

  1. php://filter/可用于处理打开的数据流,起到过滤作用。如果源文件为.php则很有可能在前台显示不出来。
  2. 此时我们采用的方法是,先让文件转化为base64格式(convert.base64-encode)然后再输出,这样不论是什么格式的文件都可以在前台输出。
convert.base64-encode和 convert.base64-decode使用这两个过滤器等同于分别用 base64_encode()和 base64_decode()函数处理所有的流数据。 

convert.base64-encode支持以一个关联数组给出的参数。如果给出了 line-length,base64 输出将被用 line-length个字符为 长度而截成块。

如果给出了 line-break-chars,每块将被用给出的字符隔开。这些参数的效果和用 base64_encode()再加上 chunk_split()相同。

       3.再次解码就可得到源代码,怎么样是不是很神奇啊!

         看图片: 

看见了base64编码!! 
python解码就行啦,看图 

就可以得到flag

 

posted @ 2018-04-18 20:23  bmjoker  阅读(981)  评论(1编辑  收藏  举报