行百里者半|

Guanz

园龄:3年粉丝:7关注:13

2023-12-02 17:54阅读: 17评论: 0推荐: 0

Web_XCTF_WriteUp | unserialize3

题目

分析

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

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

本文作者:Guanz

本文链接:https://www.cnblogs.com/Guanz/p/17867051.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Guanz  阅读(17)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起