一、概述
CVE-2023-21839是weblogic中的远程代码执行漏洞,由于weblogic IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问weblogic server,漏洞利用成功可能会导致oracle weblogic服务器被控制,远程注入操作系统命令或代码。
T3协议:
用于在Weblogic服务器和其他类型的Java程序之间传输信息的协议。Weblogic会跟踪连接到应用程序的每个Java虚拟机,要将流量传输到Java虚拟机,Weblogic会创建一个T3连接。该链接会通过消除在网络之间的多个协议来最大化效率,从而使用较少的操作系统资源。用于T3连接的协议还可以最大限度减少数据包大小,提高传输速度。
二、原理
1. 协议层缺陷:T3/IIOP的开放性
WebLogic的T3协议(专有协议)和IIOP协议(基于CORBA的标准协议)用于分布式Java应用间的通信。这两种协议默认开启且未对访问权限进行严格限制,允许未经身份验证的远程用户通过7001端口直接与WebLogic服务交互。攻击者通过构造恶意请求,利用协议层对远程对象绑定的支持,将恶意对象注入服务端。
2. 漏洞触发点:OpaqueReference与lookup方法
漏洞的核心在于WebLogic在处理远程绑定的对象时,未对lookup方法中的参数进行安全校验。具体流程如下:
远程对象绑定:攻击者通过T3/IIOP协议将继承自OpaqueReference接口的恶意对象绑定到WebLogic服务端。OpaqueReference是WebLogic内部用于延迟解析对象的接口,其getReferent()方法会在服务端执行lookup操作时被调用。
参数可控:攻击者可控制getReferent()方法中的remoteJNDIName参数,将其指向攻击者控制的恶意JNDI服务地址(如LDAP或RMI服务)。
JNDI注入:服务端在解析remoteJNDIName时,会向恶意JNDI服务器发起请求,加载并执行远程类(如通过javax.naming.Reference加载恶意Java类)。
3. 利用链:从JNDI到RCE
漏洞利用依赖以下关键步骤:
1.恶意JNDI服务搭建:攻击者部署包含恶意类的LDAP/RMI服务器(例如使用JNDIExploit工具),提供构造的反序列化Payload或远程类加载功能。
2.触发远程加载:通过lookup操作诱导WebLogic服务端连接恶意JNDI服务,下载并实例化攻击者指定的类(如Basic/ReverseShell类),从而执行任意命令。
3.执行环境依赖:若目标服务器的JDK版本较低(如≤8u191)或存在可利用的反序列化小工具(如commons-collections库),攻击者可通过反序列化直接实现RCE;否则需依赖远程类加载机制
4.漏洞模拟代码
继承OpaqueReference:WebLogic在处理远程绑定的对象时,若对象实现此接口,会在lookup时调用getReferent()方法。
控制jndiUrl:攻击者通过构造jndiUrl参数(如ldap://attacker.com/Exploit),诱导服务端在解析时连接恶意JNDI服务器。
5.漏洞影响范围
受影响版本:
WebLogic Server 12.2.1.3.0、12.2.1.4.0、14.1.1.0.01510。
利用条件:T3/IIOP协议开放且未安装官方补丁,JDK版本或依赖库存在可利用的链711。
三、复现
访问到靶场地址:
http://192.168.40.135:7001/console/login/LoginForm.jsp
下载exp,发现为go源码,需要进行编译。
安装go编译环境并编译。
查看文件权限,发现是可执行文件:
启动LDAP服务监听端口:
服务端接收到了请求,说明漏洞存在。
为了getshell,需要用以下命令查找如何构造可执行任意命令的poc:
构造poc:
进入靶机容器,切换到文件创建目录,发现创建成功:
使用nc开启监听:
构造poc反弹shell:
靶机执行连接命令:
此时发现LDAP服务端已接收到请求:
等了一小会,发现反弹shell回来了:
成功getshell。
原文始发于微信公众号(智检安全):CVE-2023-21839-WebLogic Server远程代码执行
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论