weblogic漏洞分析之CVE-2016-0638
字数 1590 2025-08-05 00:15:46
WebLogic漏洞分析之CVE-2016-0638教学文档
一、漏洞概述
CVE-2016-0638是Oracle WebLogic Server中的一个远程代码执行漏洞,存在于WebLogic的T3协议反序列化过程中。攻击者可以通过构造恶意的T3协议请求,在目标服务器上执行任意代码。
二、环境搭建
1. 基础环境准备
- 使用前一篇文章的环境(参考:https://www.cnblogs.com/yyhuni/p/15137095.html)
- 需要下载并安装两个补丁:
- p20780171_1036_Generic
- p22248372_1036012_Generic
2. 补丁安装步骤
- 将补丁复制到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
三、补丁分析
1. 补丁修改的关键类
- weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream
- weblogic.rjvm.MsgAbbrevInputStream.class
- weblogic.iiop.Utils.class
2. 关键修改点
在InboundMsgAbbrev中新增了黑名单检查:
ClassFilter.isBlackListed
3. 黑名单机制
isBlackListed方法对className和pkgName进行黑名单判断,匹配则返回true。黑名单包含:
- org.apache.commons.collections.functors.ChainedTransformer
- 其他相关危险类
四、漏洞原理
1. 原始漏洞流程
- 攻击者发送恶意T3协议数据包
- 服务器反序列化处理到
InboundMsgAbbrev#readObject - 通过
ServerChannelInputStream的readObject方法进行反序列化 - 最终触发恶意代码执行
2. 补丁后的防护机制
补丁通过重写resolveClass方法,在反序列化过程中进行黑名单检查,阻止危险类的反序列化。
五、绕过黑名单的方法
1. 绕过思路
寻找不在黑名单中的类,利用其反序列化过程中的二次反序列化机会。
2. 关键类:weblogic.jms.common.StreamMessageImpl
- 不在黑名单中
- 其
readExternal方法会调用传入的ObjectInputStream的readObject方法 - 可以作为二次反序列化的跳板
六、漏洞利用
1. 攻击工具
使用weblogic_cmd工具构造POC:
-H "192.168.202.129" -C "touch /tmp/success" -B -os linux
2. 攻击流程
- 构造CC1利用链并序列化
- 将序列化数据传入
StreamMessageImpl对象 - 通过
setDataBuffer方法设置数据 - 对
StreamMessageImpl对象进行二次序列化 - 构造T3协议数据包并发送
3. 服务端处理流程
- 接收payload并进行反序列化
InboundMsgAbbrev#resolveClass检查通过(因为StreamMessageImpl不在黑名单)- 进入
StreamMessageImpl#readExternal方法 - 触发二次反序列化,执行恶意代码
七、防御措施
- 及时安装官方补丁
- 限制T3协议的访问
- 监控异常反序列化行为
- 使用最新的WebLogic版本
八、总结
CVE-2016-0638漏洞利用WebLogic T3协议的反序列化机制,通过精心构造的StreamMessageImpl对象绕过黑名单检查,最终实现远程代码执行。理解该漏洞有助于更好地防御类似的反序列化漏洞。
九、参考链接
- 原文参考:https://xz.aliyun.com/t/8443
- weblogic_cmd工具:https://github.com/5up3rc/weblogic_cmd