作者:宽字节安全
本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送!
投稿邮箱:paper@seebug.org

简介

环境:Weblogic 12.1.3

实战中,大多数weblogic都部署在内网环境中,通过Nat协议使处于外网的用户访问。对于正常用户访问来说没有问题,对于攻击者使用T3协议回显或者攻击,则会出现很大问题,会提示如下

对于该问题,网上的解释如下

解决方案是启动weblogic时,添加一个参数-Dweblogic.rjvm.enableprotocolswitch=true。但是我们不可能奢求被攻击者开启这个参数,所以我们就需要通过其他方式去解决这个问题。 下图错误堆栈

我们可以看出,需要想办法修改t3发送的内容,将其中的公网地址和端口换为weblogic内网地址与端口。由此,延申出两个问题

  1. 如何修改发送内容
  2. 如何根据weblogic的公网地址与端口,得到weblogic的内网地址与端口

1. 如何修改发送的协议内容

还是上图,在WLInitialContextFactoryDelegate中,调用var10.FindOrCreateRJVM。最终会调用weblogic.rjvm.ConnectionManager.bootstrap,根据提供的公网url与port去创建一个JVMID。如图:

随后会调用weblogic.rjvm.ConnectionManager.findOrCreateConnection。 这里与发包的函数主要如下:

首先根据连接字符串,向待连接的weblogic服务器发送t3握手报文,返回一个MsgAbbrevJVMConnection类。

随后调用this.createIdentifyMsg去生成t3协议报文,然后调用MsgAbbrevJVMConnection.sendMsg将协议内容通过t3协议发送给weblogic服务器。weblogic.rjvm.ConnectionManager.createIdentifyMsg的函数如下图

我们从这里可以看出,会将JVMID var1的值,作为t3协议的header。

我们继续回到ConnectionManager函数中,然后调用MsgAbbrevJVMConnection.sendMsg函数,最终发送断点截图如下

所以,如果想解决T3穿透nat,我们只需要魔改JVMIDhostAddress与dnsName以及一切与地址有关的东西,还有ports的值即可完成Nat内网穿透的任务。 最简单的办法,魔改JVMID即可。我们可以本地创建一个JVMID,修改里面的逻辑。

如图所示

修改之后,重新执行一下,完美执行命令

2. 获取weblogic内网地址与端口

这里我们需要回顾iiop协议穿透内网的知识。iiop在创建context的时候,会根据服务端返回的内网地址与端口,创建context。随后通过context与weblogic交互时,会直接连接context中的内网地址。

在途中我们可以很明显的看出,iiop协议会直接连接内网IP与端口,所以会爆出timeout错误。

在这里,我们可以通过iiop创建与服务器的连接,然后获取其中的内网ip与port,如图

自动获取weblogic内网地址与端口的任务至此成功完成


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1180/