环境:Weblogic 12.1.3
实战中,大多数weblogic都部署在内网环境中,通过Nat协议使处于外网的用户访问。对于正常用户访问来说没有问题,对于攻击者使用T3协议回显或者攻击,则会出现很大问题,会提示如下
对于该问题,网上的解释如下
解决方案是启动weblogic时,添加一个参数-Dweblogic.rjvm.enableprotocolswitch=true
。但是我们不可能奢求被攻击者开启这个参数,所以我们就需要通过其他方式去解决这个问题。下图错误堆栈
我们可以看出,需要想办法修改t3发送的内容,将其中的公网地址和端口换为weblogic内网地址与端口。由此,延申出两个问题
如何修改发送内容
如何根据weblogic的公网地址与端口,得到weblogic的内网地址与端口
还是上图,在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,我们只需要魔改JVMID
的hostAddres
s与dnsName
以及一切与地址有关的东西,还有ports的值即可完成Nat内网穿透的任务。最简单的办法,魔改JVMID即可。我们可以本地创建一个JVMID
,修改里面的逻辑。
如图所示
修改之后,重新执行一下,完美执行命令
这里我们需要回顾iiop协议穿透内网的知识。iiop在创建context的时候,会根据服务端返回的内网地址与端口,创建context。随后通过context与weblogic交互时,会直接连接context中的内网地址。
在途中我们可以很明显的看出,iiop协议会直接连接内网IP与端口,所以会爆出timeout错误。
在这里,我们可以通过iiop创建与服务器的连接,然后获取其中的内网ip与port,如图
自动获取weblogic内网地址与端口的任务至此成功完成
本文作者:宽字节安全
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/163761.html