weblogic漏洞分析之CVE-2016-0638
weblogic漏洞分析之CVE-2016-0638
一、环境搭建:
这里使用前一篇文章的环境,然后打上补丁
上一篇文章:https://www.cnblogs.com/yyhuni/p/15137095.html
- 下载补丁p20780171_1036_Generic和p22248372_1036012_Generic
- 解压补丁后,复制补丁到Docker中:
docker cp ./p22248372_1036012_Generic/ d1b6be39e32e:/home/
docker cp ./p20780171_1036_Generic d1b6be39e32e:/home/
- 安装补丁:
docker exec -it d1b6be39e32e /bin/bash
cd /root/Oracle/Middleware/utils/bsu
mkdir cache_dir
cp /home/p20780171_1036_Generic/* ./cache_dir/
cp /home/p22248372_1036012_Generic/* ./cache_dir/
vi bsu.sh 编辑MEM_ARGS参数为1024
./bsu.sh -install -patch_download_dir=/root/Oracle/Middleware/utils/bsu/cache_dir/ -patchlist=EJUW -prod_dir=/root/Oracle/Middleware/wlserver_10.3 -verbose
./bsu.sh -install -patch_download_dir=/root/Oracle/Middleware/utils/bsu/cache_dir/ -patchlist=ZLNA -prod_dir=/root/Oracle/Middleware/wlserver_10.3 -verbose
- 重启服务:
docker restart d1b6be39e32e
这时候,使用原先的poc已经是失效了,说明补丁成功打上
二、补丁分析
配置好weblogic的远程调试端口后,复制jar包,导入idea
详细步骤看前面一篇文章:https://www.cnblogs.com/yyhuni/p/15137095.html
补丁位置:
weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream
weblogic.rjvm.MsgAbbrevInputStream.class
weblogic.iiop.Utils.class
第一个位置在InboundMsgAbbrev
中,新增了个判断
重点在ClassFilter.isBlackListed
判断是否存在黑名单中,跟进方法
方法isBlackListed
中对className和pkgName都进行了黑名单判断,匹配到了则返回true。黑名单list
在值为org.apache.commons.collections.functors.ChainedTransformer
时候抛出了异常
补丁的第二个位置MsgAbbrevInputStream
也是做了同样的判断
现在来进行一遍流程分析,先看下之前的整个调用栈
POC伪造的T3协议数据包,发送到服务器,服务器反序列化处理到了InboundMsgAbbrev#readObject
方法中
switch分发节点,到了case0中,调用了(new InboundMsgAbbrev.ServerChannelInputStream(in))
的readObject
方法来进行的反序列化
计算得出为InboundMsgAbbrev
类中的一个内部类ServerChannelInputStream
以下是ServerChannelInputStream
类的继承图
其继承了ObjectInputStream
,并重写了resolveClass
方法
weblogic反序列化类时候调用的是ServerChannelInputStream
的readObject
方法,而在执行到resolveClass
方法的时候调用的是ServerChannelInputStream
重写的resolveClass
方法,在方法中对其做了黑名单过滤导致无法执行后面的readObject
、readExternal
、readResolve
方法。
三、绕过黑名单
要想绕过黑名单,则需要寻找一个不在黑名单的类。要知道,ObjectInputStream
在执行readObject
方法的时候,除了会调用反序列化类的readObject方法外,还会调用readExternal
、readResolve
,详细调用过程可以看https://www.cnblogs.com/yyhuni/p/15127416.html
所以weblogic.jms.common.StreamMessageImpl
类就被挖掘了出来。其StreamMessageImpl#readExternal
中,会调用var5的readObject
方法,而var5是一个ObjectInputStream
对象
四、漏洞分析
攻击机
这里使用weblogic_cmd构造的poc:https://github.com/5up3rc/weblogic_cmd
-H "192.168.202.129" -C "touch /tmp/success" -B -os linux
这里把CC1的利用链,进行了序列化后传入了streamMessageImpl
方法
跟进streamMessageImpl
方法,new了一个StreamMessageImpl
对象,这个对象也就是构造payload的关键,然后把序列化转换后的byte数组传入了setDataBuffer
方法
跟进setDataBuffer
,对this.buffer
和this.length
进行了赋值操作
随后把获得的StreamMessageImpl
对象又进行了一次序列化操作(序列话后的payload传入对象,再把对象进行了序列化)
StreamMessageImpl
对象序列化会调用writeExternal
方法
在StreamMessageImpl
对象的writeExternal
方法中进行了重写,把之前的payload给write进了ObjectOutputStream
对象中
最后返回给了byte[] payload,然后进行了T3协议构造并且发送给了服务器
服务端
在服务端接受到payload,随后进行了反序列化操作,跳转到InboundMsgAbbrev#resolveClass
方法中,进行黑名单判断
黑名单中并没有StreamMessageImpl
这个类,返回false,走入else中
接下来就会到StreamMessageImpl#readExternal
方法
switch中由前面构造payload时候写入,case为1
此时的var4就是CC1的承载了payload的AnnotationInvocationHandler
序列化后的BufferInputStream
最后调用了var5.readObject就触发了AnnotationInvocationHandler#readObject
方法了
总结
在这里用了StreamMessageImpl
类来绕过黑名单检查,把AnnotationInvocationHandler
序列化后通过重写的writeExternal
方法给write进了ObjectOutputStream
对象中,调用StreamMessageImpl
类的readExternal
传入了参数并执行了参数的readObject方法从而触发了调用链
参考:https://xz.aliyun.com/t/8443
weblogic漏洞分析之CVE-2016-0638的更多相关文章
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- Weblogic漏洞分析之JNDI注入-CVE-2020-14645
Weblogic漏洞分析之JNDI注入-CVE-2020-14645 Oracle七月发布的安全更新中,包含了一个Weblogic的反序列化RCE漏洞,编号CVE-2020-14645,CVS评分9. ...
- weblogic漏洞分析之CVE-2021-2394
weblogic漏洞分析之CVE-2021-2394 简介 Oracle官方发布了2021年7月份安全更新通告,通告中披露了WebLogic组件存在高危漏洞,攻击者可以在未授权的情况下通过IIOP.T ...
- weblogic漏洞分析之CVE-2017-10271
weblogic漏洞分析之CVE-2017-10271 一.环境搭建 1)配置docker 这里使用vulhub的环境:CVE-2017-10271 编辑docker-compose.yml文件,加入 ...
- weblogic漏洞分析之CVE-2017-3248 & CVE-2018-2628
CVE-2017-3248 & CVE-2018-2628 后面的漏洞就是2017-3248的绕过而已,所以poc都一样,只是使用的payload不同 本机开启JRMP服务端 ->利用T ...
- weblogic之CVE-2018-3191漏洞分析
weblogic之CVE-2018-3191漏洞分析 理解这个漏洞首先需要看这篇文章:https://www.cnblogs.com/afanti/p/10193169.html 引用廖新喜说的,说白 ...
- CVE-2016-0143 漏洞分析(2016.4)
CVE-2016-0143漏洞分析 0x00 背景 4月20日,Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC.该漏洞影响所有版本的Windows操作系统,攻击 ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
随机推荐
- vue中rem的转换
1 function rems(doc: any, win: any): void { 2 let docEl = doc.documentElement, 3 resizeEvt = 'orient ...
- vue页面初始化
HTML: <div id="app"> <input type="" class="app" v-model=" ...
- vulnhub-靶机Lampiao
目标信息:攻击机IP地址:192.1681.10 Lampiao靶机IP地址:192.168.1.12 DC-1靶机IP地址:192.168.1.7 目的:获取靶机root权限和靶机设置的所有flag ...
- Use Emacs as Personal Knowledge Base
http://stackoverflow.com/questions/2014636/how-to-maintain-an-emacs-based-knowledge-base
- [.NET大牛之路 007] 详解 .NET 程序集
.NET大牛之路 • 王亮@精致码农 • 2021.07.13 上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前 ...
- 不懂Ribbon原理的可以进来看看哦,分析RibbonClientConfiguration完成了哪些核心初始操作
本文在前一篇文章的基础上来继续分析Ribbon的核心内容. 不懂Ribbon原理的可以进来看看哦,分析SpringBoot自动装配完成了Ribbon哪些核心操作 RibbonClientConfi ...
- GraphQL API vs REST API
REST是构建API的一种流行方法,而且比GraphQL应用更广泛,让我们看看GraphQL和REST的区别. Rest是一个概念 REST是一个事实上的架构标准,但它实际上没有规范,有大量的非官方定 ...
- 【ShardingSphere技术专题】「ShardingJDBC」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)
前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Shardin ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- 【XSS-labs】level 6-10
Level 6 查看源码:对URL中的传参进行了HTML实体化转义,搜索框中的值对 src\onxxxxx\data\href进行了限制. 采用大小写绕过,在搜索框输入payload,注意闭合inpu ...