weblogic反序列化介绍及环境搭建

weblogic反序列化介绍

weblogic是一个常用的web中间件,它的反序列化漏洞也算是比较经典,而在weblogic里面其实反序列化漏洞大致分为两种,一个是基于T3协议的反序列化漏洞,一个是基于XML的反序列化漏洞,本来想通过一篇文章把全部介绍完,但是发现weblogic相关绕过还是能介绍挺多的,所以想基于两种协议另外再写一写,还有一个原因就是配置环境配了好长时间,这篇就当作专门介绍环境搭建了吧

基于xml

这里xml本身就是序列化对象,通过XMLDecoder进行反序列化解析(循环遍历XML数据并进行拼接处理),最终拼接出完整的恶意语句并执行,列出CVE
CVE-2017-3506
CVE-2017-10271
CVE-2019-2729
CVE-2019-2725

基于T3

其实Ysoserial 生成的序列化文件也是基于T3构造的,通过直接传序列化好的payload,触发readobject()执行,列出CVE
CVE-2015-4852
CVE-2016-0638
CVE-2016-3510
CVE-2017-3248
CVE-2018-2628
CVE-2018-2893

环境搭建

个人觉得环境搭建永远都是最烦的地方,这里我同时尝试在kali上和我都云服务器上进行搭建,最后在centos云服务器上搭建成功,虽然是看着教程搭建,但是大大小小问题还是让我搞了两天,这里记录一下我最后一次成功时候的操作,两个搭建参考文章,如果还有搭建问题请留言或者私信我。
Java安全之初探weblogic T3协议漏洞 漏洞环境搭建

WebLogic安全研究报告

我这里也是用的师傅们做好的环境地址(也就是A-team 的weblogic漏洞环境)

漏洞环境地址:https://github.com/QAX-A-Team/WeblogicEnvironment

jdk地址:https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html

weblogic下载地址:https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html

下载完上面三个环境后把下载好的jdk文件放在该项目的/jdks文件夹下,weblogic的源码放在/weblogics文件夹下。
在这里插入图片描述
然后我对Dockerfile的两个小改动,第一个红框由

FROM centos  -->  FROM centos:centos7

然后删了第二个红框里面的东西(一直报错,不是说没有yum就是说没有libmsl,最后摆烂直接删掉)
在这里插入图片描述
最后直接运行就ok了,用法+实例

docker build --build-arg JDK_PKG=<YOUR-JDK-PACKAGE-FILE-NAME> --build-arg WEBLOGIC_JAR=<YOUR-WEBLOGIC-PACKAGE-FILE-NAME>  -t <DOCKER-IMAGE-NAME> .
docker build --build-arg JDK_PKG=jdk-7u21-linux-x64.tar.gz --build-arg WEBLOGIC_JAR=wls1036_generic.jar  -t weblogic1036jdk7u21 .

docker run -d -p 7001:7001 -p 8453:8453 -p 5556:5556 --name <CONTAINER-NAME> <DOCKER-IMAGE-NAME-YOU-JUST-BUILD>
docker run -d -p 7001:7001 -p 8453:8453 -p 5556:5556 --name weblogic1036jdk7u21 weblogic1036jdk7u21

访问http://ip:7001/console/login/LoginForm.jsp,出现weblogic就ok了
在这里插入图片描述
秉承着能用就行的学习思想,就没有再做过多的研究,这里使用一个weblogic检测工具进行测试(应该是以前GitHub上下载的吧,如果实在找不到需要的话私信我)

小打个码

接下来是将一些weblogic的依赖Jar包给导出来进行远程调试

mkdir ./middleware
    
docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/modules ./middleware/
    
docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/wlserver ./middleware/
//这里我手动在middleware文件夹下创建了一个coherence_3.7
docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/coherence_3.7/lib ./coherence_3.7/lib

弄好了以后我这里使用xftp把它转到我的桌面上,直接把它当成一个项目用idea去open
在这里插入图片描述

这里再加上一起导出来的包
在这里插入图片描述

再来配置远程调试,给我的ip打个码
在这里插入图片描述

在这里插入图片描述
所有都配置好之后我们找到入口类

wlserver\server\lib\wlthint3client.jar!\weblogic\rjvm\InboundMsgAbbrev.class

断点后执行检测工具,如果能直接跳到断点处就是ok了

在这里插入图片描述

浅浅分析

到上面这一步配置就完成了,不过既然写到这了,先浅浅分析一下,(这里其实就是t3那条链最终执行的地方)
在这里插入图片描述
这里调用创建一个内部类,并且调用readObject方法,跟进查看一下 ServerChannelInputStream
在这里插入图片描述
ServerChannelInputStream继承自ObjectInputStream类,这里没有重写readObject,只重写了resolveClass,那么调用 ServerChannelInputStream#readObject 方法就是调用 ObjectInputStream#readObject 方法,并且这里调用resolveClass实际上调用的还是父类ObjectInputStreamresolveClass方法,没有任何防护,既然说到resolveClass,下面再小提一下它的作用

浅谈resolveClass

这里进入到父类的resolveClassresolveClassObjectInputStream.readObject()中必经的一个方法,就是说在反序列化过程中,序列化的数据都会从resolveClass这个方法中经过一次,这里为后面防御和绕过做了铺垫。
在这里插入图片描述
resolveClass方法的作用是根据反射从类序列化描述符中获取类的Class对象,如果在resolveClass中增加一个检查,检查一下该类的序列化描述符中记录的类名是否在黑名单上,如果在黑名单上,直接抛出错误,不允许获取恶意的类的Class对象,这样就能对其增加防护。其实后面的cve都是在这里不断地绕过相应的白名单黑名单而产生的。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值