0


[CTF/网络安全] 攻防世界 fileclude 解题详析(php伪协议)

姿势

题目描述:好多file呀!

在这里插入图片描述

代码的功能是检查通过GET请求传递的两个参数"file1"和"file2"。如果这两个参数都存在且非空,它将读取"file2"文件的内容,如果内容等于"hello ctf",则会执行"file1"文件。

解题思路:使file2的内容为hello ctf,这样读取file2之后即可执行file1文件的内容,我们可以构造file1文件的内容为:读取flag.php文件。

这里涉及到PHP伪协议的利用,PHP伪协议可以进行数据过滤和流处理。

基本语法为

php://filter/标准输入输出流标识=过滤器

其中,[标准输入输出流标识] 可以是以下字符串之一:

read: 表示标准输入流(stdin)
write: 表示标准输出流(stdout)
其它文件系统可用流标识符,比如 php://temp (临时流)和 php://memory(内存流)等。

对于file1,我们可以使用 convert.base64-encode 过滤器来读取位于 flag.php 文件中的内容,并将其转换为 base64 编码的形式

对于file2,需要了解什么是数据URI

数据URI(Uniform Resource Identifier),也叫统一资源标识符。数据URI是一种用于在URI中嵌入数据的方案。

在这个例子中,data:// 指示使用数据协议,text/plain 表示数据的MIME类型是纯文本类型,hello%20ctf 是URL编码后的字符串 “hello ctf”。这个数据URI表示一个纯文本字符串 “hello ctf”。

方法一

Payload:

?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=data://text/plain,hello%20ctf

回显如下:

在这里插入图片描述
将其base64解码得到:

在这里插入图片描述

方法二

知识点扩展:

php://input 是一个 PHP 的内置流(stream)封装器,用于从请求的正文(body)中获取原始的输入数据。

由于file2为纯文本输入,因此我们可以利用该协议并进行POST处理:

在这里插入图片描述

同样可得到flag


总结

以上为[CTF/网络安全] 攻防世界 fileclude 解题详析(php伪协议),考察php伪协议及相关GET、POST知识,读者可躬身实践。

我是秋说,我们下次见。

标签: web安全 php 安全

本文转载自: https://blog.csdn.net/2301_77485708/article/details/132017636
版权归原作者 秋说 所有, 如有侵权,请联系我们删除。

“[CTF/网络安全] 攻防世界 fileclude 解题详析(php伪协议)”的评论:

还没有评论