攻防世界-WEB-unserialize3

题目如下:

注意这里需要对php有一定的了解,不了解的话,可以网上查下__wakeup函数是干嘛的,我查到的结果如下:

  • 若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

注意到这里最后一行是?code=,这里提示我们需要构造code参数来绕过__wakeup函数。我们可以简单设置一个code=xxx来进行验证,得到结果如下:

可以看到参数回显出来了,然后接下来就是如何构造一个字符串来绕过__wakeup函数了,我们可以先写这样一串php代码来得到序列化字符串:

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

运行后,我们可以得到结果:O:4:"xctf":1:{s:4:"flag";s:3:"111";},然后将对象属性个数调大即可,这里我们调成2:O:4:"xctf":1:{s:4:"flag";s:3:"111";}。构造如下请求,即可得到答案

总结:这里考察了php语言中反序列化需要优先执行__wakeup这一知识点,已经如何构造序列化字符串可以绕过该函数;与该问题相关的历史漏洞为CVE-2016-7124。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值