前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反序列化漏洞

反序列化漏洞

作者头像
一个架构师
发布2022-06-20 19:58:40
2550
发布2022-06-20 19:58:40
举报
文章被收录于专栏:从码农的全世界路过

这几天网上又报出来Dubbo的一个反序列化漏洞,一时间Dubbo又被推上了风口浪尖,对dubbo本身也褒贬不一.

漏洞报告地址如下,有兴趣的可以自己研究下:

https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html

其实在2月份就有相似的漏洞报出来了,漏洞地址如下:

https://www.mail-archive.com/dev@dubbo.apache.org/msg06225.html

我们抛开Dubbo不提,看看反序列化漏洞到底是什么样的?

序列化:

序列化是将Java对象转换成二进制字节,这些字节可以保存到磁盘上, 也可以通过网络传输,发送到其他服务上.

调用方法:

代码语言:javascript
复制
ObjectOutputStream.writeObject(Object)

反序列化:

与序列化相反,是将二进制字节转换成Java对象

调用方法:

代码语言:javascript
复制
ObjectInputStream.readObject();

而漏洞也就出现在这个readObject()过程中,当二进制数据不可控时,或者说二进制中存在恶意代码时,就会在这个阶段执行.

通过分析readObject的层层调用,可以发现会调用到对象中自定义readObject()方法.

也就是利用这个自定义方法进行的漏洞攻击

代码语言:javascript
复制
ObjectInputStream.readObject();
↳ Object obj = readObject0(false);
  ↳ readOrdinaryObject(unshared);
    ↳ readSerialData(obj, desc);
      ↳ slotDesc.invokeReadObject(obj, this);
        ↳ readObjectMethod.invoke(obj, new Object[]{ in });

在进行反序列化就会执行系统命令,打开计算器.

代码语言:javascript
复制
class MyObject implements java.io.Serializable {
    String name;
    private void readObject(java.io.ObjectInputStream in)
            throws IOException, ClassNotFoundException {
        in.defaultReadObject();
        Runtime.getRuntime().exec("open /Applications/Calculator.app/");
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档