php伪协议
php伪协议总结
https://www.cnblogs.com/zzjdbk/p/13030717.html
PHP伪协议,也称为PHP流协议,是PHP中用于访问各种资源的封装协议。具体来说,是PHP中用于统一流式接口访问不同资源的特殊协议。它们允许开发人员通过类似文件操作的函数(如fopen()等)处理网络资源、压缩文件、输入输出流等。
之所以被称为伪协议,是因为这些协议并非传统意义上的网络或系统协议,而是PHP内部实现的特殊资源访问机制。是PHP为了简化特定操作而设计的。
特征
- 非标准协议
不准寻HTTP,FTP等标准协议规范,而是PHP自定义的语法
绕过常规文件操作
允许开发者以类似文件操作的方式访问非文件资源(如内存流、输入输出流)
上下文依赖
仅在PHP运行时环境中生效。若将
php://filter
的URI直接粘贴到浏览器地址栏,浏览器会将其视为无效协议
file://协议
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响(即在双off的情况下也能使用)
使用方法
1 | file:// [文件的绝对路径和文件名] |
1 | http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt |
php://协议
PHP向用户提供的指定待打开文件的方式,是一个文件流
条件
不需要开启allow_url_fopen,仅php://input , php://stdin , php://memory , php://temp。 需要开启 allow_url_include
php://filter
读取源代码并进行base64编码输出,不然会直接当作php代码执行就看不见源代码内容了
在双off情况下也可以正常使用
参数
例子
1 | http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php |
注意file前后不要加空格
data://协议
https://www.php.net/manual/zh/wrappers.data.php
1 | data:[<mediatype>][;base64],<data> |
用法:data:// —数据
说明:数据流封装器
必需在双on才能使用
单独的?c=data://text/plain并没有仍和实际执行或展示数据的功能,它只是表达了数据传递的方式,需要后续指定数据内容,比如?c=data://text/plain,Hello%20World 就是传递纯文本 “Hello World”。
实例
- 打印data://的内容
1 |
|
- 获取媒体类型
1 |
|