PHP反序列化漏洞

开始之前先讲一讲什么是序列化和反序列化

  • 序列化
    将对象的状态信息转换为可以存储或传输的形式
  • 反序列化
    把字节序列转化为对象的过程
  • PHP反序列化漏洞

PHP5 < 5.6.25
PHP7 < 7.0.10
PHP官方给了示例:https://bugs.php.net/bug.php?id=72663
这个漏洞核心:序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

  • 例题:

用XCTF上的一道题来讲解PHP反序列化漏洞

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

审计代码后,我们可以知到xctf这个类正常序列化结果为

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

O代表结构类型为:类,4表示类名长度,接着是类名、属性(成员)个数 大括号内分别是:属性名类型、长度、名称;值类型、长度、值
根据代码中的?code= 可得知,将得到的序列化字符串赋值给code进行传递。

我们在浏览器地址输入正常序列化结果进行尝试,发现在反列化时会自动调用__wakeup()函数。
在这里插入图片描述
利用反序列化漏洞,修改成员个数

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

再次尝试,获得flag
在这里插入图片描述

序列化漏洞常见的魔法函数

construct():当一个类被创建时自动调用 destruct():当一个类被销毁时自动调用
invoke():当把一个类当作函数使用时自动调用 tostring():当把一个类当作字符串使用时自动调用
wakeup():当调用unserialize()函数时自动调用 sleep():当调用serialize()函数时自动调用
__call():当要调用的方法不存在或权限不足时自动调用

部分内容摘自 https://blog.csdn.net/nzjdsds/article/details/82703639

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值