题目描述
进入题目页面如下
看到题目提示应该为文件包含漏洞
解释上述代码
// 输出提示信息:错误的方式!
WRONG WAY!
<?php
// 包含名为 "flag.php" 的文件,通常这个文件里可能包含重要的敏感信息,如 flag
include("flag.php");
// 以语法高亮的形式显示当前 PHP 文件的源代码,便于开发者查看代码结构和内容,也可用于调试
highlight_file(__FILE__);
// 检查是否通过 GET 请求传递了名为 "file1" 和 "file2" 的两个参数
if(isset($_GET["file1"]) && isset($_GET["file2"]))
{
// 若传递了这两个参数,则将 GET 请求中 "file1" 参数的值赋给变量 $file1
$file1 = $_GET["file1"];
// 将 GET 请求中 "file2" 参数的值赋给变量 $file2
$file2 = $_GET["file2"];
// 检查 $file1 和 $file2 变量的值是否不为空(既不是空字符串,也不是 null 等无意义的值)
if(!empty($file1) && !empty($file2))
{
// 读取 $file2 所指定文件的内容,并检查其内容是否严格等于字符串 "hello ctf"
if(file_get_contents($file2) === "hello ctf")
{
// 如果 $file2 文件内容是 "hello ctf",则包含 $file1 所指定的文件
// 也就是将 $file1 文件的代码插入到当前位置并执行
include($file1);
}
}
else
// 如果 $file1 或 $file2 为空,则终止脚本执行,并输出 "NONONO"
die("NONONO");
}
访问flag.php
显示错误
看源代码应在file1中传入读取flag.php语句、在file2中传入hello ctf
使用伪协议:如果目标服务器支持,也可以使用 php://input
或 data://
伪协议来模拟这个文件。例如,使用 data://
伪协议
当服务器处理这个请求时,会检查 file2
的内容是否为 "hello ctf"
,由于使用了 data://
伪协议,这个条件会满足。然后,服务器会包含并执行 file1
文件,即 flag.php
,从而输出 flag
的内容。
用POST方式传参
?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input
利用burp suite抓包按要求修改请求
得到的编码看着像base64编码
可以利用这个在线工具解码base64解码 base64编码 在线base64解码/编码工具 iP138在线工具
最终得到flag