攻防世界之unserialize3

题目:
在这里插入图片描述
WP:
新知识:
serialize:序列化函数,将对象转化为可保存可传输的字符串
unserialize:反序列化,将字符串转为原来的对象

<?php
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); 
//序列化数组
$s = serialize($a);
echo $s;
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo '<br /><br />';
//反序列化
$o = unserialize($s);
print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana [c] => Coconut ) 
?>

被序列化的格式为

a::{<key 1><value 1><key 2><value 2>...}

其中 表示数组元素的个数,<key 1>、<key 2>…… 表示数组下标,<value 1>、<value 2>…… 表示与下标相对应的数组元素的值。
下标的类型只能是整型或者字符串型,序列化后的格式跟整型和字符串型数据序列化后的格式相同。
反序列化漏洞有关的魔术方法

__wakeup
unserialize( )会检查是否存在一个_wakeup( )方法。如果存在,则会先调用_wakeup 方法,预先准备对象需要的资源。

__construct
具有构造函数的类会在每次创建新对象时先调用此方法。

__destruct会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

__toString
用于一个类被当成字符串时应怎样回应。

开发人员疏忽未对用户输入的序列化字符串进行检测时,就可能导致攻击者可以控制反序列化过程,从而达到代码执行、文件操作等攻击行为。
例如,在此题中n的若不符合正常情况,将会绕过__wakeup方法
我们构造?code=O:4:"xctf":3:{s:4:"flag";s:3:"111";}n本应为1但改为2
在这里插入图片描述
得到flag啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值