一文了解反序列化漏洞

一、反序列化漏洞

序列化和反序列化基础

首先我们得知道什么是序列化和反序列化,简单来说

序列化:就是将对象转化为字符串进行存储

反序列化:就是将字符串转化为对象

反序列化漏洞:就是在反序列化过程中,如果恶意者可以对将要转换的字符串进行操控,从而达到任意代码执行的操作,就是反序列化漏洞

二、关于反序列化你必须知道的几种漏洞

1.shiro-550反序列化漏洞

漏洞原理

apache shiro框架提供了rememberme的功能,用户登录成功后会生成经过加密 并编码的cookie,在服务端对remeberme的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。那么,payload产生的过程:命令=>序列化=>AES加密=>base64编码=>rememberme cookie值,再整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易知道密钥了,Payload构造起来也是十分简单

影响版本

apche shiro <1.2.4

shiro反序列化特征

返回包中会包含rememberme=deleteme字段

这种情况大多会发生在登陆处,返回包里包含remeberme=deleteme字段,这个是再返回包中(Response)如果返回的数据包中没有remeberme=deleteme字段的话,可以再数据包中的cookie中添加remeberme=deleteme字段也会在返回包中有这个字段

漏洞的简单介绍利用
  1. 通过再cookie的rememberme字段中插入恶意payload
  2. 触发shiro框架的rememberme的反序列化功能,导致任意代码执行
  3. shiro1.2.24中,提供了硬编码的AES密钥:kPH+bIxk5D2deZiIxcaaaA==
  4. 由于开发人员未修改AES密钥而直接使用shiro框架,导致了该问题

2.shiro-721反序列化漏洞

漏洞原理

apache shiro rememberme cookie默认通过AES-128-CBC模式加密,这种加密方式容易受到Padding Oracle Attack(Oracle填充攻击),利用有效的rememberme cookie作为Padding Oracle Attack的前缀,然后精心构造rememberme cookie值来实现反序列化漏洞攻击

  • AES-128-CBC

    • AES指“高级加密标准”,是一种对称加密的分组加密算法
    • 128指的密钥长度
    • CBC指“棉麻分组链接”加密模式
    • PKCS5Padding是Apache Shiro中默认填充方式,最后一个明文分组缺少N个字节,则填充N个0x0N
  • 在Apache Shiro中默认使用CBC加密模式与PKCS5Padding填充方式,CBC加密模式容易遭到Padding Oracle Attack,攻击者可以通过枚举IV的方式计算出全部明文,并且可以通过CBC Byte-Flipping Attack篡改某一段的明文

  • Padding Oracle Attack利用前提

    • 攻击者能够获得密文(CipherText)与附带在密文前面的初始化向量(IV)
    • 服务端对密文解密后会判断Padding是否有效,并根据不同的判定结果返回不同的响应信息
  • CBC Byte-Flipping Attack 利用前提:明文和密文已知


简单来说就是:

shiro721用到的加密方式是AES-CBC,而且其中的ase加密的key基本猜不到,是系统随机生成的,而cookie解析过程是一样的,也就意味着如果能伪造恶意的rememberme字段的值且目标含有可利用的攻击链的话,还是能够进行RCE攻击的

影响版本

1.2.5

1.2.6

1.3.0

1.3.1

1.3.2

1.4.0-RC2

1.4.0

1.4.1

利用条件

知道已经登录用户的合法cookie且目标服务器含有可利用的攻击链就可以进行漏洞利用

3.Fastjson反序列化漏洞

什么是Fastjson

Fastjson是java的一个库,可以通过toJSONString()方法将java对象转化为json格式的字符串,也可以通过parseObject()方法将json格式的字符串转化为java对象

Fastjson反序列化漏洞原理

在反序列化的时候,会进入parseField方法,调用setValue(object,value)方法,如果在这里构造恶意的payload,就会造成最后的代码执行,这个漏洞的利用作用点有两个:

  1. 第一个需要我们指定一个类,这个类的作用是为了让程序获取这个类进行反序列化操作
  2. 第二是将需要执行的代码提供给程序,在这里使用rmi模型,反序列化的时候就会请求rmi服务器,地址为dnslong.cn/xxx,然后加载恶意xxx class文件从而造成代码执行
Fastjson反序列化漏洞的前提条件
  1. 目标服务器存在Fastjson
  2. 没有对用户传输的数据进行严格过滤

4.log4j2反序列化漏洞

什么是log4j2

log4j2是apache基于Java的日志记录工具

关于log4j2要知道的知识
RMI

java远程方法调用,是java变成语言中一种用于实现远程过程调用的应用程序编程接口

JRMP

java远程方法协议,用于查找和引用远程对象的协议,适用于RMI过程中的协议

JNDI

java命名和目录接口,是java目录服务应用程序接口(API),提供目录系统,将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象

LDAP

LDAP轻型目录访问协议,LDAP可以理解为简单存储数据的树状结构数据库,适合用于查询,也是JNDI的实现,通过名称(目录路径)查询到对象(目录下的文件)

Codebase

Codebase就是存储代码或者编译文件的服务,其可根据名称返回对应的代码或者编译文件,如果根据的是类名,则提供对应的class文件

漏洞原理

log4j2默认支持解析IDAP/RMI协议,并会通过名称从IDAP服务端其获取的对应class文件,并使用ClassLoader在本地加载LDAP服务端返回的Class类,这就为攻击者提供了攻击途径,攻击者可以在界面传入包含恶意内容(可以提供恶意的class文件)的IDAP协议内容(如${jndi:ldap://localhost:9999/Test}恶意内容),该内容传递到后端被log4j2打印出来,就会触发恶意的class加载执行(可执行任意后台命令),从而达到攻击原理

5.Weblogic T3反序列化漏洞

weblogic T3反序列化漏洞原理

远程攻击者利用该漏洞在未授权的情况下发送数据,通过T3协议,利用RMI机制的缺陷(绕过weblogic黑名单限制),然后将加载的内容利用readObject解析,从而造成反序列化远程代码执行漏洞,所以开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以达到执行任意反序列化的目的(获取目标服务器的权限)

6.Weblogic XMLDecoder反序列化漏洞

Weblogic XMLDecoder反序列化漏洞原理

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值