作者:宽字节安全
本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送!
投稿邮箱:[email protected]
环境:Weblogic 12.1.3
实战中,大多数weblogic都部署在内网环境中,通过Nat协议使处于外网的用户访问。对于正常用户访问来说没有问题,对于攻击者使用T3协议回显或者攻击,则会出现很大问题,会提示如下
对于该问题,网上的解释如下
解决方案是启动weblogic时,添加一个参数-Dweblogic.rjvm.enableprotocolswitch=true
。但是我们不可能奢求被攻击者开启这个参数,所以我们就需要通过其他方式去解决这个问题。
下图错误堆栈
我们可以看出,需要想办法修改t3发送的内容,将其中的公网地址和端口换为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内网地址与端口的任务至此成功完成
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1180/