Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-26084 — Technical analysis and proof-of-concept exploit for CVE-2021-26084, an OGNL injection vulnerability in Atlassian Confluence Server. Includes root cause breakdown, vulnerable parameter mapping, and detection guidance. | Kitploit
工具/GitHubGitHub/nahcusira/cve-2021-26084
漏洞分析漏洞利用Web应用程序漏洞利用信息收集渗透测试学习与教育
GitHubnahcusira/cve-2021-26084

CVE-2021-26084

Technical analysis and proof-of-concept exploit for CVE-2021-26084, an OGNL injection vulnerability in Atlassian Confluence Server. Includes root cause breakdown, vulnerable parameter mapping, and detection guidance.

查看仓库
122年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-26084

影响范围

版本 < 6.13.23

6.14.0 ≤ 版本 < 7.4.11

7.5.0 ≤ 版本 < 7.11.6

7.12.0 ≤ 版本 < 7.12.5

原因与利用方式

Confluence 使用框架将 URL 映射到 Java 类,从而创建所谓的“action”。Action URL 以“.action”结尾,并在 confluence-.jar 的 xwork.xml 文件以及附带插件的 JAR 文件中的 atlassian-plugin.xml 文件中定义。每个 action 至少包含一个 name 属性(定义 action 名称)、一个 class 属性(定义执行 action 的 Java 类)以及至少一个 result 元素(根据 action 的结果决定要渲染的 Velocity 模板)。从 action 返回的常见值有“error”、“input”、“success”,但如果与 XWork XML 中的 result 元素匹配,也可以使用任何结果。Action 可以包含 method 属性,允许调用指定 Java 类的特定方法。如果未指定方法,则调用 doDefault() 方法。以下是 createpage-entervariables action 的 action 条目:

image

com.atlassian.confluence.pages.actions.PageVariablesAction 类中的 doEnter() 方法处理对 doenterpagevariables.action 的请求,并返回“error”、“input”、“success”值。这会导致渲染对应的 Velocity 模板。

这里,action 元素的“name”属性值对应于路径 /.action,并且元素包含的模板将作为响应的一部分显示(基于 error/success 等)。因此,根据此示例,只需访问 /pages/doenterpagevariables.action 即可渲染 velocity 模板。

image

我们可以观察到 velocity 模板在 HTML 页面中是如何渲染的。

image

在模板中将标签名称作为参数输入,并注意到这些值是从请求参数中获取并返回在响应中的。

image

#tag 的使用方式: #tag (“attribute1”, “attribute2”, “attribute3”)

这些属性在渲染过程中会通过 AbstractTagDirective.applyAttributes() 获取。

image

#tag ("Hidden" "name='queryString'" "value='ahihihi'")

在属性由 AbstractTagDirective.applyAttributes() 方法获取后,它们被传递给 AbstractUITag.doEndTag() → AbstractUITag.evaluateParams()。

image

然后继续传递给 WebWorkTagSupport.findValue() → OgnlValueFinder.findValue(),并以表达式形式传入。

image

随后传递给 SafeExpressionUtil.isSafeExpression()。

image

在这里,表达式已被编译,经过黑名单检查并放入缓存。编译步骤会将表达式编译为 ASTConst 形式,当被评估时,会返回之前编译好的字符串。

image

当表达式从输入中添加了“'”时,它已被转义为 HTML 实体。

image

转义发生在 HtmlAnnotationEscaper.annotatedValueInsert()。

image

在这里,调用了 ognl.JavaCharStream.readChar() 方法并评估 Unicode 转义字符,因此当传入“\u0027”时,它会被转换为“'”。因此可以转义并附加 OGNL 表达式。

image

但必须绕过 OGNL 的黑名单,如下所示:

image

可以通过使用数组访问器(Array accessors)而不是使用“getClass”方法或“.class”属性来绕过。

queryString=aaa\u0027%2b#{\u0022\u0022[\u0022class\u0022]}%2b\u0027bbb

image

检测方法

监视所有 HTTP 流量请求,其中请求 URI 的路径部分包含下表中“URI Path”列中的任一字符串:

如果发现此类请求,则应检查 HTTP 请求方法。如果请求方法是 POST,则在 HTTP 请求的 body 中查找上表中对应的 Vulnerable Parameters;如果请求方法是 GET,则在 HTTP 请求的 request-URI 中查找这些参数。检查任意 Vulnerable Parameters 的值是否包含字符串“\u0027”或其 URL 编码形式。如果是,则该流量应被视为恶意流量,可能正在发生针对此漏洞的利用攻击。

下载工具
URI PathVulnerable Parameters
/users/darkfeatures.actionfeatureKey
/users/enabledarkfeature.actionfeatureKey
/users/disabledarkfeature.actionfeatureKey
/login.actiontoken
/dologin.actiontoken
/signup.actiontoken
/dosignup.actiontoken
/pages/createpage-entervariables.actionqueryString, linkCreation
/pages/doenterpagevariables.actionqueryString
/pages/createpage.actionqueryString
/pages/createpage-choosetemplate.actionqueryString
/pages/docreatepagefromtemplate.actionqueryString
/pages/docreatepage.actionqueryString
/pages/createblogpost.actionqueryString
/pages/docreateblogpost.actionqueryString
/pages/copypage.actionqueryString
/pages/docopypage.actionqueryString
/plugins/editor-loader/editor.actionsyncRev