java反序列化漏洞简介

​ java序列化是指把java的对象转化为字节序列的一个过程,便于储存;ObjectOutputStream类的writeObject()方法可以实现序列化,反序列化就是把字符序列恢复为java对象的 的过程;ObjectInputStream类的readObject()用于反序列化.

​序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

1.1 反序列化漏洞

借用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行

WebLogic、WebSphere、JBoss、Jenkins、OpenNMS的最新版

某个可序列化的类重写了readObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标

1.2漏洞挖掘

基本手段:从可控的反序列化或间接的反序列化接口入手,在此基础上尝试构造序列化对象

首先:找到一个接收外部输入的序列化对象的接收点,也就是反序列化的触发点.通过readObject()反序列化函数进行查找;或者对java序列化数据的特征为以标记(ac ed 00 05)开头。

通过先前找到的传入对象方式进行对象注入,数据中载入payload(使用ysoserial来生成反序列化的payload,指定库名和想要执行的命令),触发受影响应用中ObjectInputStream的反序列化操作,随后通过反射调Runtime.getRunTime.exec即可完成利用。

1.3防御手段

weblogic防御

• 过滤T3协议,限定可连接的IP
• 设置Nginx反向代理,实现t3协议和http协议隔离

原生反序列化防御

• 不要反序列化不可信的数据
• 给反序列数据加密签名,并确保解密在反序列之前
• 给反序列化接口添加认证授权
• 反序列化服务只允许监听在本地或者开启相应防火墙
• 升级第三方库
• 升级JDK,JEP290

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值