BUUCTF 【ACTF2020 新生赛】 Include
| 项目 | 内容 |
|---|---|
| 难度 | 简单 |
| 类型 | WEB |
| 靶场 | BUUCTF |
| 坐标 | [ACTF2020 新生赛]Include |
首先 感谢Y1ng师傅~~

题解
打开链接,发现 tips 超链接

点击 URL后缀加入?file=flag.php,且前端显示为 can you find out the flag?

发现网站指纹为PHP

且前端不存在JS源码

再结合题目要求 include 联想到 PHP的文件上传, include的代码默认不会显示,我们需要查看PHP源码
查看PHP源码
设计知识点:
php://filter: 这是一个特殊的 PHP 输入流(wrapper),用于对输入和输出进行过滤处理。read=convert.base64-encode: 这是php://filter的参数,指示对输入流进行 Base64 编码。resource=flag.php: 这是php://filter的参数,指定要读取的文件资源。在这里,它指定了flag.php文件,即要读取的文件名。
当使用 php://filter/read=convert.base64-encode/resource=flag.php 这个输入流时,PHP 会将 flag.php 文件的内容读取出来,并对其进行 Base64 编码后输出。这样,可以将文件内容作为 Base64 编码的字符串返回给调用者。
PS:
php://filter/read=convert.base64-encode/resource=flag.php为payload
该payload用于尝试读取受限文件的内容。然而,需要特别注意,这种用法可能会导致安全问题,因为它允许读取服务器上的任意文件。在实际应用中,应该谨慎使用这样的特殊输入流,并确保只允许读取受信任的文件。否则,可能会导致敏感信息泄露和安全风险。
获取FLAG
拼接后的URL如下
ip/?php://filter/read=convert.base64-encode/resource=flag.php
正常返回结果:

(=) 和 (==) 经常用于base64编码,解码后得到flag
<?php
echo "Can you find out the flag?";
//flag{a7a9ea7e-a3fa-4025-944f-14efc98591d9}