PHP伪协议
摘要
PHP伪协议
PHP伪协议是一种用于在PHP中访问不同资源和执行不同操作的特殊URL方案。这些伪协议以 php://
开头,后跟不同的标识符,用于指示要执行的操作。以下是一些常见的PHP伪协议及其用途:
- php://input: 这个伪协议用于访问HTTP请求的原始主体数据。它通常用于从POST请求中读取数据。
- php://output: 这个伪协议用于访问HTTP响应的输出流。它通常用于向客户端发送数据。
- php://stdin: 用于访问标准输入流。
- php://stdout: 用于访问标准输出流。
- php://stderr: 用于访问标准错误输出流。
- php://temp: 用于临时存储数据的内存流。它可以用于在没有创建实际文件的情况下处理临时数据。
- php://memory: 用于在内存中创建可读写的数据流。
- php://filter: 这个伪协议用于数据过滤和转换。它允许您将不同的过滤器应用于数据流,例如Base64编码、压缩和加密等。
- php://globals: 用于访问全局变量。可以通过此伪协议查看和修改PHP全局变量的值。
- php://fd: 用于访问文件描述符。它允许您在PHP中访问底层文件系统。
这些伪协议可以用于访问不同类型的资源,例如文件、输入/输出流、内存数据等。它们在PHP中提供了更灵活的数据处理和资源访问的方式。但要小心使用,确保不滥用它们,因为错误的使用可能导致安全漏洞。
1.例一
使用 php://filter/read 从一个URL中读取数据,并对其进行Base64解码。
如果base被过滤,可以考虑utf编码绕过。
php://filter/convert.iconv.utf-8.utf-7/resource=imposible.php
php://filter/string.rot13/resource=imposible.php
在 php://filter/read=convert.base64-encode/resource=
中,resource
后面应该跟着要编码的资源的标识符,这个标识符通常是文件路径或数据流的名称。具体来说,您需要提供要进行Base64编码的资源的标识符。
- 如果您要对文件进行编码,那么
resource
应该是文件的路径,例如/path/to/your/file.txt
。 - 如果您要对数据流进行编码,那么
resource
应该是数据流的名称或标识符。
换句话说,resource
应该是指向您要处理的具体资源的标识符。编码过程将基于此资源执行,并且结果将被返回以供读取或处理。
2.例二
php://input:
1 | <?php |
单看文字,没看懂是什么意思。在上面的例子可以看到 当user=“the user is a admin”的时候,才会输出hello world 。然后上面hackbar中,没有将user变量直接复制为”the user is a admin”,而是,先等于php://input,然后用post请求提交一个值是“the user is admin”。可以看到网页输出了hello admin!依旧可以达到user=“the user is a admin”的效果。这样我就理解了刚才的那句话 可以访问请求的原始数据的只读流,在POST请求中访问POST的data部分 。