115,【7】 攻防世界 web fileinclude
进入靶场
试着访问了几个文件,都没得到信息,f12看看源码
还真有
<?php
// 检查是否开启了错误显示功能
// ini_get 函数用于获取 PHP 配置选项的值,这里检查 'display_errors' 选项是否开启
if( !ini_get('display_errors') ) {
// 如果错误显示功能未开启,则使用 ini_set 函数将其开启
// 'On' 表示开启错误显示,这样在代码执行过程中出现的错误会直接显示出来,方便调试
ini_set('display_errors', 'On');
}
// 设置错误报告级别为 E_ALL
// E_ALL 表示报告所有的错误和警告信息,这样可以捕获到代码中可能存在的各种问题
error_reporting(E_ALL);
// 从客户端的 Cookie 中获取名为 'language' 的值,并赋值给变量 $lan
$lan = $_COOKIE['language'];
// 检查 $lan 是否为空
if(!$lan)
{
// 如果 $lan 为空,说明客户端没有设置 'language' 这个 Cookie
// 使用 setcookie 函数设置一个名为 'language' 的 Cookie,值为 'english'
// @ 符号用于抑制可能出现的错误信息
@setcookie("language","english");
// 包含并执行当前目录下的 'english.php' 文件
// 这样可以加载英文语言相关的内容或逻辑
@include("english.php");
}
else
{
// 如果 $lan 不为空,说明客户端已经设置了 'language' 这个 Cookie
// 动态包含并执行以 $lan 的值加上 '.php' 扩展名的文件
// 例如,如果 $lan 的值为 'chinese',则会包含 'chinese.php' 文件
@include($lan.".php");
}
// 使用 file_get_contents 函数读取当前目录下 'index.php' 文件的内容,并赋值给变量 $x
// 该函数会将文件的内容作为一个字符串返回
$x = file_get_contents('index.php');
// 输出变量 $x 的值,即 'index.php' 文件的内容
echo $x;
?>
得知传参的名字为language,而且是在cookie处传,还会在传的值后面直接加上.php
再加上题目名称暗示了文件上传
传个最常见的上去,而且只写文件名就行
php://filter/read=convert.base64-encode/resource=flag
f12修改cookie并传参
顺利得到base64编码后的flag
解码
flag到手