Web_XCTF_WriteUp | unserialize3

发布时间 2023-12-02 17:55:32作者: Guanz

题目

分析

根据题目指向,这题是反序列化漏洞。
分析代码:

class xctf{
public $flag = '111';        // 变量flag初始化为111
public function __wakeup(){  // “__wakeup”:PHP魔术方法,在序列化后立即被调用
exit('bad requests');        // 输出“bad requests”
}
?code=                       // 不完整

代码中的 “__wakeup” 函数
显然题示代码并不完整,括号未闭合,代码里也未出现 unserialize() 函数。


我们构造序列化代码,命名为 serialize.php,代码如下:

<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}

// 创建新对象用于序列化xctf函数
$serxctf = new xctf();
echo(serialize($serxctf));
?>

安装并配置 phpStudy,运行 serialize.php,得到序列化值:


如果直接将序列化值传入 code,则会直接触发 “__wakeup” 函数:


因此需要绕开 “__wakeup” 函数,这里我们将数据类型 O 改为 z 使字符串被回收:


得到 flag。

Flag

cyberpeace{b2ab1035acae9b3d153389706cc2296c}

参考

PHP 代码审计-CTF Wiki
PHP中private、public、protected的区别详解-周伯通之草堂-博客园
PHP反序列化漏洞-LuckySec
(简单实用小技巧)在浏览器如何打开php文件-✧* ꧁柠檬ヤ汽水꧂✧*-CSDN
PHP 序列化(serialize)格式详解-leonzhang2008-CSDN
绕过__wakeup() 反序列化 合集-Jay 17-CSDN