Confluence 未授权漏洞分析(CVE-2023-22515)

目录

0x01 漏洞描述

0x02 影响版本

0x03 环境搭建

0x04 漏洞分析

0x05 未授权之后的 RCE


0x01 漏洞描述

Confluence 是由 Atlassian 开发的企业级协作软件。2023年10月,Atlassian 官方披露 CVE-2023-22515 Atlassian Confluence Data Center & Server 权限提升漏洞。攻击者可构造恶意请求创建管理员,从而登录系统,造成敏感信息泄漏等。

如果 Confluence 站点托管在 Atlassian Cloud(域名为:),则不受此漏洞影响。atlassian.net

0x02 影响版本

8.0.0 - - 8.0.4

8.1.0 - - 8.1.4

8.2.0 - - 8.2.3

8.3.0 - - 8.3.2

8.4.0 - - 8.4.2

8.5.0 - - 8.5.1

0x03 环境搭建

安装包 Confluence Server Download Archives | Atlassian

jar 包:

https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.1.zip  
https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.2.zip

大致的安装可以看 Confluence漏洞分析(CVE-2023-22515) | CN-SEC 中文网

其中有一步数据库的安装会存在一些问题,首先是新建数据库的时候,对编码有要求

CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

随后是连接

jdbc:mysql://localhost/confluence?sessionVariables=transaction_isolation='READ-COMMITTED'

设置数据库.png

在配置数据库时需要指定READ-COMMITTED

下一步是做调试准备,这里的调试需要找到 Service

服务.png

随后在 cmd 里面运行这一个行命令,就会跳出如图所示的框框

tomcat9w.exe //ES//Confluence151123100612

漏洞分析/CVE-2023-22515 Confluence 未授权漏洞分析/cmd.png

随后添加 JAVA_OPTS,进行动调

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注“freebuf”获取!】

(60) 网安学习成长路径思维导图
(100) 150+网安经典常用工具包
(1800) <>+SRC漏洞分析报告
(<>) <>+网安攻防实战技术电子书
(<>) 最权威CISSP 认证考试指南+题库
(<>) 超<>页CTF实战技巧手册
(<>) 最新网安大厂面试题合集(含答案)(
<>) APP客户端安全检测指南(安卓+IOS)

漏洞分析/CVE-2023-22515 Confluence 未授权漏洞分析/debug.png

0x04 漏洞分析

根据官方的公告,修复建议是给 打头的接口做鉴权校验/setup

<security-constraint>
<web-resource-collection>
<url-pattern>/setup/*</url-pattern>
<http-method-omission>*</http-method-omission>
</web-resource-collection>
<auth-constraint />
</security-constraint>

由于 Confluence 这里的框架是基于 S2 的,S2 的大致流程如 su18 师傅的图所示

s2Route.png

也就是说我们现在需要去找一下 接口是怎么被处理的,直接分析是比较难的,所以先 diff 一下代码。/setup/*

  • 首先 里面struts2.xml

  • 修复版本新增了 struts.override.acceptedPatterns

  • 修复版本删除了 server-info action

strutsXMLDiff.png

  • 接着是 类里面增加了部分内容,对属性 setupPersister 和 applicationConfig 做了限制BootstapStatusProviderImpl

BootstapStatusProviderImpl.png

这里有点没看懂修了什么,所以我先动调观察具体接口是怎么处理的,根据 Struts2 的特性,去到 里面找对应的 Interceptor,不难找到具体处理的拦截器是 struts.xmlSetupCheckInterceptor

设置拦截器.png

开始动调,看一下 接口的逻辑是怎么处理的。/setup/setupadministrator.action

中间走到 时,在新版本的 fix 里面是增加了这一段的 配置的com.atlassian.config.ApplicationConfig#isSetupCompleteReadOnlyApplicationConfig

isSetupComplete.png

所以这里的漏洞利用思路大概就是先动态修改 或 ,在触发了这一点之后,能够下一步访问 ,重新配置管理员密码。setupPersisterapplicationConfig/setup/setupadministrator.action

这里具体的实现很有意思,su18 师傅的文章说的很明白,我就直接拿过来用了

Struts2:你说你好累,已无法再爱上谁(一) | 素十八

OGNL 中的根对象即为 ValueStack(值栈),这个对象贯穿整个 Action 的生命周期(每个 Action 类的对象实例会拥有一个 ValueStack 对象)。当Struts 2接收到一个 的请求后,会先建立Action 类的对象实例,但并不会调用 Action 方法,而是先将 Action 类的相应属性放到 ValueStack 的实现类 OgnlValueStack 对象 root 对象的顶层节点( ValueStack 对象相当于一个栈)。在处理完上述工作后,Struts2 就会调用拦截器链中的拦截器,这些拦截器会根据用户请求参数值去更新 ValueStack 对象顶层节点的相应属性的值,最后会传到 Action 对象,并将 ValueStack 对象中的属性值,赋给 Action 类的相应属性。当调用完所有的拦截器后,才会调用 Action 类的 Action 方法。ValueStack 会在请求开始时被创建,请求结束时消亡。.action

我们需要找一个 OGNL 的点, 并且这个点能够以某种方式去调用某个类的 getter / setter, 以此来配置 applicationConfig 的 setupComplete 字段

于是去 diff 跟 Struts2 有关的依赖, 即 和com.atlassian.struts2_struts-support-1.1.0.jarcom.atlassian.struts2_struts-support-1.2.0.jar

差异2.png

发现修改的类是 ,这个类会处理所有的输入,所以 这个请求也会经过它SafeParametersInterceptorserver-info.action

同时,Confluence 使用了 XWork 框架,它允许通过 HTTP 请求来设置 Java 对象的参数:XWork Plugin Complex Parameters and Security

XWork allows the setting of complex parameters on an XWork action object. For example, a URL parameter of will be translated by XWork into the method calls by the XWork parameters interceptor. If returns null, XWork will attempt to create a new object of the appropriate return type using its default constructor, and then set it with formData.name=CharlesgetFormData().setName("Charles")getFormData()setFormData(newObject)

这就允许我们在输入时候传参类似于 ,动调一下?test=a.b.c

http://192.168.80.137:8090/server-info.action?a.b.c

这里会先做过滤,跟进 方法,该方法会对传入的参数进行判断,如果包含关键字或者满足正则匹配则返回 falsethis.filterSafeParameters()

过滤器安全参数.png

BLOCKED_PARAMETER_NAMES: actionErrors、actionMessages  
EXCLUDE_CLASS_PATTERN: .*class[^a-z0-9_].*  
SAFE_PARAMETER_NAME_PATTERN: \w+((\.\w+)|(\[\d+\])|(\['[\w.]*'\]))*  
MAP_PARAMETER_PATTERN: .*\['[a-zA-Z0-9_]+'\]

如果不在黑名单内,最后会调用 方法,这个方法会检查传入的参数是否调用了当前 action 的某个 getter / setter,如果调用了,则判断里面是否有 注解。isSafeComplexParameterName()ParameterSafe

isSafeComplexParameterName.png

如果没有实现 注解,那么 isSafeMethod 就会返回 false@ParameterSafe

这么一看,漏洞成立需要绕过黑名单验证,并且满足 注解,利用条件十分苛刻。继续往下走,回到 ,跟进 方法。能够看到这里是跟进到了 方法,它会重新处理一遍参数,这就导致上面的黑名单完全没生效。@ParameterSafecom.atlassian.xwork.interceptors.SafeParametersInterceptor#doInterceptsuper.doIntercept()com.opensymphony.xwork2.interceptor.ParametersInterceptor#doIntercept

doIntercept.png

跟进 方法后其实就是 S2 处理 OGNL 语句的那一套,参考 Java Struts2 系列 S2-001 | Drunkbaby's BlogsetParameters()

设置参数.png

总的来说, 因为 方法的一些逻辑问题, 导致这个类自身对传入参数的过滤并没有生效, 我们最终还是可以通过 的形式去调用当前 action 的 getter / setter, 并不需要关心方法本身或者它的 returnType 是否使用了 注解SafeParametersInterceptor.doIntercept()a.b.c=e@ParameterSafe

到这里思路就很清晰了,我们只需要构造 OGNL 即可,调用某个 Action 里的 setter,让 即可isSetupComplete=false

以 ServerInfoAction 为例, 它继承自 ConfluenceActionSupport

getBootstrapStatusProvider.png

这里的 方法调用了 ,接下来就可以去 里面寻找调用链,可惜的是这里的 已经用不了了,只能找另外的getBootstrapStatusProvider()BootstrapStatusProviderImpl.getInstance()BootstrapStatusProviderImplsetSetupComplete()

设置完成.png

最终找到的是 方法,而在 类里面存在 方法可用getApplicationConfig()ApplicationConfigsetSetupComplete()

setSetupCompleteEnd.png

因为 Confluence 的所有 Action 都继承自 ConfluenceActionSupport, 所以理论上只要访问任意一个使用了 SafeParameterInterceptor 的路由, 无论是 GET 还是 POST 方法都能够利用成功

于是最后的 PoC 应该是

http://192.168.80.137:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false

在进行覆盖 之后重新注册管理员setupComplete=false

http://192.168.80.137:8090/setup/setupadministrator-start.action

漏洞分析/CVE-2023-22515 Confluence 未授权漏洞分析/poc.png

0x05 未授权之后的 RCE

X1r0z 师傅已经介绍了一种 RCE 的方法,但是利用条件有限,需要 web目录可写并且高权限用户

其实有一种更简单的方法,看到:Atlassian Confluence Unauthenticated Remote Code Execution ≈ Packet Storm

可以通过上传插件实现 RCE,利用工具github上已经存在了:GitHub - AIex-3/confluence-hack: CVE-2023-22515

http://192.168.80.137:8090/plugins/servlet/upm

管理插件.png

上传 plugin_shellplug.jar,访问/plugins/servlet/com.jsos.shell/ShellServlet

rce.png

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/226223.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川竹哲电子商务有限公司深耕抖音电商服务领域

随着数字经济的飞速发展&#xff0c;抖音电商服务成为了越来越多企业的首选。在这个充满机遇与挑战的时代&#xff0c;四川竹哲电子商务有限公司以其卓越的实力和专业的服务&#xff0c;成为了抖音电商服务领域的佼佼者。 一、深耕抖音电商服务领域 作为一家专注于抖音电商服务…

小白备战蓝桥杯:Java基础语法

一、注释 IDEA注释快捷键&#xff1a;Ctrl / 单行注释&#xff1a; //注释信息 多行注释&#xff1a; /* 注释信息 */ 二、字面量 常用数据&#xff1a;整数、小数、字符串&#xff08;双引号&#xff09;、字符&#xff08;单引号&#xff09;、布尔值&#xff08;tr…

第四节HarmonyOS 熟知开发工具DevEco Studio

一、设置主体样式 默认的代码主题样式是黑暗系的&#xff0c;如下图所示&#xff1a; 如果你不喜欢&#xff0c;可以按照一下步骤进行修改&#xff1a; 左上角点击Flie->Settings->Appearance&Behavior->Appearance&#xff0c;点击Theme&#xff0c;在弹出的下拉…

如何通过低代码工具,提升运输行业的运营效率和服务质量

《中国数字货运发展报告》显示&#xff0c;2022年我国公路货运市场规模在5万亿元左右。其中&#xff0c;数字货运整体市场规模约为7000亿元&#xff0c;市场渗透率约为15%。而以小微企业为主的货运行业&#xff0c;却以小、散、乱的行业特征&#xff0c;承载着5万亿元左右的市场…

Spring --- 创建一个Spring项目

文章目录 创建一个Maven项目添加Spring框架支持添加启动类 创建一个Maven项目 注&#xff1a;我们需要使用 Maven 来管理依赖&#xff0c;所以需要创建一个Maven项目 添加Spring框架支持 注&#xff1a; 添加这两个依赖才能正确使用 Spring在添加依赖后记得刷新&#xff0c;把依…

上海数交所与合合信息发布产业数据行业创新中心,政产学研合力为“数据航母”加速

大数据产业是数字经济创新发展、加速发展的重要方向。11月25日&#xff0c;2023全球数商大会在上海盛大开幕。大会以“数联全球、商通未来”为主题&#xff0c;聚焦数字经济时代下&#xff0c;数据要素推动实体经济发展的规划与成果&#xff0c;是数据交易领域的行业级峰会和数…

揭秘!9个月完成亚运会的整体数字化观测

项目背景与业务场景 2023 第 19 届亚运会在杭州举办&#xff0c;这将提高杭州的国际知名度&#xff0c;促进杭州经济、社会的全面发展&#xff0c;并将进一步推动奥林匹克运动在中国的发展&#xff0c;并且提升杭州城市形象和国际影响力。为亚运村村民提供便捷周到的服务和丰富…

全网最全卡方检验汇总

一文整理了卡方检验全部内容&#xff0c;包括卡方检验的定义&#xff08;基本思想、卡方值计算、适用条件分析&#xff09;、卡方检验分类&#xff08;2*2四格表卡方、R*C表格卡方、配对卡方、卡方拟合优度检验、分层卡方&#xff09;、卡方检验如何分析&#xff08;数据格式、…

群晖NAS配置之自有服务器frp实现内网穿透

什么是frp frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透 为什么使用 frp &a…

git rebase冲突说明(base\remote\local概念说明)

主线日志及修改 $ git log master -p commit 31213fad6150b9899c7e6b27b245aaa69d2fdcff (master) Author: Date: Tue Nov 28 10:19:53 2023 08004diff --git a/123.txt b/123.txt index 294d779..a712711 100644 --- a/123.txtb/123.txt-1,3 1,4 123 4^Mcommit a77b518156…

C语言常见算法

算法&#xff08;Algorithm&#xff09;&#xff1a;计算机解题的基本思想方法和步骤。算法的描述&#xff1a;是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述&#xff0c;包括需要什么数据&#xff08;输入什么数据、输出什么结果&#xff09;、采用什么结构、使…

【Qt】之QSet使用

描述 QSet类是一个模板类&#xff0c;它提供基于散列表的集合。 QSet是Qt的通用容器类之一。它以未指定的顺序存储值&#xff0c;并提供非常快速的值查找。在内部,QSet是作为QHash实现的。 下面是一个带有QString值的QSet示例: QSet<QString> set;插入方式1&#xff…