fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞

小编注

   本文是osword同学的Java安全学习笔记之一,将详细分析Weblogic历史,从CVE-2015至CVE-2019相关历史漏洞入手,记录学习Java反序列化漏洞的心得

CVE-2015-4852

影响版本

Oracle WebLogic Server 12.2.1.0

Oracle WebLogic Server 12.1.3.0Oracle WebLogic Server 12.1.2.0Oracle WebLogic Server 10.3.6.0

漏洞原理

测试环境:10.3.6.0 jdk7u21 debian

利用t3协议通信反序列化CC链,简化栈如下。

InboundMsgAbbrev.readObject() -> ... -> AnnotationInvocationHandler.readObject() -> AnnotationInvocationHandler.invoke() -> LazyMap.get() -> .... -> Runtime.exec()

漏洞复现

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections1 "open /System/Applications/Calculator.app" > "/tmp/tm.ser"python weblogic_t3.py 127.0.0.1 7001 /tmp/tm.ser

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第1张图片

漏洞分析

关注反序列化中间过程,利用 LazyMap链进行反序列化,载体套用AnnotationInvocationHandler类,this.memberValues可控为LazyMap类。利用代理机制,在执行entrySet方法使用会优先执行invoke方法

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第2张图片

接着触发LazyMap.get方法,this.factory可控Chained-Transformer类,最后反射执行Runtime.getRuntime.exe-c('xxx').

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第3张图片

漏洞修复

resolveClass拦截反序列化的类,将org.apache.comm-ons.collections.functors添加进黑名单。应用位置如下

weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStreamweblogic.rjvm.MsgAbbrevInputStream.classweblogic.iiop.Utils.class

CVE-2016-0638

影响版本

Oracle WebLogic Server 12.2.1.0

Oracle WebLogic Server 12.1.3.0

Oracle WebLogic Server 12.1.2.0

Oracle WebLogic Server 10.3.6.0

漏洞原理

测试环境:10.3.6.0 jdk7u21 debian

利用StreamMessageImpl封装的CommonsCollecti-ons1恶意利用链,使恶意类反序列化在StreamMessageI-mpl.readExternal中进行,不在weblogic.rjvm.Inbo-undMsgAbbrev.class :: ServerChannelInputStream中反序列化,以此绕过补丁

漏洞复现

重写writeExternal类,以此构造出符合readExternal反序列化的数据流。exp.getObject就是CommonsCollecti-ons1最终构造的对象。如下图,执行弹个计算器。

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第4张图片

漏洞分析

StreamMessageImpl.readExternal中调用readObject反序列化数据流.针对var1反序列化的条件有

  1. 判断读取的第一个字节是否为1

  2. PayloadFactoryImpl.ceatePaload方法中需要读取到var1(恶意类数据流)的长度.

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第5张图片

所以依据此我们可以进行StreamMessageImpl.write-External进行重写.

var3.writeObject(exp.getObject()); // 传入CommonsCollections1var1.writeByte(1); // 第一个字符写入字符1var1.writeInt(var5.length); // 写入恶意类数据流长度

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第6张图片

CVE-2016-3510

影响版本

Oracle WebLogic Server 12.2.1.0Oracle WebLogic Server 12.1.3.0Oracle WebLogic Server 12.1.2.0Oracle WebLogic Server 10.3.6.0

漏洞原理

MarshalledObject调用构造方法中存在序列化操作,且该对象中存在readResolve方法能够在反序列化时被调用且反序列化数据流可控.

漏洞复现

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第7张图片

漏洞分析

跟进MarshalledObject.readResolve方法.其中对this.objBytes调用readObject方法反序列化

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第8张图片

回溯如何构造this.objBytes,发现是在创建Marsha-lledObject对象时候,可以直接插入恶意类生成序列化数据流

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第9张图片

CVE-2019-2890

影响版本

WebLogic Server 10.3.6.0WebLogic Server 12.1.3.0WebLogic Server 12.2.1.3

漏洞原理

PersistentContext在序列化时候能够写入恶意类对象,在反序列化时PersistentContext对象调用readObject时对PersistentContext封装的序列化对象再次反序列化,可以绕过黑名单的限制

漏洞复现

测试环境:10.3.6.0 + jdk7u21

1.vps开启JRMPListener

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 8000 Jdk7u21 "open /System/Applications/Calculator.app"

2. T3协议利用

python weblogic_t3.py 127.0.0.1 7001 /tmp/cve-2019.2890.ser

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第10张图片

漏洞分析

该分析主要针对,由于直接复制PersistentContext类进行构造,中间会出现一些问题

  • 实例化对象时会调用SecurityServiceManager.i-sKernelIdentity进行判断,由于不影响writeO-bject对象创建直接注释掉即可.

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第11张图片

  • 获取KERNEL_ID时候,网上师傅的文章发现生成序列化时候卡住,在调试时并没有出现该情况.测试的版本在调用SubjectManager.getSubject-Manager方法代码如下.

b612fc22d469ecff9e99a8bb422987a8.png

83080fe051039160cd870a3d433ed9f4.png

  • 在反序列化时,需要进行解密。所以在调用writeSubjec写入时需要执行EncryptionUtil.e-ncrypt对数据流进行加密.且加密条件需要本机的SerializedSystemIni.dat文件

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第12张图片

漏洞修复

resolveClass中验证反序列化类是否为Subject子类

CVE-2017~CVE-2018

CVE-2017至2018更多是替换恶意类绕过补丁,不再赘述。

CVE-2017-3248

MarshalledObject+JRMP

Apache Commons Colletions基础漏洞修复,与CVE-2016-3510利用相同不过恶意类替换为JRMP,利用java.rmi.registry.Registry.

CVE-2018-2628

MarshalledObject+JRMP

java.rmi.registry.Registry替换为java.rmi.activation.Ac-tivator,绕过resolveProxyClass判断

CVE-2018-2893

CVE-2017-0638 + CVE-2017-3248即StreamMessageImpl中封装JRMPClient

结语

  1. Weblogic利用T3协议反序列化,大多数是利用类封装恶意类绕过补丁(resolveClass).

  2. 在构造恶意类时可以重写writeObject/write-External方法.需要传入恶意类数据流的长度

  3. 关于JRMP类可以实现自己打自己可以参考链接:https://xz.aliyun.com/t/7079

  4. IDEA中进行低版本编译File->Project Structure->Project language level中选择

参考链接

1. https://www.jianshu.com/p/38033935a914

2. https://www.cnblogs.com/afanti/p/10240232.html

3. https://paper.seebug.org/333/

4. https://xz.aliyun.com/search?keyword=weblogic

5. https://www.cnblogs.com/afanti/p/10240232.html

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第13张图片

逐日实验室  招兵买马

二进制安全研究员(偏Pwn方向)   校招、实习、社招

base:杭州

岗位职责

1. 重大Windows漏洞应急

2. 分析Crash样本和软件漏洞,编写漏洞利用代码
3. 前沿技术研究,落地产品demo岗位要求1. 熟悉X86/X64的汇编语言,有一定的逆向能力
2. 熟悉常见的二进制漏洞及利用方式
3. 熟悉OD、IDA、WINDBG等调试工具
4. 能够编写Windows历史漏洞EXP
5. 有技术洞察力,对安全技术研究有热爱,对研究前沿技术感兴趣
6. 获得过国际或者国内重大CTF比赛名次者优先加分项:
1. 对Windows系统有较深入了解者优先

二进制安全研究员(偏Re方向)   校招、实习

base:杭州

岗位职责
1. 对在野的APT或包含CVE利用的恶意样本进行跟踪分析
2. 恶意软件攻防,对反病毒以及反反病毒进行深入研究
3. 前沿技术研究,落地能增强产品安全能力的demo岗位要求
1. 有基本的代码功底以及较为熟练的逆向能力
2. 熟练掌握调试工具的使用,熟悉常用的调试技巧
4. 熟悉windows/Linux平台,了解操作系统的基本工作原理
5. 熟悉Windows/Linux平台下常见的恶意软件攻防手段
6. 有技术洞察力,对安全技术研究有热爱,对研究前沿技术感兴趣加分项:
1.  对著名的恶意软件有过完整的实战分析
2.  对内核攻防有了解
3.  了解主流的安全产品对恶意行为的检测原理
4.  参与过知名安全工具的开发或了解过其实现原理

Web 安全研究员   校招、实习

base:杭州

岗位职责
1. 前沿攻防技术研究
2. 参与红蓝对抗任务
3. 企业安全产品赋能岗位要求
1. 熟悉渗透测试的一般流程和技巧,有过实战经验(包括src、众测、护网等)
2. 熟悉php/python/java等任意一门语言的代码审计
3. 至少熟练掌握一门开发语言
4. 具有独立的漏洞挖掘、研究能力
5. 有技术洞察力,对安全技术研究有热爱,对研究前沿技术和攻防对抗感兴趣
6. 获得过国际或者国内重大CTF比赛名次者优先加分项:
1. 熟悉内网渗透,具有大型、复杂网络环境的内网渗透经验
2. 拥有常见安全产品绕过经验,如WAF、IDS等

递送简历邮箱:[email protected] 

投递格式:姓名+岗位+来自逐日公众号 ▼ 逐日干货 ▼ CVE-2020-13921 Apache SkyWalking SQL注入漏洞分析

Edge CVE-2017-0234 漏洞复现与利用

从几种主动防御场景看MITRE Shield中的欺骗之道

某APT组织样本及其利用OFFICE漏洞分析

CVE-2020-14364 QEMU逃逸漏洞分析(含完整EXP)

47cd147904de180dde1459bc37e0ab05.png

逐日实验室,寓意为追逐技术永不停歇,是默安科技安全研究院下的一支团队。专注于信息安全攻防研究,包括漏洞挖掘、逆向工程、红蓝对抗、代码审计、产品赋能等方向。

fastjson 序列化 不包括转义字符_Weblogic T3 反序列化历史漏洞_第14张图片   逐日实验室 长按左侧二维码 获取更多安全资讯点击这里获取所有POC

你可能感兴趣的:(fastjson,序列化,不包括转义字符,resttemplate,序列化)