常见的php伪协议
- file:// 访问本地文件系统
- php:// 访问输入输出流
- data:// 数据流的读取
- zip:// 压缩流
- phar:// PHP归档
- ......
file:// --访问本地文件系统
allow_url_fopen: off/on
allow_url_include: off/on
file://在双off条件下也能使使用
使用方法:
http://xxx.xxx.xxx/index.php?filename=file://xxx/xxx/xxx.php
php:// --访问输入输出流
PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
php://stdin, php://stdout 和 php://stderr
php://filter
-- 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器
当allow_url_include=on时,并且存在文件包含漏洞时,可以使用php://fileter直接把文件显示出来
例如:
http://xxx.xxx.xxx/index.php?filename=php://filter/read=convert.base64-encode/resource=xxx.php
- php://filter 一种访问本地文件的协议
- read=convert.base64-encode 表示读取的方式时base64编码(如果不进行编码,文件中的代码会直接运行,就不能看见代码内容了)
- resource=xxx.php 表示读取的文件
php://input --访问原始数据的只读流,读取POST参数内容
简单来说就是当$_GET参数被包含时,并且我们可以自由控制$_GET参数的输入, 就能将$_POST 发送的代码执行
例如:这有一个存在包含漏洞的1.php文件
<?php
error_reporting(0);
include($_GET['filename']);
?>
利用php://input 将我们要执行代码用post方式传入
代码执行成功
data://
php 5.2.0 起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码就会执行代码。使用方法为:
data://text/plain;base64,xxxx(base64编码后的数据)
还是使用1.php文件实验,将要执行的代码进行base64编码后,使用data://伪协议,代码执行成功
php:// 伪协议在CTF的使用
Bugku 文件包含
提示我们线索在index.php 中 使用php://filter 查看源代码
base64解码,得到flag
版权归原作者 坠水 所有, 如有侵权,请联系我们删除。