Java反序列化和php反序列化的区别

PHP反序列化漏洞

序列化存在的意义是为了传输数据/对象,类是无法直接进行传输的。通过序列化后转换为字符串或json等格式进行传输。

反序列化漏洞

​ 以__开头的函数,是PHP中的魔术方法。是为了更快的响应。
​ 类中的魔术方法,在特定情况下会自动调用。即使魔术方法在类中没有被定义,也是真实存在的。
两个下划线

  • __construct():在创建对象时自动调用
  • __destruct():在销毁对象时自动调用
  • __wakeup():unserialize()时会自动调用这个函数==(反序列化)==
  • __sleep():serialize()时会自动调用这个函数==(序列化)==

​ 反序列化漏洞不能通过黑盒测试查找到;只能通过白盒测试,也就是代码审计

​ 反序列化漏洞攻击者是不可控反序列化中的任何过程的,反序列化的代码是开发者自己写的,攻击者看不到。

image-20230915095921589

什么是反序列化漏洞?

​ 序列化和反序列化本身是为了实现数据在网络上完整高效的传输,但是由于反序列化过程中,对象的魔术方法会自动调用,魔术方法本身调用了别的方法,最终呈现一种链式调用,直到执行任意的代码或者命令。反序列化漏洞中危险函数执行的时候参数对我们来说可控,反序列化才能成立。所以反序列化漏洞的利用条件非常苛刻。

反序列化的时候实现了函数的链式调用,在这个链式调用的函数里有一个漏洞点,并且可以控制这个漏洞点的参数

修改序列化后的数据,目的是什么?

​ 为了满足一定的条件以后实现链式调用

Java反序列化漏洞

反序列化形成的原因:链式调用

序列化,反序列化类中的方法:

序列化:
ObjectOutputStream --> writeObject()
反序列化:
ObjectInputStream --> readObject()

反序列化漏洞

​ PHP的反序列化和java的反序列化是两种不同的类型,序列化和反序列化本身没有漏洞点只是为了实现数据的完整高效的传输;
​ PHP反序列化漏洞是由于类里面的魔术方法调用了某个函数,该函数又调用了别的函数最终执行到了危险函数的位置;
JAVA反序列化漏洞是由于开发者重写了readObject方法,该readObject方法调用了别的方法,最终执行到了例如Transfrom方法的危险方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

网安咸鱼1517

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

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

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

打赏作者

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

抵扣说明:

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

余额充值