WebLogic基于T3协议的反序列化 CVE-2016-0638/CVE-2016-3510

WebLogic基于T3协议的反序列化 CVE-2016-0638/CVE-2016-3510

CVE-2016-0638 是前面分析的 CVE-2015-4852 的一个绕过,通过找到一个不在黑名单中的类,且这个类存在readObject/readResolve/readExternal 方法,并且恰好这些方法里面有一些数据进行反序列化操作,那么这时我们就可以把原生的序列化数据封装到这个类里面,通过调用反序列化对象重写的readObject/readResolve/readExternal 方法这一特点来反序列化封装在类里面的原生序列化数据。

修复环境搭建

因为这里的 CVE-2016-0638 是 CVE-2015-4852 的一个绕过,所以这里需要在前面那个 docker 环境中打上补丁,以此来分析 WebLogic 的补丁到底打到了那里。

环境搭建参考这篇文章:https://www.cnblogs.com/nice0e3/p/14207435.html

如果按照上面文章搭建报如下错误
image-20220128202843340
则需要把EJUM.jar/patch-catalog_22958.xml这两个文件从p20780171_1036_Generic目录拷贝到/u01/app/oracle/middleware/utils/bsu/cache_dir/目录下

补丁下载参考:https://www.cnblogs.com/hmhhz/p/11422019.html

CVE-2015-4852的防御

先来看下 WebLogic 对 CVE-2015-4852 反序列化漏洞的防御,在安装好补丁之后用前面的脚本打目标服务器,发现无法成功创建文件,把断点下在 ServerChannelInputStream#resolveClass 方法上,可以看到这里多了一个黑名单检查
image-20220128204003976
咋们跟进一下 ClassFilter#isBlackListed 方法,ClassFilter 这个类有静态代码块,那么先来看下静态代码块
image-20220128204124947
这里应该是判断有无设置一些参数为 true
image-20220128204655232
根据判断设置的参数情况来添加相应的类到黑名单里面,最终我这里的黑名单类为如下
image-20220128204934385
然后 isBlackListed 方法判断传入的类名是否存在于类黑名单中,如果存在则直接返回 true 了,如果不存在则截取包名,再判断包名是否存在类黑名单中,在这里的过滤的类黑名单中没有sun.reflect.annotation.AnnotationInvocationHandler 类在里面
image-20220128205420340
虽然 AnnotationInvocationHandler 类不在类黑名单里面,但是一些Gadget所用到的类在黑名单里面,而在AnnotationInvocationHandler 类直接通过 InboundMsgAbbrev#readObject 进行反序列化的过程中会再次调用到 ServerChannelInputStream#resolveClass 方法来处理比如 org.apache.commons.collections.map.LazyMap 类,而这个类会被黑名单检测到 ,这样一来自然就被拦截了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值