php filter 的应用
本地文件包含漏洞和 php 伪协议
php://filter 的应用:
1、利用 base64 获得源码
2、通过读写编码实现绕过
php://filter 是什么?
php://filter 是什么:
php 中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取。
参数:
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<; 两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
实例:bugku:“flag 在 index 里”
url 地址 http://120.24.86.145:8005/post/index.php?file=show.php
典型的文件包含漏洞,用到了 php 的封装协议
payload:http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
文件内容就会以 base64 编码的形式显示出来,解码就可以获得 flag
解码后的内容:
1 | <html> |
file=php://filter/read=convert.base64-encode/resource=index.php 的含义:这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是 base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到 index.php 的源码,下面说说为什么,看到源码中的 include 函数,这个表示从外部引入 php 文件并执行,如果执行不成功,就返回文件的源码。
而 include 的内容是由用户控制的,所以通过我们传递的 file 参数,是 include()
函数引入了 index.php 的 base64 编码格式,因为是 base64 编码格式,所以执行不成功,返回源码,所以我们得到了源码的 base64 格式,解码即可。
如果不进行 base64 编码传入,就会直接执行,而 flag 的信息在注释中,是得不到的
部分内容来自:https://blog.csdn.net/zpy1998zpy/article/details/80585443