CVE-2022-26134 Confluence OGNL RCE 漏洞复现
漏洞范围
Confluence Server and Data Center >= 1.3.0
Confluence Server and Data Center < 7.4.17
Confluence Server and Data Center < 7.13.7
Confluence Server and Data Center < 7.14.3
Confluence Server and Data Center < 7.15.2
Confluence Server and Data Center < 7.16.4
Confluence Server and Data Center < 7.17.4
Confluence Server and Data Center < 7.18.1
环境搭建
docker 环境
docker 搭好后
搭建好之后还需要去注册账号获取临时 KEY 来激活
参考链接:https://www.modb.pro/db/431731
安装过程
安装成功后

在容器中 /opt/atlassian/confluence/bin 目录下修改 setenv.sh 文件,加入远程调试配置。
进入容器后将 /opt/atlassian 目录下的 confluence 源码使用 docker cp 命令复制到本地。
使用 IDEA 将 /confluence/WEB-INF 下的 atlassian-bundled-plugins、atlassian-bundled-plugins-setup、lib 文件拉取为依赖文件
idea 远程调试设置

之后在 com/opensymphony/webwork/dispatcher/ServletDispatcher.class 第 85 行下断点 (service 函数)

为什么在 ServletDispatcher 下断点?运维所有的 .action 最后的 servlet 指向了,com.atlassian.confluence.servlet.ConfluenceServletDispatcher 类,而 ConfluenceServletDispatcher 继承了 ServletDispatcher


动态调试过程
1.com/opensymphony/webwork/dispatcher/ServletDispatcher 调用 com/atlassian/confluence/servlet/ConfluenceServletDispatcher.classserviceAction 函数
2. 创建一个 hash 表把传进的全部作为 hash 表默认值,变量名为 extraContext
3.put 变量名为 com.opensymphony.xwork.dispatcher.ServletDispatcher,值是自身对象
4. 调用 DefaultActionProxy 里的 createActionProxy 传入 namespace,actionName,extraContext 变量名为 proxy
5. 调用 proxy 的 execute 函数


DefaultActionProxy 里的 execute 函数
1. 获取 ActionContext 对象实例 (DefaultActioninvocation)
2. 调用该对象的 invoke 函数

DefaultActioninvocation invoke 函数
1. 遍历 this.interceptors.hasNext() hash 表 (该 hash 表存着所有类对象)
2. 当 resultCode 为 notpermitted 时,退出循环

6. 进入到 ActionChainResult 类里的 execute 函数
7.this.namespace 为我们传入的 payload
8.OgnlValueStack stack 变量获取 OgnlValueStack 对象
9. 将 stack 和 this.namespace 传入 TextParseUtil.translateVariables 函数

translateVariables 函数
1. 正则提取 ONGL 表达式
2. 调用 OgnlValueStack.findValue 函数传入 ONGL 表达式 复制变量 object o
3. 执行完后返回内容

OgnlValueStack.findValue 函数
最后调用 findValue 函数对表达式进行解析

(不知道是不是远程调试的问题,这里断点 o 没返回执行命令的结果,文章里有)

payload 刨析
payload 刨析
1. 定义 a 变量调用 Runtime.exec 执行命令
2. 将执行命令结果设置到返回头 X-Cmd-Response
出处 Y4er 的博客 https://y4er.com/post/cve-2022-26134-confluence-server-data-center-ognl-rce/
添加用户的 payload
设置 cookie payload
EXP
https://github.com/Nwqda/CVE-2022-26134
https://github.com/BeichenDream/CVE-2022-26134-Godzilla-MEMSHELL
参考链接
https://www.freebuf.com/vuls/335624.html
https://y4er.com/post/cve-2022-26134-confluence-server-data-center-ognl-rce/