今天我做到了一道关于index.php的ctf题,里面有一个解题关键就是php:filter://的使用,因此我就百度了一下它的用法:
php:filter://是php中的一个协议,利用这个协议我们可以解决一些ctf的题目,或者挖掘出一些漏洞
php://filter可以作为一个中间流来处理其他流,具有四个参数:
名称 | 描述 | 备注 |
---|---|---|
resource=<要过滤的数据流> | 指定了你要筛选过滤的数据流。(所谓必选就是用到该协议的时候,必不可少resource参数) | 必选 |
read=<读链的筛选列表> | 可以设定一个或多个过滤器名称,以管道符(|)分隔。 | 可选 |
write=<写链的筛选列表> | 可以设定一个或多个过滤器名称,以管道符(|)分隔。 | 可选 |
<;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链 |
<?php
#这里没有指定过滤器
readfile("php://filter/resource=http://www.example.com");
?>
<?php
/* 这会以大写字母输出 www.example.com 的全部内容 */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
/* 这会和以上所做的一样,但还会用 ROT13 加密。 */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>
- read=是指将过滤到的数据流输出出来(即读取出来)
- string.toupper 是指将过滤到的内容以大写字母的形式表现
- | 管道符 是用来并列过滤器的
- string.rot13用rot13加密
- 另外还有 conver.encode-base64 事宜base64加码源数据的